Nmap備忘單:從探索到漏洞利用 第三章 NSE腳本的使用

眾所周知NMAP是經(jīng)常用來進行端口發(fā)現(xiàn)、端口識別。除此之外我們還可以通過NMAP的NSE腳本做很多事情,比如郵件指紋識別,檢索WHOIS記錄,使用UDP服務(wù)等。
發(fā)現(xiàn)地理位置
Gorjan Petrovski提交了個NMAP的NSE腳本,幫助我們定位遠程IP的地理位置:ip-geolocation-maxmind,ip-geolocation-ipinfodb,和ipgeolocation-geobytes。
這將告訴我們?nèi)绾卧O(shè)置并使用附帶的NMAP NSE的地理位置腳本。
ip-geolocation-maxmind
為了能調(diào)用該腳本,需要先下載MaxMind的城市數(shù)據(jù)庫http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz。解壓到本地的NMAP數(shù)據(jù)文件夾($Nmap_DATA/nselib/data/)。
命令:
Nmap --script ip-geolocation-* ip
提交新的地理位置提供商
有時地理位置可能是錯誤的,因為地理位置取決于的MaxMind數(shù)據(jù)庫。因此我們必須給NMAP提供一個新的數(shù)據(jù)庫。
獲得WHOIS記錄信息
WHOIS記錄通常包含如注冊人的姓名和聯(lián)系方式的重要數(shù)據(jù)。雖然這里有很多工具可以查詢WHOIS協(xié)議,但NMAP的證明了自身的優(yōu)秀,因為它能夠批量處理IP范圍和主機列表。
命令:Nmap --script whois 目標
--script WHOIS查詢參數(shù)告訴NMAP的,以獲得給定目標的記錄。此腳本使用IANA分配的數(shù)據(jù)來選擇RIR,它的結(jié)果在本地緩存。另外,我們可以覆蓋此行為,并選擇服務(wù)提供商的說法whodb使用的順序:
參數(shù)--script whois告訴NMAP去查詢區(qū)域互聯(lián)網(wǎng)注冊管理機構(gòu)WHOIS數(shù)據(jù)庫來獲得給定目標的whois記錄。這個腳本使用IANA分配的數(shù)據(jù)選擇RIR并在本地緩存結(jié)果。或者我們可以覆蓋這一行為,指定whois數(shù)據(jù)庫的提供商并依次查詢。
命令:
Nmap --script whois --script-args whois.whodb=arin+ripe+afrinic <目標>
該腳本將會按順序在WHOIS提供商中查詢記錄或者推薦記錄,要忽略推薦記錄請指定參數(shù)值nofollow。
命令:Nmap --script whois --script-args whois.whodb=nofollow <目標>
要批量查詢的主機名列表(-iL <文件名>)的WHOIS記錄而不啟用端口掃描(-sn)。命令:Nmap -sn –script whois -v -iL hosts.txt (hosts.txt包含主機或者ip的列表)
禁用緩存
有時候whois查詢返回的是緩存的結(jié)果而不是最新的,可以指定參數(shù)禁止查詢緩存。
命令:
Nmap -sn --script whois -script-args whois.whodb=nocache scanme. Nmap.org
檢查主機是否有惡意行為
NMAP通過調(diào)用谷歌安全瀏覽服務(wù)API來檢查主機是否進行惡意軟件分發(fā)或者網(wǎng)絡(luò)釣魚攻擊的行為。
使用腳本http-google-malware之前,先獲取谷歌安全瀏覽服務(wù)API的密鑰:
https://developers.google.com/safe-browsing/key_signup?csw=1
命令:
Nmap -p80 -script http-google-malware -script-args http-google-malware.api=<API> <目標>
如果不使用API,也可以進行查詢。
命令:Nmap -p80 --script http-google-malware -v scanme.Nmap.org
收集有效的郵箱
收集郵箱對滲透測試非常有用,我們可以對這些郵箱進行釣魚工具或者暴力破解攻擊。NMAP可以進行郵箱的收集,但是腳本http-google-email不在NMAP的官方資料庫中,我們需要手動下載http://seclists.org/Nmap-dev/2011/q3/att-401/http-google-email.nse,并把它復制到本地腳本目錄。正如你所看到的,下面的截圖有電子郵件收集腳本的詳細信息:
但作為一名安全研究人員必須要了解腳本,因為腳本可能包含惡意的東西。所以下面介紹關(guān)于腳本的詳細信息。下面就是下載的腳本內(nèi)容,這樣你就不必再下載,可以直接使用該腳本。
找到所有的NSE腳本的最簡單方法是使用find命令如下所示。
description = [[ http-google-email queries the Google web search engine and Google Groups for e-mails pertaining to a specific domain. ]] --- -- @usage -- Nmap -p80 --script http-google-email <host> -- -- @output -- PORT STATE SERVICE -- 80/tcp open http -- | http-google-email: -- | Nmap-dev () insecure org -- | Nmap-svn () insecure org -- |_fyodor () insecure org -- -- @args http-google-email.domain Domain to search for. -- @args http-google-email.pages The number of results pages to be requested from Google Web search and Google Group search respectively. Default is 5. --- author = "Shinnok" license = "Same as Nmap--See http://Nmap.org/book/man-legal.html" categories = {"discovery", "safe", "external"} require "http" require "shortport" portrule = shortport.http --Builds Google Web Search query --@param domain --@param page --@return Url local function google_search_query(domain, page) return string.format("http://www.google.com/search?q=%%40%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page) end --Builds Google Groups Search query --@param domain --@param page --@return Url local function google_groups_query(domain, page) return string.format("http://groups.google.com/groups?q=%s&hl=en&lr=&ie=UTF-8&start=%s&sa=N", domain, page) end --- --MAIN --- action = function(host, port) local pages = 50 local target local emails = {} if(stdnse.get_script_args("http-google-email.pages")) then pages = stdnse.get_script_args("http-google-email.pages")*10 end -- Check if we have the domain argument passed if(stdnse.get_script_args("http-google-email.domain")) then target = stdnse.get_script_args("http-google-email.domain") else -- Verify that we have a hostname available if not(host.targetname) then return string.format("[ERROR] Host can not be resolved to a domain name.") else target = host.targetname end end stdnse.print_debug(1, "%s: Checking domain %s", SCRIPT_NAME, target) -- Google Web search for page=0, pages, 10 do local qry = google_search_query(target, page) local req = http.get_url(qry) stdnse.print_debug(2, "%s", qry) stdnse.print_debug(2, "%s", req.body) body = req.body:gsub('<em>', '') body = body:gsub('</em>', '') if body then local found = false for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do for _, value in pairs(emails) do if value == email then found = true end end if not found then emails[#emails+1] = email end end end end -- Google Groups search for page=0, pages, 10 do local qry = google_groups_query(target, page) local req = http.get_url(qry) stdnse.print_debug(2, "%s", qry) stdnse.print_debug(2, "%s", req.body) body = req.body:gsub('<b>', '') body = body:gsub('</b>', '') if body then local found = false for email in body:gmatch('[A-Za-z0-9%.%%%+%-]+@' .. target) do for _, value in pairs(emails) do if value == email then found = true end end if not found then emails[#emails+1] = email end end end end if #emails > 0 then return "\n" .. stdnse.strjoin("\n", emails) end end
find / -name ‘*.nse’
一般情況下的路徑可能是usr/share/Nmap/scripts。
找到腳本文件所在的目錄后,切換到這個目錄,執(zhí)行wget命令,當然你也可以手動拷貝一份到這個目錄。
看下腳本內(nèi)容是否正確。
拷貝了http-google-email.nse之后,我們需要手動更新腳本數(shù)據(jù)庫,執(zhí)行如下的命令:
Nmap -script-updatedb
更新完成后,就可以運行腳本了。
Nmap -p80 –script http-google-email <目標>
NSE腳本參數(shù)
選項–script-args是用于設(shè)置NSE腳本的參數(shù)。例如:
Nmap -sV --script http-title --script-args http.useragent=”Mozilla 999 ” <目標>
以上命令設(shè)置了參數(shù)useragent的值。
獲取主機信息并進一步深入
作為一個專業(yè)的安全測試人員我們應(yīng)該進一步獲得關(guān)于網(wǎng)絡(luò)或主機的附加信息去推動滲透測試。
-O參數(shù)用來探測目標操作系統(tǒng):
命令:Nmap -O 目標
通過分析目標的響應(yīng)是否符合某些操作系統(tǒng)的特征,從而判斷目標操作系統(tǒng)的類型。為了能更準確的探測操作系統(tǒng),目標主機至少要有一個開放的端口和關(guān)閉的端口。當掃描多個目標時,選項–osscan-limit可以忽略不滿足這個要求的主機以加快掃描速度。使用選項-v可以展示掃描過程。
命令:Nmap -v -O 目標
在某些情況下NMAP不能確定操作系統(tǒng)時,它會顯示一個指紋。該指紋可以提交到NMAP的數(shù)據(jù)庫中(http://www.Nmap.org/submit/)
提交生成的指紋,并正確識別目標的操作系統(tǒng),我們可以改善NMAP的操作系統(tǒng)檢測功能在未來的版本中的準確性。
猜測操作系統(tǒng)
如果NMAP無法確定操作系統(tǒng)類型,通過選項–osscan-guess強制識別os。
命令:Nmap -O –osscan-guess 目標
它將列出的NMAP腳本數(shù)據(jù)庫操作系統(tǒng)的所有可能的匹配。–fuzzy可以用作–osscan-guess的快捷方式。
如果目標至少有一個開放和一個關(guān)閉的TCP端口那么操作系統(tǒng)的類型識別會比較有效。選項–osscan-limit將會使NMAP不對沒有滿足這個要求的目標進行操作系統(tǒng)的識別。這樣可以節(jié)省大量的時間,尤其是在對許多主機-Pn掃描。它只與選項-O或者-A搭配使用。
–max-OS-tries(設(shè)置針對目標的操作系統(tǒng)檢測的最大嘗試次數(shù))
當NMAP針對目標進行操作系統(tǒng)檢測,并未能找到一個完美的匹配時,它通常會重復嘗試。默認情況下,如果環(huán)境條件比較好,NMAP會嘗試五次,如果條件比較差那么只會嘗試二次。指定 –max-os-tries的值比較低的話(比如1)會加快NMAP的速度,但可能會錯過潛在的可識別的目標。
命令:map -O –max-os-tries 目標
掃描時顯示調(diào)試信息
選項 –version-trace會讓NMAP顯示詳細的掃描內(nèi)容。
命令:Nmap -sV –version-trace 目標
執(zhí)行RPC掃描
選項-sR對目標進行RPC(遠程過程調(diào)用)掃描
命令:Nmap -sR 目標
上述-sR掃描的輸出顯示有關(guān)目標系統(tǒng)上運行的RPC服務(wù)的信息。RPC與Unix和Linux系統(tǒng)上的NFS(網(wǎng)絡(luò)文件系統(tǒng))服務(wù)關(guān)系很緊密。
NMAP掃描使用-hostmap選項
此hostmap腳本基于第三方服務(wù),而官方版本只支持BFK的DNS歷史記錄。正如我前面所說的,下載腳本
(https://svn.Nmap.org/Nmap/scripts/hostmap-bfk.nse)并更新NMAP的腳本數(shù)據(jù)庫,然后執(zhí)行命令:
Nmap -p80 –script hostmap Nmap.org
這些參數(shù)–script hostmap -p80告訴NMAP的啟動HTTP版的hostmap腳本,并限制只掃描80端口以加快這一任務(wù)。
該hostmap.nse查詢兩個不同的Web服務(wù):BFK DNS記錄和ip2hosts.com。 BFK DNS記錄是一項免費服務(wù),從公共DNS數(shù)據(jù)和ip2hosts收集其信息。這兩項服務(wù)都是免費的,濫用他們將很有可能讓你禁止使用該服務(wù)。
可以設(shè)定參數(shù)指定不同的搜索引擎。
Nmap -p80 –script hostmap –script-args hostmap.provider=BING <目標>
Nmap -p80 –script hostmap –script-args hostmap.provider=BFK <目標>
Nmap -p80 –script hostmap –script-args hostmap.provider=ALL <目標>
為了保存掃描每個IP的主機名,使用參數(shù)hostmap.prefix。設(shè)置此參數(shù)將創(chuàng)建一個在我們的工作目錄<前綴><目標>文件名的文件:
Nmap -p80 –script hostmap-script-ARGS hostmap.prefix=hostfile <目標>
暴力破解DNS記錄
這是用于試圖通過暴力枚舉DNS主機名猜測常見的子域。指定DNS-brute.srv,dns-bruter也將嘗試列舉常見的DNS SRV記錄。
NMAP的時間選項
時間選項是什么,為什么?
作為一個滲透測試人員,我們通常會在在NMAP上設(shè)置時間選項,但我們必須得了解時間選項是什么,為什么要設(shè)置這個選項?
我們使用NMAP的時候經(jīng)常會遇到防火墻,這些防火墻會阻礙某些請求。我們會根據(jù)需求設(shè)置時間選項以加快或減慢NMAP的掃描速度。
當在快速網(wǎng)絡(luò)中(比如內(nèi)網(wǎng))掃描大量的主機時,我們可能需要增加并行操作的數(shù)量以便更快的獲得結(jié)果。另外在掃描速度慢的網(wǎng)絡(luò)時(或在互聯(lián)網(wǎng)上),你可能需要減慢掃描速度以獲得更準確的結(jié)果,或者逃避入侵檢測系統(tǒng)。下面是一些NMAP的時間選項。
時間參數(shù)
默認情況下我們掃描使用的NMAP是在幾秒鐘內(nèi)開始掃描。但是我們可以通過設(shè)置時間參數(shù)進一步提高性能。NMAP支持下列的時間格式:
M-分鐘
S-秒
MS-毫秒
H-小時
有時如何選擇時間參數(shù)可能會讓人感到困惑,我們將設(shè)置多少時間用于掃描。要解決這些問題,NMAP的提供了如下多種掃描時序選項。
命令:Nmap -T[0-5] 目標
選項0:
這是一個非常緩慢的掃描選項,以便防火墻或IDS不會阻斷該請求。
命令:Nmap -T0 目標
選項1:
比選項0稍微快一點點的掃描速度,用于繞過防火墻和IDS。
命令:Nmap -T1 目標
雖然T0和T1對于避免IDS報警非常有用,但它們將會花非常多的時間來掃描數(shù)千個端口或者服務(wù)器。
選項2:
比較“禮貌”的選項,占用較少的帶寬以及目標計算機的資源。
命令:Nmap -T2 目標
選項3:
這是nmap的默認選項,常規(guī)的掃描速度和資源占用。
命令:Nmap -T3 目標
選項4和5:
在T4和T5是一個非常快速和侵略性的掃描。假設(shè)在一個相當快速和可靠的網(wǎng)絡(luò)中,T4可以加速掃描。T5則是在此基礎(chǔ)之上犧牲了準確性。
命令:Nmap -T4/-T5 目標
并行選項:
作為一個pentester我們不應(yīng)該通過一個接一個的掃描浪費我們的時間。相反,我們可以通過并行掃描來優(yōu)化。NMAP將目標IP段進行分組,然后在一次掃描一個組。一般情況下較大的分組是更有效的。缺點直到整個分組完成才能知道目標主機的情況。
并行處理有兩個選項:最大值和最小值。
min:
選項–min-parallelism用于指定并行端口掃描操作的最小數(shù)量。
Nmap –min-parallelism [數(shù)量] [目標]
手動設(shè)置–min-parallelism選項可能會提升掃描性能,設(shè)置過高可能會產(chǎn)生不準確的結(jié)果。
MAX:
選項–max-parallelism用于指定并行端口掃描操作的最大數(shù)量。
Nmap –max-parallelism [數(shù)量] [目標]
主機分組大小選項:
nmap也可以設(shè)置主機分組的最大值和最小值。
MAX:
選項–max-hostgroup用于指定的Nmap并行掃描主機數(shù)的最大值。
Nmap –max-hostgroup [數(shù)目] [目標]
Min:
選項–min-hostgroup用于指定的Nmap并行掃描主機數(shù)的最小值。
Nmap –min-hostgroup [數(shù)目] [目標]
在掃描一個IP段或整個子網(wǎng)時NMAP將并行掃描多個目標以節(jié)省時間。默認情況下,基于掃描類型和網(wǎng)絡(luò)條件Nmap會 自動調(diào)整正在執(zhí)行的主機組的大小。通過指定–min-hostgroup選項,Nmap嘗試保持主機組的大小為指定值。
設(shè)置最大值會有效避免網(wǎng)絡(luò)擁堵和避免網(wǎng)內(nèi)安全設(shè)備的告警。
RTT 超時
TCP連接中,RTT(往返超時)是用于在通信中的滑動窗口協(xié)議超時值的測定,并依賴于以下要點:如果超時值太小,源很快就超時,造成不必要的重傳;另一方面,如果在超時值太大,則源會花費太長的時間以從錯誤中恢復。
NMAP會維持一個超時值,決定它等待探針響應(yīng)的時間,以及再次發(fā)送探針的間隔。這是基于以前的探針的響應(yīng)時間來計算。
在掃描過程中,Nmap計算這些響應(yīng)時間值的內(nèi)部流程如下:
SRTT - 平滑往返時間:這個響應(yīng)時間的 估算是基于觀察客戶端到服務(wù)端之間的通信狀況如何。這個值以微秒計算。
RTTVAR - 往返時間方差:網(wǎng)絡(luò)通信可以是非常難以預(yù)測的,而Nmap通過創(chuàng)造一系列超時值去補償這種不確定性。如果未在此方差內(nèi)接收響應(yīng),則Nmap認為這一個響應(yīng)不可能永遠出現(xiàn)。
NMAP初始超時
它控制網(wǎng)絡(luò)響應(yīng)初始超時。
命令:Nmap –initial-rtt-timeout [時間] [目標]
增加時間值將減少因超時分組重發(fā)的次數(shù)。通過降低值我們可以加快掃描,但我們必須小心這樣做。設(shè)置RTT超時值太低,可以抵消任何潛在的性能提升,并導致結(jié)果不準確。
RTT最大值
選項–max-rtt-timeout用于指定最大RTT(往返時間)數(shù)據(jù)包響應(yīng)超時。
命令:Nmap –max-rtt-timeout [時間] [目標]
默認情況下為達到最佳效果Nmap會動態(tài)調(diào)整RTT超時選項。最大RTT超時缺省值為10秒。手動降低 最大RTT超時將允許更快的掃描(尤其是當掃描大塊地址)。提高最大RTT超時將防止Nmap在網(wǎng)絡(luò)狀況不佳的情況進行掃描時過早地放棄。典型值是在 100毫秒(快速/可靠的網(wǎng)絡(luò))和10000毫秒( 慢速/不可靠的網(wǎng)絡(luò))之間。
最大嘗試次數(shù)
這個選項用于設(shè)置每個探針最大的重復次數(shù)。
命令:Nmap –max-retries [數(shù)目] [目標]
默認情況下,Nmap基于網(wǎng)絡(luò)狀況自動調(diào)整探針重傳次數(shù)。如果我們要覆蓋默認設(shè)置或解決連接問題的可以使用–max-retries選項。指定的數(shù)值會增加它完成一個掃描需要的時間,但會產(chǎn)生更精確的結(jié)果。降低–max-retries 我們可以加快掃描,但我們可能無法得到準確的結(jié)果。
TTL選項
TTL(存活時間)是因特網(wǎng)協(xié)議(IP)報文分組中的一個值,用于告訴網(wǎng)絡(luò)路由器分組是否已經(jīng)在網(wǎng)絡(luò)中的時間過長而應(yīng)丟棄。從滲透測試者的角度來看,一個TTL值可以幫助了解有關(guān)目標的大量信息。
選項–ttl用于指定掃描中的ttl值。
命令:Nmap –ttl [時間] [目標]
使用此選項發(fā)送的數(shù)據(jù)包都會有指定的TTL值。掃描目標時連接速度很慢,其中正常數(shù)據(jù)包可能會接收到響應(yīng)之前超時,此選項很有用。
主機超時選項
選項–host-timeout指定Nmap在超時多少時間后放棄對主機的掃描。
命令:Nmap –host-timeout [時間] [目標]
如果它位于慢速或不可靠的網(wǎng)絡(luò)上主機可能需要較長的時間來掃描。由速率限制防火墻保護的系統(tǒng)也可能需要相當長的時間來進行掃描。選項–host-timeout指示Nmap如果如果指定時間內(nèi)未能完成掃描則放棄目標。在上述的例子中,掃描實際上花費更長的時間(超過一分鐘)才能完成,這將導致的Nmap終止掃描(因為已經(jīng)指定一分鐘內(nèi))。掃描跨WAN或Internet連接的多個系統(tǒng)時,此選項特別有用。
最小掃描延遲
選項–scan-delay指示Nmap在發(fā)送探針之間的指定的最小時間間隔是多久。
命令:Nmap –scan-delay [時間] [目標]
一些系統(tǒng)會采用速率限制阻礙Nmap掃描嘗試。默認情況下Nmap會檢測系統(tǒng)的速率限制自動調(diào)節(jié)掃描延遲。在某些情況下我們需要自己設(shè)置掃描延遲比如在限速或有IDS防護的情況下。
最大掃描延遲
選項–max-scan-delay指示Nmap在發(fā)送探針之間的指定的最大時間間隔是多久。
命令:Nmap –max-scan-delay [時間] [目標]
指定–max-scan-delay這樣可以加快掃描,但是會降低掃描精度,同時網(wǎng)絡(luò)負載會變大。
最小發(fā)包速率
選項–min-rate用來指定Nmap每秒鐘發(fā)送的數(shù)據(jù)包數(shù)量最小是多少。
命令:Nmap –min-rate [數(shù)量] [目標]
最大發(fā)包速率
選項–max-rate用來指定Nmap每秒鐘發(fā)送的數(shù)據(jù)包數(shù)量最大是多少。
命令:Nmap –max-rate [數(shù)量] [目標]
在上面的例子中,–max-rate 30指示Nmap每秒發(fā)送不超過30個數(shù)據(jù)包。這會大大減緩掃描速度,但對試圖躲避入侵檢測系統(tǒng)或者掃描有速率限制的目標有幫助。
繞過RST包速率限制
選項–defeat-rst-ratelimit用于通過發(fā)送RST(重置請求)包來進行速率限制的主機。
命令:Nmap –defeat-rst-ratelimit [目標]
選項–defeat-rst-ratelimit在目標通過發(fā)送RST包來限制掃描速率的情況下非常有用,它可以加快掃描速度,然而會影響結(jié)果的準確度。不過這種情況非常少見,正因如此也很少使用這個選項。
到這里文章就結(jié)束了,在下一部分,我會介紹如何使用nmap進行防火墻繞過,Web服務(wù)審計,Web應(yīng)用程序滲透測試,以及Nmap腳本引擎的開發(fā)。
引用:
http://www.professormesser.com/nmap/hacking-nmap-using-nmap-to-calculate-network-response-time/5/
http://nmap.org/book/man-performance.html
*參考來源:resources.infosecinstitute,F(xiàn)B小編東二門陳冠希編譯,轉(zhuǎn)載請注明來自FreeBuf黑客與極客(FreeBuf.COM)
相關(guān)文章
- 這是我們的第二期NMAP備忘單,基本上,我們將討論一些高級NMAP掃描的技術(shù),我們將進行一個中間人攻擊(MITM)?,F(xiàn)在,游戲開始了2016-12-27
- nmap是一個網(wǎng)絡(luò)連接端掃描軟件,用來掃描網(wǎng)上電腦開放的網(wǎng)絡(luò)連接端。確定哪些服務(wù)運行在哪些連接端,并且推斷計算機運行哪個操作系統(tǒng)(這是亦稱 fingerprinting)。它是網(wǎng)2016-12-27
- 這是我們的Nmap備忘單的第四部分,本文中我們將討論更多東西關(guān)于掃描防火墻,IDS / IPS 逃逸,Web服務(wù)器滲透測試等。在此之前,我們應(yīng)該了解一下防火墻的一些基礎(chǔ)知識以便2016-12-27