1 Nmap介紹
Nmap是一款開源免費(fèi)的網(wǎng)絡(luò)發(fā)現(xiàn)(Network Discovery)和安全審計(jì)(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始創(chuàng)建的。隨后在開源社區(qū)眾多的志愿者參與下,該工具逐漸成為最為流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日發(fā)布,詳情請(qǐng)參見:www.nmap.org。
一般情況下,Nmap用于列舉網(wǎng)絡(luò)主機(jī)清單、管理服務(wù)升級(jí)調(diào)度、監(jiān)控主機(jī)或服務(wù)運(yùn)行狀況。Nmap可以檢測(cè)目標(biāo)機(jī)是否在線、端口開放情況、偵測(cè)運(yùn)行的服務(wù)類型及版本信息、偵測(cè)操作系統(tǒng)與設(shè)備類型等信息。
Nmap的優(yōu)點(diǎn):
1. 靈活。支持?jǐn)?shù)十種不同的掃描方式,支持多種目標(biāo)對(duì)象的掃描。
2. 強(qiáng)大。Nmap可以用于掃描互聯(lián)網(wǎng)上大規(guī)模的計(jì)算機(jī)。
3. 可移植。支持主流操作系統(tǒng):Windows/Linux/Unix/MacOS等等;源碼開放,方便移植。
4. 簡單。提供默認(rèn)的操作能覆蓋大部分功能,基本端口掃描nmap targetip,全面的掃描nmap –A targetip。
5. 自由。Nmap作為開源軟件,在GPL License的范圍內(nèi)可以自由的使用。
6. 文檔豐富。Nmap官網(wǎng)提供了詳細(xì)的文檔描述。Nmap作者及其他安全專家編寫了多部Nmap參考書籍。
7. 社區(qū)支持。Nmap背后有強(qiáng)大的社區(qū)團(tuán)隊(duì)支持。
8. 贊譽(yù)有加。獲得很多的獎(jiǎng)勵(lì),并在很多影視作品中出現(xiàn)(如黑客帝國2、Die Hard4等)。
9. 流行。目前Nmap已經(jīng)被成千上萬的安全專家列為必備的工具之一。
1.1 Zenmap
Zenmap是Nmap官方提供的圖形界面,通常隨Nmap的安裝包發(fā)布。Zenmap是用Python語言編寫而成的開源免費(fèi)的圖形界面,能夠運(yùn)行在不同操作系統(tǒng)平臺(tái)上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在為nmap提供更加簡單的操作方式。簡單常用的操作命令可以保存成為profile,用戶掃描時(shí)選擇profile即可;可以方便地比較不同的掃描結(jié)果;提供網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(NetworkTopology)的圖形顯示功能。
Nmap包含四項(xiàng)基本功能:
主機(jī)發(fā)現(xiàn)(Host Discovery)
端口掃描(Port Scanning)
版本偵測(cè)(Version Detection)
操作系統(tǒng)偵測(cè)(Operating System Detection)
而這四項(xiàng)功能之間,又存在大致的依賴關(guān)系(通常情況下的順序關(guān)系,但特殊應(yīng)用另外考慮),首先需要進(jìn)行主機(jī)發(fā)現(xiàn),隨后確定端口狀況,然后確定端口上運(yùn)行具體應(yīng)用程序與版本信息,然后可以進(jìn)行操作系統(tǒng)的偵測(cè)。而在四項(xiàng)基本功能的基礎(chǔ)上,Nmap提供防火墻與IDS(IntrusionDetection System,入侵檢測(cè)系統(tǒng))的規(guī)避技巧,可以綜合應(yīng)用到四個(gè)基本功能的各個(gè)階段;另外Nmap提供強(qiáng)大的NSE(Nmap Scripting Language)腳本引擎功能,腳本可以對(duì)基本功能進(jìn)行補(bǔ)充和擴(kuò)展。
2 Nmap基本掃描方法
Nmap主要包括四個(gè)方面的掃描功能,主機(jī)發(fā)現(xiàn)、端口掃描、應(yīng)用與版本偵測(cè)、操作系統(tǒng)偵測(cè)。在詳細(xì)講解每個(gè)具體功能之前,首先可以看看Nmap的典型用法。
2.1 用法引入
2.1.1 確定端口狀況
如果直接針對(duì)某臺(tái)計(jì)算的IP地址或域名進(jìn)行掃描,那么Nmap對(duì)該主機(jī)進(jìn)行主機(jī)發(fā)現(xiàn)過程和端口掃描。該方式執(zhí)行迅速,可以用于確定端口的開放狀況。
命令形式:
nmap targethost
可以確定目標(biāo)主機(jī)在線情況及端口基本狀況。
例如,掃描局域網(wǎng)內(nèi)陸址為192.168.1.100的電腦。顯而易見,掃描出的信息非常豐富,在對(duì)192.168.1.100的掃描報(bào)告部分中(以紅框圈出),可以看到主機(jī)發(fā)現(xiàn)的結(jié)果“Host is up”;端口掃描出的結(jié)果,有996個(gè)關(guān)閉端口,4個(gè)開放端口(在未指定掃描端口時(shí),Nmap默認(rèn)掃描1000個(gè)最有可能開放的端口);而版本偵測(cè)針對(duì)掃描到的開放狀況進(jìn)一步探測(cè)端口上運(yùn)行的具體的應(yīng)用程序和版本信息;OS偵測(cè)對(duì)該目標(biāo)主機(jī)的設(shè)備類型與操作系統(tǒng)進(jìn)行探測(cè);而綠色框圖是nmap調(diào)用NSE腳本進(jìn)行進(jìn)一步的信息挖掘的顯示結(jié)果。
2.2 主機(jī)發(fā)現(xiàn)
主機(jī)發(fā)現(xiàn)(Host Discovery),即用于發(fā)現(xiàn)目標(biāo)主機(jī)是否在線(Alive,處于開啟狀態(tài))。
2.2.1 主機(jī)發(fā)現(xiàn)原理
主機(jī)發(fā)現(xiàn)發(fā)現(xiàn)的原理與Ping命令類似,發(fā)送探測(cè)包到目標(biāo)主機(jī),如果收到回復(fù),那么說明目標(biāo)主機(jī)是開啟的。Nmap支持十多種不同的主機(jī)探測(cè)方式,比如發(fā)送ICMP ECHO/TIMESTAMP/NETMASK報(bào)文、發(fā)送TCPSYN/ACK包、發(fā)送SCTP INIT/COOKIE-ECHO包,用戶可以在不同的條件下靈活選用不同的方式來探測(cè)目標(biāo)機(jī)。
主機(jī)發(fā)現(xiàn)基本原理:(以ICMP echo方式為例)
Nmap的用戶位于源端,IP地址192.168.0.5,向目標(biāo)主機(jī)192.168.0.3發(fā)送ICMP Echo Request。如果該請(qǐng)求報(bào)文沒有被防火墻攔截掉,那么目標(biāo)機(jī)會(huì)回復(fù)ICMP Echo Reply包回來。以此來確定目標(biāo)主機(jī)是否在線。
默認(rèn)情況下,Nmap會(huì)發(fā)送四種不同類型的數(shù)據(jù)包來探測(cè)目標(biāo)主機(jī)是否在線。
1. ICMP echo request
2. a TCP SYN packet to port 443
3. a TCP ACK packet to port 80
4. an ICMP timestamp request
依次發(fā)送四個(gè)報(bào)文探測(cè)目標(biāo)機(jī)是否開啟。只要收到其中一個(gè)包的回復(fù),那就證明目標(biāo)機(jī)開啟。使用四種不同類型的數(shù)據(jù)包可以避免因防火墻或丟包造成的判斷錯(cuò)誤。
2.2.2 主機(jī)發(fā)現(xiàn)的用法
通常主機(jī)發(fā)現(xiàn)并不單獨(dú)使用,而只是作為端口掃描、版本偵測(cè)、OS偵測(cè)先行步驟。而在某些特殊應(yīng)用(例如確定大型局域網(wǎng)內(nèi)活動(dòng)主機(jī)的數(shù)量),可能會(huì)單獨(dú)專門適用主機(jī)發(fā)現(xiàn)功能來完成。
不管是作為輔助用法還是專門用途,用戶都可以使用Nmap提供的豐富的選項(xiàng)來定制主機(jī)發(fā)現(xiàn)的探測(cè)方式。
-sL: List Scan 列表掃描,僅將指定的目標(biāo)的IP列舉出來,不進(jìn)行主機(jī)發(fā)現(xiàn)。
-sn: Ping Scan 只進(jìn)行主機(jī)發(fā)現(xiàn),不進(jìn)行端口掃描。
-Pn: 將所有指定的主機(jī)視作開啟的,跳過主機(jī)發(fā)現(xiàn)的過程。
-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進(jìn)行發(fā)現(xiàn)。
-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請(qǐng)求包發(fā)現(xiàn)主機(jī)。-PO[protocollist]: 使用IP協(xié)議包探測(cè)對(duì)方主機(jī)是否開啟。
-n/-R: -n表示不進(jìn)行DNS解析;-R表示總是進(jìn)行DNS解析。
--dns-servers <serv1[,serv2],...>: 指定DNS服務(wù)器。
--system-dns: 指定使用系統(tǒng)的DNS服務(wù)器
--traceroute: 追蹤每個(gè)路由節(jié)點(diǎn)
其中,比較常用的使用的是-sn,表示只單獨(dú)進(jìn)行主機(jī)發(fā)現(xiàn)過程;-Pn表示直接跳過主機(jī)發(fā)現(xiàn)而進(jìn)行端口掃描等高級(jí)操作(如果已經(jīng)確知目標(biāo)主機(jī)已經(jīng)開啟,可用該選項(xiàng));-n,如果不想使用DNS或reverse DNS解析,那么可以使用該選項(xiàng)。
2.2.3 使用演示
探測(cè)scanme.nmap.org
下面以探測(cè)scanme.nmap.org 的主機(jī)為例,簡單演示主機(jī)發(fā)現(xiàn)的用法。
命令如下:
nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org
使用Wireshark抓包,我們看到,scanme.nmap.org 的IP地址182.140.147.57發(fā)送了四個(gè)探測(cè)包:ICMPEcho,80和135端口的TCP SYN包,53端口的UDP包(DNS domain)。而收到ICMP Echo的回復(fù)與80端口的回復(fù)。從而確定了scanme.nmap.org主機(jī)正常在線。
探測(cè)局域網(wǎng)內(nèi)活動(dòng)主機(jī)
掃描局域網(wǎng)192.168.1.100-192.168.1.120范圍內(nèi)哪些IP的主機(jī)是活動(dòng)的。
命令如下:
nmap –sn 192.168.1.100-120
從結(jié)果中,可以看到這個(gè)IP范圍內(nèi)有三臺(tái)主機(jī)處于活動(dòng)狀態(tài)。
從Wireshark抓取的包中,可以看到發(fā)送的探測(cè)包的情況:
在局域網(wǎng)內(nèi),Nmap是通過ARP包來詢問IP地址上的主機(jī)是否活動(dòng)的,如果收到ARP回復(fù)包,那么說明主機(jī)在線。
例如,某條ARP回復(fù)的報(bào)文詳細(xì)信息如下:
TCP SYN探測(cè)到端口開放:
TCP connect方式使用系統(tǒng)網(wǎng)絡(luò)API connect向目標(biāo)主機(jī)的端口發(fā)起連接,如果無法連接,說明該端口關(guān)閉。該方式掃描速度比較慢,而且由于建立完整的TCP連接會(huì)在目標(biāo)機(jī)上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無法使用才考慮選擇的方式。
TCP connect探測(cè)到端口關(guān)閉:
TCP connect探測(cè)到端口開放:
向目標(biāo)主機(jī)的端口發(fā)送ACK包,如果收到RST包,說明該端口沒有被防火墻屏蔽;沒有收到RST包,說明被屏蔽。該方式只能用于確定防火墻是否屏蔽某個(gè)端口,可以輔助TCP SYN的方式來判斷目標(biāo)主機(jī)防火墻的狀況。
TCP ACK探測(cè)到端口被屏蔽:
TCP ACK探測(cè)到端口未被屏蔽:
這三種掃描方式被稱為秘密掃描(Stealthy Scan),因?yàn)橄鄬?duì)比較隱蔽。FIN掃描向目標(biāo)主機(jī)的端口發(fā)送的TCP FIN包或Xmas tree包/Null包,如果收到對(duì)方RST回復(fù)包,那么說明該端口是關(guān)閉的;沒有收到RST包說明端口可能是開放的或被屏蔽的(open|filtered)。
其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有flags都為0的TCP包。
TCP FIN探測(cè)到主機(jī)端口是關(guān)閉的:
TCP FIN探測(cè)到主機(jī)端口是開放或屏蔽的:
UDP掃描方式用于判斷UDP端口的情況。向目標(biāo)主機(jī)的UDP端口發(fā)送探測(cè)包,如果收到回復(fù)“ICMP port unreachable”就說明該端口是關(guān)閉的;如果沒有收到回復(fù),那說明UDP端口可能是開放的或屏蔽的。因此,通過反向排除法的方式來斷定哪些UDP端口是可能出于開放狀態(tài)。
UDP端口關(guān)閉:
UDP端口開放或被屏蔽:
2.3.1.6 其他方式
除上述幾種常用的方式之外,Nmap還支持多種其他探測(cè)方式。例如使用SCTP INIT/COOKIE-ECHO方式來探測(cè)SCTP的端口開放情況;使用IP protocol方式來探測(cè)目標(biāo)主機(jī)支持的協(xié)議類型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式借助僵尸主機(jī)(zombie host,也被稱為idle host,該主機(jī)處于空閑狀態(tài)并且它的IPID方式為遞增。詳細(xì)實(shí)現(xiàn)原理參見:http://nmap.org/book/idlescan.html)來掃描目標(biāo)在主機(jī),達(dá)到隱蔽自己的目的;或者使用FTP bounce scan,借助FTP允許的代理服務(wù)掃描其他的主機(jī),同樣達(dá)到隱藏自己的身份的目的。
2.3.2 端口掃描用法
端口掃描用法比較簡單,Nmap提供豐富的命令行參數(shù)來指定掃描方式和掃描端口。
具體可以參見如下描述。
2.3.2.1 掃描方式選項(xiàng)
-sS/sT/sA/sW/sM:指定使用 TCP SYN/Connect()/ACK/Window/Maimon scans的方式來對(duì)目標(biāo)主機(jī)進(jìn)行掃描。
-sU: 指定使用UDP掃描方式確定目標(biāo)主機(jī)的UDP端口狀況。
-sN/sF/sX: 指定使用TCP Null, FIN, and Xmas scans秘密掃描方式來協(xié)助探測(cè)對(duì)方的TCP端口狀態(tài)。
--scanflags <flags>: 定制TCP包的flags。
-sI <zombiehost[:probeport]>: 指定使用idle scan方式來掃描目標(biāo)主機(jī)(前提需要找到合適的zombie host)
-sY/sZ: 使用SCTP INIT/COOKIE-ECHO來掃描SCTP協(xié)議端口的開放的情況。
-sO: 使用IP protocol 掃描確定目標(biāo)機(jī)支持的協(xié)議類型。
-b <FTP relay host>: 使用FTP bounce scan掃描方式
2.3.2.2 端口參數(shù)與掃描順序
-p <port ranges>: 掃描指定的端口
實(shí)例: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9(其中T代表TCP協(xié)議、U代表UDP協(xié)議、S代表SCTP協(xié)議)
-F: Fast mode – 快速模式,僅掃描TOP 100的端口
-r: 不進(jìn)行端口隨機(jī)打亂的操作(如無該參數(shù),nmap會(huì)將要掃描的端口以隨機(jī)順序方式掃描,以讓nmap的掃描不易被對(duì)方防火墻檢測(cè)到)。
--top-ports <number>:掃描開放概率最高的number個(gè)端口(nmap的作者曾經(jīng)做過大規(guī)模地互聯(lián)網(wǎng)掃描,以此統(tǒng)計(jì)出網(wǎng)絡(luò)上各種端口可能開放的概率。以此排列出最有可能開放端口的列表,具體可以參見文件:nmap-services。默認(rèn)情況下,nmap會(huì)掃描最有可能的1000個(gè)TCP端口)
--port-ratio <ratio>: 掃描指定頻率以上的端口。與上述--top-ports類似,這里以概率作為參數(shù),讓概率大于--port-ratio的端口才被掃描。顯然參數(shù)必須在在0到1之間,具體范圍概率情況可以查看nmap-services文件。
2.3.3 端口掃描演示
這里,我們以掃描局域網(wǎng)內(nèi)192.168.1.100主機(jī)為例。
命令如下:
nmap –sS –sU –T4 –top-ports 300 192.168.1.100
參數(shù)-sS表示使用TCP SYN方式掃描TCP端口;-sU表示掃描UDP端口;-T4表示時(shí)間級(jí)別配置4級(jí);--top-ports 300表示掃描最有可能開放的300個(gè)端口(TCP和UDP分別有300個(gè)端口)。
從上圖中,我們看到掃描結(jié)果,橫線處寫明有共有589端口是關(guān)閉的;紅色框圖中列舉出開放的端口和可能是開放的端口。
2.4 版本偵測(cè)
版本偵測(cè),用于確定目標(biāo)主機(jī)開放端口上運(yùn)行的具體的應(yīng)用程序及版本信息。
Nmap提供的版本偵測(cè)具有如下的優(yōu)點(diǎn):
高速。并行地進(jìn)行套接字操作,實(shí)現(xiàn)一組高效的探測(cè)匹配定義語法。
盡可能地確定應(yīng)用名字與版本名字。
支持TCP/UDP協(xié)議,支持文本格式與二進(jìn)制格式。
支持多種平臺(tái)服務(wù)的偵測(cè),包括Linux/Windows/Mac OS/FreeBSD等系統(tǒng)。
如果檢測(cè)到SSL,會(huì)調(diào)用openSSL繼續(xù)偵測(cè)運(yùn)行在SSL上的具體協(xié)議(如HTTPS/POP3S/IMAPS)。
如果檢測(cè)到SunRPC服務(wù),那么會(huì)調(diào)用brute-force RPC grinder進(jìn)一步確定RPC程序編號(hào)、名字、版本號(hào)。
支持完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
通用平臺(tái)枚舉功能(CPE)
廣泛的應(yīng)用程序數(shù)據(jù)庫(nmap-services-probes)。目前Nmap可以識(shí)別幾千種服務(wù)的簽名,包含了180多種不同的協(xié)議。
2.4.1 版本偵測(cè)原理
簡要的介紹版本的偵測(cè)原理。
版本偵測(cè)主要分為以下幾個(gè)步驟:
首先檢查open與open|filtered狀態(tài)的端口是否在排除端口列表內(nèi)。如果在排除列表,將該端口剔除。
如果是TCP端口,嘗試建立TCP連接。嘗試等待片刻(通常6秒或更多,具體時(shí)間可以查詢文件nmap-services-probes中Probe TCP NULL q||對(duì)應(yīng)的totalwaitms)。通常在等待時(shí)間內(nèi),會(huì)接收到目標(biāo)機(jī)發(fā)送的“WelcomeBanner”信息。nmap將接收到的Banner與nmap-services-probes中NULL probe中的簽名進(jìn)行對(duì)比。查找對(duì)應(yīng)應(yīng)用程序的名字與版本信息。
如果通過“Welcome Banner”無法確定應(yīng)用程序版本,那么nmap再嘗試發(fā)送其他的探測(cè)包(即從nmap-services-probes中挑選合適的probe),將probe得到回復(fù)包與數(shù)據(jù)庫中的簽名進(jìn)行對(duì)比。如果反復(fù)探測(cè)都無法得出具體應(yīng)用,那么打印出應(yīng)用返回報(bào)文,讓用戶自行進(jìn)一步判定。
如果是UDP端口,那么直接使用nmap-services-probes中探測(cè)包進(jìn)行探測(cè)匹配。根據(jù)結(jié)果對(duì)比分析出UDP應(yīng)用服務(wù)類型。
如果探測(cè)到應(yīng)用程序是SSL,那么調(diào)用openSSL進(jìn)一步的偵查運(yùn)行在SSL之上的具體的應(yīng)用類型。
如果探測(cè)到應(yīng)用程序是SunRPC,那么調(diào)用brute-force RPC grinder進(jìn)一步探測(cè)具體服務(wù)。
2.4.2 版本偵測(cè)的用法
版本偵測(cè)方面的命令行選項(xiàng)比較簡單。
-sV: 指定讓Nmap進(jìn)行版本偵測(cè)
--version-intensity <level>: 指定版本偵測(cè)強(qiáng)度(0-9),默認(rèn)為7。數(shù)值越高,探測(cè)出的服務(wù)越準(zhǔn)確,但是運(yùn)行時(shí)間會(huì)比較長。
--version-light: 指定使用輕量偵測(cè)方式 (intensity 2)
--version-all: 嘗試使用所有的probes進(jìn)行偵測(cè) (intensity 9)
--version-trace: 顯示出詳細(xì)的版本偵測(cè)過程信息。
2.4.3 版本偵測(cè)演示
命令:
nmap –sV 192.168.1.100
對(duì)主機(jī)192.168.1.100進(jìn)行版本偵測(cè)。
從結(jié)果中,我們可以看到996個(gè)端口是關(guān)閉狀態(tài),對(duì)于4個(gè)open的端口進(jìn)行版本偵測(cè)。圖中紅色為版本信息。紅色線條劃出部分是版本偵測(cè)得到的附加信息,因?yàn)閺膽?yīng)用中檢測(cè)到微軟特定的應(yīng)用服務(wù),所以推斷出對(duì)方運(yùn)行的Windows的操作系統(tǒng)。
2.5 OS偵測(cè)
操作系統(tǒng)偵測(cè)用于檢測(cè)目標(biāo)主機(jī)運(yùn)行的操作系統(tǒng)類型及設(shè)備類型等信息。
Nmap擁有豐富的系統(tǒng)數(shù)據(jù)庫nmap-os-db,目前可以識(shí)別2600多種操作系統(tǒng)與設(shè)備類型。
2.5.1 OS偵測(cè)原理
Nmap使用TCP/IP協(xié)議棧指紋來識(shí)別不同的操作系統(tǒng)和設(shè)備。在RFC規(guī)范中,有些地方對(duì)TCP/IP的實(shí)現(xiàn)并沒有強(qiáng)制規(guī)定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據(jù)這些細(xì)節(jié)上的差異來判斷操作系統(tǒng)的類型的。
具體實(shí)現(xiàn)方式如下:
Nmap內(nèi)部包含了2600多已知系統(tǒng)的指紋特征(在文件nmap-os-db文件中)。將此指紋數(shù)據(jù)庫作為進(jìn)行指紋對(duì)比的樣本庫。
分別挑選一個(gè)open和closed的端口,向其發(fā)送經(jīng)過精心設(shè)計(jì)的TCP/UDP/ICMP數(shù)據(jù)包,根據(jù)返回的數(shù)據(jù)包生成一份系統(tǒng)指紋。
將探測(cè)生成的指紋與nmap-os-db中指紋進(jìn)行對(duì)比,查找匹配的系統(tǒng)。如果無法匹配,以概率形式列舉出可能的系統(tǒng)。
2.5.2 OS偵測(cè)用法
OS偵測(cè)的用法簡單,Nmap提供的命令比較少。
-O: 指定Nmap進(jìn)行OS偵測(cè)。
--osscan-limit: 限制Nmap只對(duì)確定的主機(jī)的進(jìn)行OS探測(cè)(至少需確知該主機(jī)分別有一個(gè)open和closed的端口)。
--osscan-guess: 大膽猜測(cè)對(duì)方的主機(jī)的系統(tǒng)類型。由此準(zhǔn)確性會(huì)下降不少,但會(huì)盡可能多為用戶提供潛在的操作系統(tǒng)。
2.5.3 OS偵測(cè)演示
命令:
nmap –O 192.168.1.100
從上圖中可看到,指定-O選項(xiàng)后先進(jìn)行主機(jī)發(fā)現(xiàn)與端口掃描,根據(jù)掃描到端口來進(jìn)行進(jìn)一步的OS偵測(cè)。獲取的結(jié)果信息有設(shè)備類型,操作系統(tǒng)類型,操作系統(tǒng)的CPE描述,操作系統(tǒng)細(xì)節(jié),網(wǎng)絡(luò)距離等。
3 Nmap高級(jí)用法
3.1 防火墻/IDS規(guī)避
防火墻與IDS規(guī)避為用于繞開防火墻與IDS(入侵檢測(cè)系統(tǒng))的檢測(cè)與屏蔽,以便能夠更加詳細(xì)地發(fā)現(xiàn)目標(biāo)主機(jī)的狀況。
Nmap提供了多種規(guī)避技巧,通常可以從兩個(gè)方面考慮規(guī)避方式:數(shù)據(jù)包的變換(Packet Change)與時(shí)序變換(Timing Change)。
3.1.1 規(guī)避原理
3.1.1.1 分片(Fragmentation)
將可疑的探測(cè)包進(jìn)行分片處理(例如將TCP包拆分成多個(gè)IP包發(fā)送過去),某些簡單的防火墻為了加快處理速度可能不會(huì)進(jìn)行重組檢查,以此避開其檢查。
3.1.1.2 IP誘騙(IP decoys)
在進(jìn)行掃描時(shí),將真實(shí)IP地址和其他主機(jī)的IP地址(其他主機(jī)需要在線,否則目標(biāo)主機(jī)將回復(fù)大量數(shù)據(jù)包到不存在的主機(jī),從而實(shí)質(zhì)構(gòu)成了拒絕服務(wù)攻擊)混合使用,以此讓目標(biāo)主機(jī)的防火墻或IDS追蹤檢查大量的不同IP地址的數(shù)據(jù)包,降低其追查到自身的概率。注意,某些高級(jí)的IDS系統(tǒng)通過統(tǒng)計(jì)分析仍然可以追蹤出掃描者真實(shí)IP地址。
3.1.1.3 IP偽裝(IP Spoofing)
顧名思義,IP偽裝即將自己發(fā)送的數(shù)據(jù)包中的IP地址偽裝成其他主機(jī)的地址,從而目標(biāo)機(jī)認(rèn)為是其他主機(jī)在與之通信。需要注意,如果希望接收到目標(biāo)主機(jī)的回復(fù)包,那么偽裝的IP需要位于統(tǒng)一局域網(wǎng)內(nèi)。另外,如果既希望隱蔽自己的IP地址,又希望收到目標(biāo)主機(jī)的回復(fù)包,那么可以嘗試使用idle scan或匿名代理(如TOR)等網(wǎng)絡(luò)技術(shù)。
3.1.1.4 指定源端口
某些目標(biāo)主機(jī)只允許來自特定端口的數(shù)據(jù)包通過防火墻。例如FTP服務(wù)器配置為:允許源端口為21號(hào)的TCP包通過防火墻與FTP服務(wù)端通信,但是源端口為其他端口的數(shù)據(jù)包被屏蔽。所以,在此類情況下,可以指定Nmap將發(fā)送的數(shù)據(jù)包的源端口都設(shè)置特定的端口。
3.1.1.5 掃描延時(shí)
某些防火墻針對(duì)發(fā)送過于頻繁的數(shù)據(jù)包會(huì)進(jìn)行嚴(yán)格的偵查,而且某些系統(tǒng)限制錯(cuò)誤報(bào)文產(chǎn)生的頻率(例如,Solaris 系統(tǒng)通常會(huì)限制每秒鐘只能產(chǎn)生一個(gè)ICMP消息回復(fù)給UDP掃描),所以,定制該情況下發(fā)包的頻率和發(fā)包延時(shí)可以降低目標(biāo)主機(jī)的審查強(qiáng)度、節(jié)省網(wǎng)絡(luò)帶寬。
3.1.1.6 其他技術(shù)
Nmap還提供多種規(guī)避技巧,比如指定使用某個(gè)網(wǎng)絡(luò)接口來發(fā)送數(shù)據(jù)包、指定發(fā)送包的最小長度、指定發(fā)包的MTU、指定TTL、指定偽裝的MAC地址、使用錯(cuò)誤檢查和(badchecksum)。
更多信息http://nmap.org/book/man-bypass-firewalls-ids.html
3.1.2 規(guī)避用法
-f; --mtu <val>: 指定使用分片、指定數(shù)據(jù)包的MTU.
-D <decoy1,decoy2[,ME],...>: 用一組IP地址掩蓋真實(shí)地址,其中ME填入自己的IP地址。
-S <IP_Address>: 偽裝成其他IP地址
-e <iface>: 使用特定的網(wǎng)絡(luò)接口
-g/--source-port <portnum>: 使用指定源端口
--data-length <num>: 填充隨機(jī)數(shù)據(jù)讓數(shù)據(jù)包長度達(dá)到Num。
--ip-options <options>: 使用指定的IP選項(xiàng)來發(fā)送數(shù)據(jù)包。
--ttl <val>: 設(shè)置time-to-live時(shí)間。
--spoof-mac <mac address/prefix/vendor name>: 偽裝MAC地址
--badsum: 使用錯(cuò)誤的checksum來發(fā)送數(shù)據(jù)包(正常情況下,該類數(shù)據(jù)包被拋棄,如果收到回復(fù),說明回復(fù)來自防火墻或IDS/IPS)。
3.1.3 規(guī)避演示
使用命令:
nmap -v -F -Pn -D192.168.1.100,192.168.1.102,ME -e eth0 -g 3355 192.168.1.1
其中,-F表示快速掃描100個(gè)端口;-Pn表示不進(jìn)行Ping掃描;-D表示使用IP誘騙方式掩蓋自己真實(shí)IP(其中ME表示自己IP);-e eth0表示使用eth0網(wǎng)卡發(fā)送該數(shù)據(jù)包;-g 3355表示自己的源端口使用3355;192.168.1.1是被掃描的目標(biāo)IP地址。
我們可以從Wireshark中看到數(shù)據(jù)包的流動(dòng)情況:對(duì)于每個(gè)探測(cè)包,Nmap都使用-D選項(xiàng)指定的IP地址發(fā)送不同的數(shù)據(jù)包,從而達(dá)到擾亂對(duì)方防火墻/IDS檢查的目的(更好的方式-D選項(xiàng)中嵌入RND隨機(jī)數(shù),這樣更具有迷惑性)。當(dāng)探測(cè)到80端口時(shí)候,目標(biāo)主機(jī)向我們回復(fù)了SYN/ACK包回來(當(dāng)然也向其他誘騙的IP回復(fù)SYN/ACK包,我們無法接收到),證明80端口是開放的。
NSE的使用Lua腳本,并且配置固定格式,以減輕用戶編程負(fù)擔(dān)。通常的一個(gè)腳本分為幾個(gè)部分:
description字段:描述腳本功能的字符串,使用雙層方括號(hào)表示。
comment字段:以--開頭的行,描述腳本輸出格式
author字段:描述腳本作者
license字段:描述腳本使用許可證,通常配置為Nmap相同的license
categories字段:描述腳本所屬的類別,以對(duì)腳本的調(diào)用進(jìn)行管理。
rule字段:描述腳本執(zhí)行的規(guī)則,也就是確定觸發(fā)腳本執(zhí)行的條件。在Nmap中有四種類型的規(guī)則,prerule用于在Nmap沒有執(zhí)行掃描之前觸發(fā)腳本執(zhí)行,這類腳本并不需用到任何Nmap掃描的結(jié)果;hostrule用在Nmap執(zhí)行完畢主機(jī)發(fā)現(xiàn)后觸發(fā)的腳本,根據(jù)主機(jī)發(fā)現(xiàn)的結(jié)果來觸發(fā)該類腳本;portrule用于Nmap執(zhí)行端口掃描或版本偵測(cè)時(shí)觸發(fā)的腳本,例如檢測(cè)到某個(gè)端口時(shí)觸發(fā)某個(gè)腳本執(zhí)行以完成更詳細(xì)的偵查。postrule用于Nmap執(zhí)行完畢所有的掃描后,通常用于掃描結(jié)果的數(shù)據(jù)提取和整理。在上述實(shí)例中,只有一個(gè)portrule,說明該腳本在執(zhí)行端口掃描后,若檢測(cè)到TCP 13號(hào)端口開放,那么觸發(fā)該腳本的執(zhí)行。
action字段:腳本執(zhí)行的具體內(nèi)容。當(dāng)腳本通過rule字段的檢查被觸發(fā)執(zhí)行時(shí),就會(huì)調(diào)用action字段定義的函數(shù)。
3.2.2 NSE腳本用法
Nmap提供不少腳本使用的命令行參數(shù)。
-sC: 等價(jià)于 --script=default,使用默認(rèn)類別的腳本進(jìn)行掃描。
--script=<Lua scripts>: <Lua scripts>使用某個(gè)或某類腳本進(jìn)行掃描,支持通配符描述
--script-args=<n1=v1,[n2=v2,...]>: 為腳本提供默認(rèn)參數(shù)
--script-args-file=filename: 使用文件來為腳本提供參數(shù)
--script-trace: 顯示腳本執(zhí)行過程中發(fā)送與接收的數(shù)據(jù)
--script-updatedb: 更新腳本數(shù)據(jù)庫
--script-help=<Lua scripts>: 顯示腳本的幫助信息,其中<Luascripts>部分可以逗號(hào)分隔的文件或腳本類別。
3.2.3 NSE用法演示
配合腳本掃描192.168.1.1,查看能否獲得有用的信息。
命令如下:
nmap –sV –p 80 –v –script default,http*192.168.1.1
從上圖中,我們可以看到Nmap掃描到對(duì)方80端口是開放的,然后使用了大量的名字為http開頭的腳本對(duì)其進(jìn)行掃描。掃描過程發(fā)現(xiàn)在http-auth腳本執(zhí)行,出現(xiàn)了“Basic relm=TP-LINK Wireless N router WR740”字樣(紅線劃出部分),這里已經(jīng)挖掘?qū)Ψ降脑O(shè)備類型與具體版本信息。如果我們知道更多關(guān)于WR740已知的漏洞,那么就可以進(jìn)行更進(jìn)一步的滲透測(cè)試了。
4 參考資料
4.1 書籍
Nmap Network Scanning
Nmap創(chuàng)始人Fyodor編寫的Nmap的權(quán)威指南,非常詳盡地描述Nmap的實(shí)現(xiàn)原理及使用方法。Nmap官方文檔正是來自該書部分章節(jié)。
Secrets of Network Cartography
該書對(duì)Nmap的實(shí)現(xiàn)原理及使用場(chǎng)景有比較豐富的介紹。
Nmap in the Enterprise: Your Guide to Network Scanning
這本書描述Nmap在企業(yè)領(lǐng)域的運(yùn)用。
Nmap mindmap.pdf
這nmap使用方法的思維導(dǎo)圖(一頁紙的圖片),對(duì)Nmap用法整理很完整。
4.2 網(wǎng)站
官網(wǎng):www.nmap.org
安全工具排名:http://sectools.org/
聯(lián)系客服