nmap 掃描原理與用法

Nmap掃描原理與用法

1?????Nmap介紹

Nmap掃描原理與用法PDF:下載地址

Nmap是一款開(kāi)源免費(fèi)的網(wǎng)絡(luò)發(fā)現(xiàn)(Network Discovery)和安全審計(jì)(Security Auditing)工具。軟件名字Nmap是Network Mapper的簡(jiǎn)稱(chēng)。Nmap最初是由Fyodor在1997年開(kāi)始創(chuàng)建的。隨后在開(kāi)源社區(qū)眾多的志愿者參與下,該工具逐漸成為最為流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日發(fā)布,詳情請(qǐng)參見(jiàn):www.nmap.org。

一般情況下,Nmap用于列舉網(wǎng)絡(luò)主機(jī)清單、管理服務(wù)升級(jí)調(diào)度、監(jiān)控主機(jī)或服務(wù)運(yùn)行狀況。Nmap可以檢測(cè)目標(biāo)機(jī)是否在線、端口開(kāi)放情況、偵測(cè)運(yùn)行的服務(wù)類(lèi)型及版本信息、偵測(cè)操作系統(tǒng)與設(shè)備類(lèi)型等信息。

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等等;源碼開(kāi)放,方便移植。

4.簡(jiǎn)單。提供默認(rèn)的操作能覆蓋大部分功能,基本端口掃描nmap targetip,全面的掃描nmap –A targetip。

5.自由。Nmap作為開(kāi)源軟件,在GPL License的范圍內(nèi)可以自由的使用。

6.文檔豐富。Nmap官網(wǎng)提供了詳細(xì)的文檔描述。Nmap作者及其他安全專(zhuān)家編寫(xiě)了多部Nmap參考書(shū)籍。

7.社區(qū)支持。Nmap背后有強(qiáng)大的社區(qū)團(tuán)隊(duì)支持。

8.贊譽(yù)有加。獲得很多的獎(jiǎng)勵(lì),并在很多影視作品中出現(xiàn)(如黑客帝國(guó)2、Die Hard4等)。

9.流行。目前Nmap已經(jīng)被成千上萬(wàn)的安全專(zhuān)家列為必備的工具之一。

1.1????Zenmap

Zenmap是Nmap官方提供的圖形界面,通常隨Nmap的安裝包發(fā)布。Zenmap是用Python語(yǔ)言編寫(xiě)而成的開(kāi)源免費(fèi)的圖形界面,能夠運(yùn)行在不同操作系統(tǒng)平臺(tái)上(Windows/linux/Unix/Mac OS等)。Zenmap旨在為nmap提供更加簡(jiǎn)單的操作方式。簡(jiǎn)單常用的操作命令可以保存成為profile,用戶掃描時(shí)選擇profile即可;可以方便地比較不同的掃描結(jié)果;提供網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)(NetworkTopology)的圖形顯示功能。

其中Profile欄位,用于選擇“Zenmap默認(rèn)提供的Profile”或“用戶創(chuàng)建的Profile”;Command欄位,用于顯示選擇Profile對(duì)應(yīng)的命令或者用戶自行指定的命令;Topology選項(xiàng)卡,用于顯示掃描到的目標(biāo)機(jī)與本機(jī)之間的拓?fù)浣Y(jié)構(gòu)。

1.2????功能架構(gòu)圖

Nmap包含四項(xiàng)基本功能:

主機(jī)發(fā)現(xiàn)(Host Discovery)

端口掃描(Port Scanning)

版本偵測(cè)(Version Detection)

操作系統(tǒng)偵測(cè)(Operating System Detection)

而這四項(xiàng)功能之間,又存在大致的依賴(lài)關(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)過(guò)程和端口掃描。該方式執(zhí)行迅速,可以用于確定端口的開(kāi)放狀況。

命令形式:

nmap targethost

可以確定目標(biāo)主機(jī)在線情況及端口基本狀況。

2.1.2????完整全面的掃描

如果希望對(duì)某臺(tái)主機(jī)進(jìn)行完整全面的掃描,那么可以使用nmap內(nèi)置的-A選項(xiàng)。使用了改選項(xiàng),nmap對(duì)目標(biāo)主機(jī)進(jìn)行主機(jī)發(fā)現(xiàn)、端口掃描、應(yīng)用程序與版本偵測(cè)、操作系統(tǒng)偵測(cè)及調(diào)用默認(rèn)NSE腳本掃描。

命令形式:

nmap –T4 –A –v targethost

其中-A選項(xiàng)用于使用進(jìn)攻性(Aggressive)方式掃描;-T4指定掃描過(guò)程使用的時(shí)序(Timing),總有6個(gè)級(jí)別(0-5),級(jí)別越高,掃描速度越快,但也容易被防火墻或IDS檢測(cè)并屏蔽掉,在網(wǎng)絡(luò)通訊狀況良好的情況推薦使用T4;-v表示顯示冗余(verbosity)信息,在掃描過(guò)程中顯示掃描的細(xì)節(jié),從而讓用戶了解當(dāng)前的掃描狀態(tài)。

例如,掃描局域網(wǎng)內(nèi)地址為192.168.1.100的電腦。顯而易見(jiàn),掃描出的信息非常豐富,在對(duì)192.168.1.100的掃描報(bào)告部分中(以紅框圈出),可以看到主機(jī)發(fā)現(xiàn)的結(jié)果“Host is up”;端口掃描出的結(jié)果,有996個(gè)關(guān)閉端口,4個(gè)開(kāi)放端口(在未指定掃描端口時(shí),Nmap默認(rèn)掃描1000個(gè)最有可能開(kāi)放的端口);而版本偵測(cè)針對(duì)掃描到的開(kāi)放狀況進(jìn)一步探測(cè)端口上運(yùn)行的具體的應(yīng)用程序和版本信息;OS偵測(cè)對(duì)該目標(biāo)主機(jī)的設(shè)備類(lèi)型與操作系統(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,處于開(kāi)啟狀態(tài))。

2.2.1????主機(jī)發(fā)現(xiàn)原理

主機(jī)發(fā)現(xiàn)發(fā)現(xiàn)的原理與Ping命令類(lèi)似,發(fā)送探測(cè)包到目標(biāo)主機(jī),如果收到回復(fù),那么說(shuō)明目標(biāo)主機(jī)是開(kāi)啟的。Nmap支持十多種不同的主機(jī)探測(cè)方式,比如發(fā)送ICMP ECHO/TIMESTAMP/NETMASK報(bào)文、發(fā)送TCPSYN/ACK包、發(fā)送SCTP INIT/COOKIE-ECHO包,用戶可以在不同的條件下靈活選用不同的方式來(lái)探測(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)文沒(méi)有被防火墻攔截掉,那么目標(biāo)機(jī)會(huì)回復(fù)ICMP Echo Reply包回來(lái)。以此來(lái)確定目標(biāo)主機(jī)是否在線。

默認(rèn)情況下,Nmap會(huì)發(fā)送四種不同類(lèi)型的數(shù)據(jù)包來(lái)探測(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ī)是否開(kāi)啟。只要收到其中一個(gè)包的回復(fù),那就證明目標(biāo)機(jī)開(kāi)啟。使用四種不同類(lèi)型的數(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ú)專(zhuān)門(mén)適用主機(jī)發(fā)現(xiàn)功能來(lái)完成。

不管是作為輔助用法還是專(zhuān)門(mén)用途,用戶都可以使用Nmap提供的豐富的選項(xiàng)來(lái)定制主機(jī)發(fā)現(xiàn)的探測(cè)方式。

[plain]view plaincopy

-sL:?List?Scan?列表掃描,僅將指定的目標(biāo)的IP列舉出來(lái),不進(jìn)行主機(jī)發(fā)現(xiàn)。

-sn:?Ping?Scan?只進(jìn)行主機(jī)發(fā)現(xiàn),不進(jìn)行端口掃描。

-Pn:?將所有指定的主機(jī)視作開(kāi)啟的,跳過(guò)主機(jī)發(fā)現(xiàn)的過(guò)程。

-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ī)是否開(kāi)啟。

-n/-R:?-n表示不進(jìn)行DNS解析;-R表示總是進(jìn)行DNS解析。

--dns-servers?:?指定DNS服務(wù)器。

--system-dns:?指定使用系統(tǒng)的DNS服務(wù)器

--traceroute:?追蹤每個(gè)路由節(jié)點(diǎn)

其中,比較常用的使用的是-sn,表示只單獨(dú)進(jìn)行主機(jī)發(fā)現(xiàn)過(guò)程;-Pn表示直接跳過(guò)主機(jī)發(fā)現(xiàn)而進(jìn)行端口掃描等高級(jí)操作(如果已經(jīng)確知目標(biāo)主機(jī)已經(jīng)開(kāi)啟,可用該選項(xiàng));-n,如果不想使用DNS或reverse DNS解析,那么可以使用該選項(xiàng)。

2.2.3????使用演示

探測(cè)scanme.nmap.org

下面以探測(cè)scanme.nmap.org的主機(jī)為例,簡(jiǎn)單演示主機(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是通過(guò)ARP包來(lái)詢(xún)問(wèn)IP地址上的主機(jī)是否活動(dòng)的,如果收到ARP回復(fù)包,那么說(shuō)明主機(jī)在線。

例如,某條ARP回復(fù)的報(bào)文詳細(xì)信息如下:

2.3????端口掃描

端口掃描是Nmap最基本最核心的功能,用于確定目標(biāo)主機(jī)的TCP/UDP端口的開(kāi)放情況。

默認(rèn)情況下,Nmap會(huì)掃描1000個(gè)最有可能開(kāi)放的TCP端口。

Nmap通過(guò)探測(cè)將端口劃分為6個(gè)狀態(tài):

open:端口是開(kāi)放的。

closed:端口是關(guān)閉的。

filtered:端口被防火墻IDS/IPS屏蔽,無(wú)法確定其狀態(tài)。

unfiltered:端口沒(méi)有被屏蔽,但是否開(kāi)放需要進(jìn)一步確定。

open|filtered:端口是開(kāi)放的或被屏蔽。

closed|filtered :端口是關(guān)閉的或被屏蔽。

2.3.1????端口掃描原理

Nmap在端口掃描方面非常強(qiáng)大,提供了十多種探測(cè)方式。

2.3.1.1????TCP SYN scanning

這是Nmap默認(rèn)的掃描方式,通常被稱(chēng)作半開(kāi)放掃描(Half-open scanning)。該方式發(fā)送SYN到目標(biāo)端口,如果收到SYN/ACK回復(fù),那么判斷端口是開(kāi)放的;如果收到RST包,說(shuō)明該端口是關(guān)閉的。如果沒(méi)有收到回復(fù),那么判斷該端口被屏蔽(Filtered)。因?yàn)樵摲绞絻H發(fā)送SYN包對(duì)目標(biāo)主機(jī)的特定端口,但不建立的完整的TCP連接,所以相對(duì)比較隱蔽,而且效率比較高,適用范圍廣。

TCP SYN探測(cè)到端口關(guān)閉:

TCP SYN探測(cè)到端口開(kāi)放:

2.3.1.2????TCP connect scanning

TCP connect方式使用系統(tǒng)網(wǎng)絡(luò)API connect向目標(biāo)主機(jī)的端口發(fā)起連接,如果無(wú)法連接,說(shuō)明該端口關(guān)閉。該方式掃描速度比較慢,而且由于建立完整的TCP連接會(huì)在目標(biāo)機(jī)上留下記錄信息,不夠隱蔽。所以,TCP connect是TCP SYN無(wú)法使用才考慮選擇的方式。

TCP connect探測(cè)到端口關(guān)閉:

TCP connect探測(cè)到端口開(kāi)放:

2.3.1.3????TCP ACK scanning

向目標(biāo)主機(jī)的端口發(fā)送ACK包,如果收到RST包,說(shuō)明該端口沒(méi)有被防火墻屏蔽;沒(méi)有收到RST包,說(shuō)明被屏蔽。該方式只能用于確定防火墻是否屏蔽某個(gè)端口,可以輔助TCP SYN的方式來(lái)判斷目標(biāo)主機(jī)防火墻的狀況。

TCP ACK探測(cè)到端口被屏蔽:

TCP ACK探測(cè)到端口未被屏蔽:

2.3.1.4????TCP FIN/Xmas/NULL scanning

這三種掃描方式被稱(chēng)為秘密掃描(Stealthy Scan),因?yàn)橄鄬?duì)比較隱蔽。FIN掃描向目標(biāo)主機(jī)的端口發(fā)送的TCP FIN包或Xmas tree包/Null包,如果收到對(duì)方RST回復(fù)包,那么說(shuō)明該端口是關(guān)閉的;沒(méi)有收到RST包說(shuō)明端口可能是開(kāi)放的或被屏蔽的(open|filtered)。

其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有flags都為0的TCP包。

TCP FIN探測(cè)到主機(jī)端口是關(guān)閉的:

TCP FIN探測(cè)到主機(jī)端口是開(kāi)放或屏蔽的:

2.3.1.5????UDP scanning

UDP掃描方式用于判斷UDP端口的情況。向目標(biāo)主機(jī)的UDP端口發(fā)送探測(cè)包,如果收到回復(fù)“ICMP port unreachable”就說(shuō)明該端口是關(guān)閉的;如果沒(méi)有收到回復(fù),那說(shuō)明UDP端口可能是開(kāi)放的或屏蔽的。因此,通過(guò)反向排除法的方式來(lái)斷定哪些UDP端口是可能出于開(kāi)放狀態(tài)。

UDP端口關(guān)閉:

UDP端口開(kāi)放或被屏蔽:

2.3.1.6????其他方式

除上述幾種常用的方式之外,Nmap還支持多種其他探測(cè)方式。例如使用SCTP INIT/COOKIE-ECHO方式來(lái)探測(cè)SCTP的端口開(kāi)放情況;使用IP protocol方式來(lái)探測(cè)目標(biāo)主機(jī)支持的協(xié)議類(lèi)型(TCP/UDP/ICMP/SCTP等等);使用idle scan方式借助僵尸主機(jī)(zombie host,也被稱(chēng)為idle host,該主機(jī)處于空閑狀態(tài)并且它的IPID方式為遞增。詳細(xì)實(shí)現(xiàn)原理參見(jiàn):http://nmap.org/book/idlescan.html)來(lái)掃描目標(biāo)在主機(jī),達(dá)到隱蔽自己的目的;或者使用FTP bounce scan,借助FTP允許的代理服務(wù)掃描其他的主機(jī),同樣達(dá)到隱藏自己的身份的目的。

2.3.2????端口掃描用法

端口掃描用法比較簡(jiǎn)單,Nmap提供豐富的命令行參數(shù)來(lái)指定掃描方式和掃描端口。

具體可以參見(jiàn)如下描述。

2.3.2.1????掃描方式選項(xiàng)

[plain]view plaincopy

-sS/sT/sA/sW/sM:指定使用?TCP?SYN/Connect()/ACK/Window/Maimon?scans的方式來(lái)對(duì)目標(biāo)主機(jī)進(jìn)行掃描。

-sU:?指定使用UDP掃描方式確定目標(biāo)主機(jī)的UDP端口狀況。

-sN/sF/sX:?指定使用TCP?Null,?FIN,?and?Xmas?scans秘密掃描方式來(lái)協(xié)助探測(cè)對(duì)方的TCP端口狀態(tài)。

--scanflags?:?定制TCP包的flags。

-sI?:?指定使用idle?scan方式來(lái)掃描目標(biāo)主機(jī)(前提需要找到合適的zombie?host)

-sY/sZ:?使用SCTP?INIT/COOKIE-ECHO來(lái)掃描SCTP協(xié)議端口的開(kāi)放的情況。

-sO:?使用IP?protocol?掃描確定目標(biāo)機(jī)支持的協(xié)議類(lèi)型。

-b?:?使用FTP?bounce?scan掃描方式

2.3.2.2????端口參數(shù)與掃描順序

[plain]view plaincopy

-p?:?掃描指定的端口

實(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ī)打亂的操作(如無(wú)該參數(shù),nmap會(huì)將要掃描的端口以隨機(jī)順序方式掃描,以讓nmap的掃描不易被對(duì)方防火墻檢測(cè)到)。

--top-ports?:掃描開(kāi)放概率最高的number個(gè)端口(nmap的作者曾經(jīng)做過(guò)大規(guī)模地互聯(lián)網(wǎng)掃描,以此統(tǒng)計(jì)出網(wǎng)絡(luò)上各種端口可能開(kāi)放的概率。以此排列出最有可能開(kāi)放端口的列表,具體可以參見(jiàn)文件:nmap-services。默認(rèn)情況下,nmap會(huì)掃描最有可能的1000個(gè)TCP端口)

--port-ratio?:?掃描指定頻率以上的端口。與上述--top-ports類(lèi)似,這里以概率作為參數(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表示掃描最有可能開(kāi)放的300個(gè)端口(TCP和UDP分別有300個(gè)端口)。

從上圖中,我們看到掃描結(jié)果,橫線處寫(xiě)明有共有589端口是關(guān)閉的;紅色框圖中列舉出開(kāi)放的端口和可能是開(kāi)放的端口。

2.4????版本偵測(cè)

版本偵測(cè),用于確定目標(biāo)主機(jī)開(kāi)放端口上運(yùn)行的具體的應(yīng)用程序及版本信息。

Nmap提供的版本偵測(cè)具有如下的優(yōu)點(diǎn):

高速。并行地進(jìn)行套接字操作,實(shí)現(xiàn)一組高效的探測(cè)匹配定義語(yǔ)法。

盡可能地確定應(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ù)庫(kù)(nmap-services-probes)。目前Nmap可以識(shí)別幾千種服務(wù)的簽名,包含了180多種不同的協(xié)議。

2.4.1????版本偵測(cè)原理

簡(jiǎn)要的介紹版本的偵測(cè)原理。

版本偵測(cè)主要分為以下幾個(gè)步驟:

首先檢查open與open|filtered狀態(tài)的端口是否在排除端口列表內(nèi)。如果在排除列表,將該端口剔除。

如果是TCP端口,嘗試建立TCP連接。嘗試等待片刻(通常6秒或更多,具體時(shí)間可以查詢(xún)文件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)用程序的名字與版本信息。

如果通過(guò)“Welcome Banner”無(wú)法確定應(yīng)用程序版本,那么nmap再?lài)L試發(fā)送其他的探測(cè)包(即從nmap-services-probes中挑選合適的probe),將probe得到回復(fù)包與數(shù)據(jù)庫(kù)中的簽名進(jìn)行對(duì)比。如果反復(fù)探測(cè)都無(wú)法得出具體應(yīng)用,那么打印出應(yīng)用返回報(bào)文,讓用戶自行進(jìn)一步判定。

如果是UDP端口,那么直接使用nmap-services-probes中探測(cè)包進(jìn)行探測(cè)匹配。根據(jù)結(jié)果對(duì)比分析出UDP應(yīng)用服務(wù)類(lèi)型。

如果探測(cè)到應(yīng)用程序是SSL,那么調(diào)用openSSL進(jìn)一步的偵查運(yùn)行在SSL之上的具體的應(yīng)用類(lèi)型。

如果探測(cè)到應(yīng)用程序是SunRPC,那么調(diào)用brute-force RPC grinder進(jìn)一步探測(cè)具體服務(wù)。

2.4.2????版本偵測(cè)的用法

版本偵測(cè)方面的命令行選項(xiàng)比較簡(jiǎn)單。

[plain]view plaincopy

-sV:?指定讓Nmap進(jìn)行版本偵測(cè)

--version-intensity?:?指定版本偵測(cè)強(qiáng)度(0-9),默認(rèn)為7。數(shù)值越高,探測(cè)出的服務(wù)越準(zhǔn)確,但是運(yùn)行時(shí)間會(huì)比較長(zhǎng)。

--version-light:?指定使用輕量偵測(cè)方式?(intensity?2)

--version-all:?嘗試使用所有的probes進(jìn)行偵測(cè)?(intensity?9)

--version-trace:?顯示出詳細(xì)的版本偵測(cè)過(guò)程信息。

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)類(lèi)型及設(shè)備類(lèi)型等信息。

Nmap擁有豐富的系統(tǒng)數(shù)據(jù)庫(kù)nmap-os-db,目前可以識(shí)別2600多種操作系統(tǒng)與設(shè)備類(lèi)型。

2.5.1????OS偵測(cè)原理

Nmap使用TCP/IP協(xié)議棧指紋來(lái)識(shí)別不同的操作系統(tǒng)和設(shè)備。在RFC規(guī)范中,有些地方對(duì)TCP/IP的實(shí)現(xiàn)并沒(méi)有強(qiáng)制規(guī)定,由此不同的TCP/IP方案中可能都有自己的特定方式。Nmap主要是根據(jù)這些細(xì)節(jié)上的差異來(lái)判斷操作系統(tǒng)的類(lèi)型的。

具體實(shí)現(xiàn)方式如下:

Nmap內(nèi)部包含了2600多已知系統(tǒng)的指紋特征(在文件nmap-os-db文件中)。將此指紋數(shù)據(jù)庫(kù)作為進(jìn)行指紋對(duì)比的樣本庫(kù)。

分別挑選一個(gè)open和closed的端口,向其發(fā)送經(jīng)過(guò)精心設(shè)計(jì)的TCP/UDP/ICMP數(shù)據(jù)包,根據(jù)返回的數(shù)據(jù)包生成一份系統(tǒng)指紋。

將探測(cè)生成的指紋與nmap-os-db中指紋進(jìn)行對(duì)比,查找匹配的系統(tǒng)。如果無(wú)法匹配,以概率形式列舉出可能的系統(tǒng)。

2.5.2????OS偵測(cè)用法

OS偵測(cè)的用法簡(jiǎn)單,Nmap提供的命令比較少。

[plain]view plaincopy

-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)類(lèi)型。由此準(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ù)掃描到端口來(lái)進(jìn)行進(jìn)一步的OS偵測(cè)。獲取的結(jié)果信息有設(shè)備類(lèi)型,操作系統(tǒng)類(lèi)型,操作系統(tǒng)的CPE描述,操作系統(tǒng)細(xì)節(jié),網(wǎng)絡(luò)距離等。

3?????Nmap高級(jí)用法

3.1????防火墻/IDS規(guī)避

防火墻與IDS規(guī)避為用于繞開(kāi)防火墻與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ā)送過(guò)去),某些簡(jiǎn)單的防火墻為了加快處理速度可能不會(huì)進(jìn)行重組檢查,以此避開(kāi)其檢查。

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)通過(guò)統(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ī)只允許來(lái)自特定端口的數(shù)據(jù)包通過(guò)防火墻。例如FTP服務(wù)器配置為:允許源端口為21號(hào)的TCP包通過(guò)防火墻與FTP服務(wù)端通信,但是源端口為其他端口的數(shù)據(jù)包被屏蔽。所以,在此類(lèi)情況下,可以指定Nmap將發(fā)送的數(shù)據(jù)包的源端口都設(shè)置特定的端口。

3.1.1.5????掃描延時(shí)

某些防火墻針對(duì)發(fā)送過(guò)于頻繁的數(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ò)接口來(lái)發(fā)送數(shù)據(jù)包、指定發(fā)送包的最小長(zhǎng)度、指定發(fā)包的MTU、指定TTL、指定偽裝的MAC地址、使用錯(cuò)誤檢查和(badchecksum)。

更多信息http://nmap.org/book/man-bypass-firewalls-ids.html

3.1.2????規(guī)避用法

[plain]view plaincopy

-f;?--mtu?:?指定使用分片、指定數(shù)據(jù)包的MTU.

-D?:?用一組IP地址掩蓋真實(shí)地址,其中ME填入自己的IP地址。

-S?:?偽裝成其他IP地址

-e?:?使用特定的網(wǎng)絡(luò)接口

-g/--source-port?:?使用指定源端口

--data-length?:?填充隨機(jī)數(shù)據(jù)讓數(shù)據(jù)包長(zhǎng)度達(dá)到Num。

--ip-options?:?使用指定的IP選項(xiàng)來(lái)發(fā)送數(shù)據(jù)包。

--ttl?:?設(shè)置time-to-live時(shí)間。

--spoof-mac?:?偽裝MAC地址

--badsum:?使用錯(cuò)誤的checksum來(lái)發(fā)送數(shù)據(jù)包(正常情況下,該類(lèi)數(shù)據(jù)包被拋棄,如果收到回復(fù),說(shuō)明回復(fù)來(lái)自防火墻或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包回來(lái)(當(dāng)然也向其他誘騙的IP回復(fù)SYN/ACK包,我們無(wú)法接收到),證明80端口是開(kāi)放的。

3.2????NSE腳本引擎

NSE腳本引擎(Nmap Scripting Engine)是Nmap最強(qiáng)大最靈活的功能之一,允許用戶自己編寫(xiě)腳本來(lái)執(zhí)行自動(dòng)化的操作或者擴(kuò)展Nmap的功能。

NSE使用Lua腳本語(yǔ)言,并且默認(rèn)提供了豐富的腳本庫(kù),目前已經(jīng)包含14個(gè)類(lèi)別的350多個(gè)腳本。

NSE的設(shè)計(jì)初衷主要考慮以下幾個(gè)方面:

網(wǎng)絡(luò)發(fā)現(xiàn)(Network Discovery)

更加復(fù)雜的版本偵測(cè)(例如skype軟件)

漏洞偵測(cè)(Vulnerability Detection)

后門(mén)偵測(cè)(Backdoor Detection)

漏洞利用(Vulnerability Exploitation)

3.2.1????NSE創(chuàng)建腳本方法

下面以daytime.nse腳本為例說(shuō)明一下NSE格式。

NSE的使用Lua腳本,并且配置固定格式,以減輕用戶編程負(fù)擔(dān)。通常的一個(gè)腳本分為幾個(gè)部分:

description字段:描述腳本功能的字符串,使用雙層方括號(hào)表示。

comment字段:以--開(kāi)頭的行,描述腳本輸出格式

author字段:描述腳本作者

license字段:描述腳本使用許可證,通常配置為Nmap相同的license

categories字段:描述腳本所屬的類(lèi)別,以對(duì)腳本的調(diào)用進(jìn)行管理。

rule字段:描述腳本執(zhí)行的規(guī)則,也就是確定觸發(fā)腳本執(zhí)行的條件。在Nmap中有四種類(lèi)型的規(guī)則,prerule用于在Nmap沒(méi)有執(zhí)行掃描之前觸發(fā)腳本執(zhí)行,這類(lèi)腳本并不需用到任何Nmap掃描的結(jié)果;hostrule用在Nmap執(zhí)行完畢主機(jī)發(fā)現(xiàn)后觸發(fā)的腳本,根據(jù)主機(jī)發(fā)現(xiàn)的結(jié)果來(lái)觸發(fā)該類(lèi)腳本;portrule用于Nmap執(zhí)行端口掃描或版本偵測(cè)時(shí)觸發(fā)的腳本,例如檢測(cè)到某個(gè)端口時(shí)觸發(fā)某個(gè)腳本執(zhí)行以完成更詳細(xì)的偵查。postrule用于Nmap執(zhí)行完畢所有的掃描后,通常用于掃描結(jié)果的數(shù)據(jù)提取和整理。在上述實(shí)例中,只有一個(gè)portrule,說(shuō)明該腳本在執(zhí)行端口掃描后,若檢測(cè)到TCP 13號(hào)端口開(kāi)放,那么觸發(fā)該腳本的執(zhí)行。

action字段:腳本執(zhí)行的具體內(nèi)容。當(dāng)腳本通過(guò)rule字段的檢查被觸發(fā)執(zhí)行時(shí),就會(huì)調(diào)用action字段定義的函數(shù)。

3.2.2????NSE腳本用法

Nmap提供不少腳本使用的命令行參數(shù)。

[plain]view plaincopy

-sC:?等價(jià)于?--script=default,使用默認(rèn)類(lèi)別的腳本進(jìn)行掃描。

--script=:?使用某個(gè)或某類(lèi)腳本進(jìn)行掃描,支持通配符描述

--script-args=:?為腳本提供默認(rèn)參數(shù)

--script-args-file=filename:?使用文件來(lái)為腳本提供參數(shù)

--script-trace:?顯示腳本執(zhí)行過(guò)程中發(fā)送與接收的數(shù)據(jù)

--script-updatedb:?更新腳本數(shù)據(jù)庫(kù)

--script-help=:?顯示腳本的幫助信息,其中部分可以逗號(hào)分隔的文件或腳本類(lèi)別。

3.2.3????NSE用法演示

配合腳本掃描192.168.1.1,查看能否獲得有用的信息。

命令如下:

nmap –sV –p 80 –v –script default,http*192.168.1.1

從上圖中,我們可以看到Nmap掃描到對(duì)方80端口是開(kāi)放的,然后使用了大量的名字為http開(kāi)頭的腳本對(duì)其進(jìn)行掃描。掃描過(guò)程發(fā)現(xiàn)在http-auth腳本執(zhí)行,出現(xiàn)了“Basic relm=TP-LINK Wireless N router WR740”字樣(紅線劃出部分),這里已經(jīng)挖掘?qū)Ψ降脑O(shè)備類(lèi)型與具體版本信息。如果我們知道更多關(guān)于WR740已知的漏洞,那么就可以進(jìn)行更進(jìn)一步的滲透測(cè)試了。

4?????參考資料

4.1????書(shū)籍

Nmap Network Scanning

Nmap創(chuàng)始人Fyodor編寫(xiě)的Nmap的權(quán)威指南,非常詳盡地描述Nmap的實(shí)現(xiàn)原理及使用方法。Nmap官方文檔正是來(lái)自該書(shū)部分章節(jié)。

Secrets of Network Cartography

該書(shū)對(duì)Nmap的實(shí)現(xiàn)原理及使用場(chǎng)景有比較豐富的介紹。

Nmap in the Enterprise: Your Guide to Network Scanning

這本書(shū)描述Nmap在企業(yè)領(lǐng)域的運(yùn)用。

Nmap mindmap.pdf

這nmap使用方法的思維導(dǎo)圖(一頁(yè)紙的圖片),對(duì)Nmap用法整理很完整。

4.2????網(wǎng)站

官網(wǎng):www.nmap.org

安全工具排名:http://sectools.org/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Nmap使用 Nmap是主機(jī)掃描工具,他的圖形化界面是Zenmap,分布式框架為Dnamp。 Nmap可以完成以下...
    原來(lái)是老王閱讀 3,578評(píng)論 0 6
  • Nmap輸出的是掃描目標(biāo)的列表,以及每個(gè)目標(biāo)的補(bǔ)充信息,至于是哪些信息則依賴(lài)于所使用的選項(xiàng)?!八信d趣的端口表格...
    令狐沖233閱讀 2,102評(píng)論 0 4
  • 1.前言 Nmap是一款開(kāi)源免費(fèi)的網(wǎng)絡(luò)發(fā)現(xiàn)(Network Discovery)和安全審計(jì)(Security Au...
    啾哥閱讀 12,699評(píng)論 0 3
  • 端口掃描在百度百科上的定義是:端口掃描是指某些別有用心的人發(fā)送一組端口掃描消息,試圖以此侵入某臺(tái)計(jì)算機(jī),并了解其提...
    隨風(fēng)化作雨閱讀 5,932評(píng)論 0 0
  • 早上挺涼快,出門(mén)晚了,開(kāi)始熱。 陽(yáng)光逐漸強(qiáng)烈,久違的拍花沖動(dòng)又來(lái)了,那就拍吧。
    周湘泉閱讀 194評(píng)論 0 0

友情鏈接更多精彩內(nèi)容