Nmap (Network Mapper)是一款開放源代碼的網(wǎng)絡(luò)探測和安全審核的工具。Nmap的設(shè)計目標(biāo)是為了快速地掃描大型網(wǎng)絡(luò),當(dāng)然用它也是可以掃描單個主機(jī)的。Nmap使用原始IP報文來發(fā)現(xiàn)網(wǎng)絡(luò)上有哪些主機(jī),這些主機(jī)提供什么服務(wù) (例如 Telnt、FTP 等 ),服務(wù)運行在什么操作系統(tǒng)之上(例如windows XP、windows 2008 R2等),它 們使用 什么類型的報文過濾器/防火墻,以及一堆其他功能。雖然Nmap通常用于安全審核,但許多系統(tǒng)管理員和網(wǎng)絡(luò)管理員也用它來做一些日常的工作,比如查看整個網(wǎng)絡(luò)的信息,管理服務(wù)升級計劃,以及監(jiān)視主機(jī)和服務(wù)的運行。
Nmap可以運行Windows xp、Windows 7等常見的Windows系統(tǒng)上。Nmap官方下載地址是: https://nmap.org/dist/nmap-6.49BETA6-win32.zip,這是一個綠色版,直接下載下來解壓縮,然后把解壓后目錄里面的 vcredist_x86、redist2008_x86、winpcap-nmap-4.13安裝一下,接著點開始菜單-運行輸入CMD,打開命令提示符,用CD命令切換到nmap-6.49BETA6-win32.zip解壓后的目錄里面,這時就能正常執(zhí)行Nmap命令了。
端口是英文port的意譯,可以認(rèn)為是設(shè)備與外界通訊交流的出口。端口可分為虛擬端口和物理端口,其中虛擬端口指計算機(jī)內(nèi)部或交換機(jī)路由器內(nèi)的端口,不可見。例如計算機(jī)中的80端口、21端口、3389端口等。物理端口又稱為接口,是可見端口,例如計算機(jī)網(wǎng)卡上面的RJ45口,文中我們主要討論的是虛擬端口。虛擬端口是通過端口號來標(biāo)記的,端口號只有整數(shù),范圍是從0到65535。虛擬端口可以通過端口號的范圍分為以下三大類。
從0到1023,它們都綁定于一些服務(wù)。通常這些端口的通訊明確表明了某種服務(wù)的協(xié)議。例如:80端口實際上總是HTTP通訊,23端口Telnet服務(wù)。
從1024到49151。它們松散地綁定于一些服務(wù)。也就是說有許多服務(wù)綁定于這些端口,這些端口同樣用于許多其他目的。
從49152到65535。 理論上,不應(yīng)為服務(wù)分配這些端口。實際上,機(jī)器通常從1024起分配動態(tài)端口。
虛擬端口也可以通過傳輸協(xié)議分為TCP端口和UDP端口。
TCP:(Transmission Control Protocol)傳輸控制協(xié)議TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層(OSI參考模型中的第四層)通信協(xié)議。
UDP:UDP是一種無連接的傳輸層協(xié)議,提供面向事務(wù)的簡單不可靠信息傳送服務(wù)。
端口說明:80號端口和8080號端口,是被用于WEB服務(wù)的,通俗地說也就是我們網(wǎng)頁瀏覽所使用的端口,黑客可以通過這個端口判斷目標(biāo)主機(jī)是否開啟WEB服務(wù),然后再通過常見的WEB攻擊手段來攻擊,例如:XSS(跨站腳本攻擊)、SQL注入攻擊。
端口說明:23端口是被用于Telnet服務(wù)的。Telnet遠(yuǎn)程登錄服務(wù),通常一些網(wǎng)絡(luò)設(shè)備都開啟23號端口,例如:交換機(jī)、路由器等。黑客可以通過社會工程學(xué)結(jié)合窮舉口令來攻擊。
端口說明:21號端口是被用于FTP(文件傳輸協(xié)議)服務(wù)的。
很多服務(wù)器也開啟FTP服務(wù),甚至有些攝像頭也開啟著這個服務(wù),黑客可以通過暴力破解來攻擊。
端口說明:3389端口被用于遠(yuǎn)程終端桌面訪問服務(wù),很多服務(wù)器開啟這個端口,方便網(wǎng)絡(luò)管理員遠(yuǎn)程維護(hù)服務(wù)器,一些低版本的服務(wù)器黑客可以通過輸入法漏洞繞過登錄界面。
Nmap掃描結(jié)果中有六種端口狀態(tài),可以根據(jù)這些端口狀態(tài)來大致判斷目標(biāo)系統(tǒng)中運行著什么服務(wù)。只通過端口的狀態(tài)判斷是否開啟服務(wù)是片面的,一般來說公認(rèn)端口是緊密綁定一些服務(wù)的,例如:23(Telnet端口)80(http端口),但這些端口也可以人為改變。如果網(wǎng)絡(luò)管理員把服務(wù)的默認(rèn)端口號改了,那么再通過端口的狀態(tài)來判斷服務(wù)的開啟顯然就不準(zhǔn)確了。那么,如何更準(zhǔn)確地判斷服務(wù)是否開啟,就要用到Nmap服務(wù)識別,稍后會具體介紹Nmap服務(wù)識別。下面先介紹一下Nmap的六種端口狀態(tài)。
1.Open[開放的]
當(dāng)我們用Nmap掃描出端口狀態(tài)為Open,說明這個端口所在的應(yīng)用程序正在該端口接收TCP或UDP報文,發(fā)現(xiàn)這一點常常是端口掃描的主要目標(biāo)。安全意識強(qiáng)的網(wǎng)絡(luò)管理員知道每多開放一個端口就意味著多一種黑客攻擊的入口,黑客或者入侵測試者想要發(fā)現(xiàn)開放的端口來攻擊系統(tǒng),而網(wǎng)絡(luò)管理員則試圖關(guān)閉它們或者用防火墻保護(hù)它們,以免被黑客入侵。
2.Closed[關(guān)閉的]
當(dāng)端口關(guān)閉的時候Nmap也可以檢測出來(它接受Nmap的探測報文并作出響應(yīng)), 但沒有應(yīng)用程序在其上監(jiān)聽。
3.Filtered[被過濾的]
由于包過濾阻止探測報文到達(dá)端口, Nmap無法確定該端口是否開放。過濾可能來自硬件防火墻,路由器規(guī)則或者主機(jī)上的軟件防火墻。
4.Unfiltered[未被過濾的]
未被過濾狀態(tài)意味著端口可訪問,但Nmap不能確定它是開放的還是關(guān)閉的。
5.open|filtered[開放或者被過濾的]
當(dāng)無法確定端口是開放還是被過濾的,Nmap就把該端口劃分成這種狀態(tài)。
6.closed|filtered[關(guān)閉或者被過濾的]
前面把Nmap的安裝和一些端口基本知識介紹了,下面就開始實戰(zhàn)Nmap掃描。Nmap也有很多種掃描方式,這里就簡單介紹幾種常用的。在網(wǎng)絡(luò)掃描中合理地利用不同的掃描方式往往能達(dá)到事半功倍的效果。
TCP Open掃描是基于TCP連接掃描的,TCP掃描是一種穩(wěn)定的掃描方式,基本不會對目標(biāo)主機(jī)產(chǎn)生很大的影響(例如:主機(jī)崩潰等),這種掃描基于TCP的3次握手,掃描過程中會在目標(biāo)主機(jī)留下日志記錄,并且這種掃描的速度很慢。
具體的掃描命令:"Nmap-sT iP地址",例如:"Nmap-sT 192.168.1.1"。(注:Nmap命令不帶"")
TCP Open掃描原理:首先攻擊者向目標(biāo)主機(jī)發(fā)送一個TCP SYN數(shù)據(jù)包,如果目標(biāo)主機(jī)服務(wù)端口是開放狀態(tài),那么目標(biāo)主機(jī)回應(yīng)SYN+ACK數(shù)據(jù)包后再發(fā)送一個ACK包,如果目標(biāo)主機(jī)服務(wù)端口是關(guān)閉狀態(tài),那么目標(biāo)主機(jī)就回應(yīng)RST+ACK數(shù)據(jù)包。TCP Open掃描通過目標(biāo)主機(jī)回應(yīng)不同的數(shù)據(jù)包來判斷端口是否開啟或關(guān)閉。
TCP Half Open的掃描速度比較快,而且也比較隱蔽,很難被防火墻或網(wǎng)絡(luò)管理員發(fā)現(xiàn)。TCP Half Open掃描是基于SYN掃描的,可以很明確地判斷出端口的開放或關(guān)閉,是一種高效并且常用的掃描方式。
具體的掃描命令:"Nmap-sS ip地址",例如:"Nmap-sS 192.168.1.1"。
TCP Half Open掃描原理:首先攻擊者向目標(biāo)主機(jī)發(fā)送一個TCP SYN數(shù)據(jù)包,如果目標(biāo)主機(jī)服務(wù)的端口是開放狀態(tài),那么目標(biāo)主機(jī)就會回應(yīng)一個SYN+ACK的數(shù)據(jù)包,然后再發(fā)送一個RST數(shù)據(jù)包。如果目標(biāo)主機(jī)服務(wù)端口是關(guān)閉狀態(tài),那么目標(biāo)主機(jī)就會回應(yīng)一個RST+ACK數(shù)據(jù)包。因為TCP Half Open掃描方式是在不建立完整的會話前提下查看端口的狀態(tài)的,所以在掃描的時候不會在目標(biāo)主機(jī)留下日志記錄。
TCP FIN掃描是一種隱蔽的掃描方式,對防火墻有很好的穿透效果,TCP FIN掃描是通過向目標(biāo)主機(jī)發(fā)送FIN包,然后通過目標(biāo)主機(jī)返回的信息來判斷目標(biāo)主機(jī)的服務(wù)端口是否開放。
具體的掃描命令:"Nmap-sF ip地址",例如:"Nmap-sF 192.168.1.1"。
TCP FIN掃描原理:首先攻擊者向目標(biāo)主機(jī)發(fā)送一個TCP FIN數(shù)據(jù)包,如果目標(biāo)主機(jī)的服務(wù)端口是開放狀態(tài),那么目標(biāo)主機(jī)沒有任何回應(yīng)。如果目標(biāo)主機(jī)的服務(wù)端口是關(guān)閉狀態(tài),那么目標(biāo)主機(jī)就返回一個RST數(shù)據(jù)包。
TCP NULL掃描和TCP FIN掃描一樣,也是一種比較隱蔽的掃描方式,這種掃描是向目標(biāo)主機(jī)發(fā)送一個特殊的TCP通信包來對目標(biāo)主機(jī)探測。
具體的掃描命令:"Nmap-sN ip地址",例如:"Nmap-sN 192.168.1.1"。
TCP NULL掃描原理:首先攻擊者向目標(biāo)主機(jī)發(fā)送一個TCP NULL數(shù)據(jù)包,如果目標(biāo)主機(jī)的服務(wù)端口是開放狀態(tài),那么目標(biāo)主機(jī)不會返回消息。如果目標(biāo)主機(jī)的服務(wù)端口是關(guān)閉狀態(tài),那么目標(biāo)主機(jī)就會返回一個RST數(shù)據(jù)包。
TCP Xmas掃描是利用FIN、PSH、URG數(shù)據(jù)包掃描的,同樣和TCP FIN掃描一樣也是一種隱藏的掃描方式。
具體的掃描命令:"Nmap-sX ip地 址 ",例 如:"N m a p-s X 192.168.1.1"。
TCP Xmas掃描原理:首先攻擊者向目標(biāo)主機(jī)發(fā)送TCP FIN、PSH、URG數(shù)據(jù)包,如果目標(biāo)主機(jī)的服務(wù)處于開放狀態(tài),那么目標(biāo)主機(jī)不會有回應(yīng)。如果目標(biāo)主機(jī)處于關(guān)閉狀態(tài),那么目標(biāo)主機(jī)就會回應(yīng)RST數(shù)據(jù)包。
Ping掃描不會返回太多的的信息造成對結(jié)果的分析。這種掃描在目標(biāo)主機(jī)禁用Ping之后就失效了。
具體的掃描命令:"Nmap-sP ip地 址 ",例 如:"N m a p-s P 192.168.1.1"
Ping掃描原理:Ping掃描是通過Ping來查看目標(biāo)主機(jī)激活狀態(tài)的。
UDP端口掃描是基于UDP掃描的,UDP掃描速度比較慢,可以結(jié)合-p選項來指定需要掃描的端口。
具體的掃描命令:"Nmap-sU ip地 址 ",例 如:"N m a p-s U 192.168.1.1"
還有很多掃描方式還沒有介紹,感興趣的話可以去https://nmap.org查找。
上文中介紹端口的時候說過,如果只是通過判斷目標(biāo)端口是否開放來判斷服務(wù)是否開啟,這種判斷方法是片面的,因為有些服務(wù)網(wǎng)絡(luò)管理員可能更改了默認(rèn)的端口,例如將Telent服務(wù)的默認(rèn)端口改成FTP服務(wù)的默認(rèn)端口21,那么用Nmap探測到目標(biāo)21端口開放著,以此來判斷目標(biāo)主機(jī)上面運行著FTP服務(wù),這樣顯示判斷是錯誤的。Nmap不只能掃描端口,還能對目標(biāo)主機(jī)的服務(wù)和版本號進(jìn)行識別和探測。通過對目標(biāo)主機(jī)服務(wù)識別這種掃描方式來判斷目標(biāo)主機(jī)是否運行指定的服務(wù),這種方式比基于端口的判斷要準(zhǔn)確得多。
Nmap之所以可以識別出相關(guān)的服務(wù)及版本,是因為 Nmap-service。Nmapservice中包括很多不同服務(wù)的報文,Nmap通過和Nmap-service里面的報文匹配來識別服務(wù)。
Nmap版本探測命令:"Nmap-sV IP地址",例如:"Nmap-sV 192.168.1.1"。
Nmap是根據(jù)服務(wù)的指紋識別出服務(wù)和相應(yīng)版本的。Nmap的系統(tǒng)探測也是通過指紋來判斷系統(tǒng)的,要啟動Nmap的系統(tǒng)探測功能只用在后面加一個“-O”選項就行。例如:"Nmap-O 192.168.1.1"。在滲透測試中只有準(zhǔn)確判斷出目標(biāo)系統(tǒng)中運行的是什么操作系統(tǒng),才能根據(jù)相應(yīng)的操作系統(tǒng)來指定不同的滲透方式,所以系統(tǒng)探測是Nmap中一個實用的功能。
用Nmap掃描有時候會被目標(biāo)網(wǎng)絡(luò)中的防火墻或IDS(入侵檢測系統(tǒng))阻止。那么,如何規(guī)避開網(wǎng)絡(luò)中的防火墻和IDS呢?下面簡單介紹兩種規(guī)避防火墻和IDS的方法。
將可以探測包進(jìn)行分片處理,例如:將TCP包拆分成多個IP包發(fā)動過去。因為簡單的防火墻為了加快處理速度沒有進(jìn)行重組檢查,所以這種方法可以繞過一些簡單的防火墻或IDS。
報文分段的選項是-f,Nmap 通過-f選項將TCP頭分段在幾個包中,使IDS等檢查更加困難。
報文分段掃描命令:"Nmap-sX-v-F 192.168.1.1"
在進(jìn)行掃描時,將真實的IP地址和其他主機(jī)的IP地址混用,這樣會使目標(biāo)主機(jī)誤認(rèn)為是在利用誘餌進(jìn)行掃描,而不是一個真實的掃描,這樣可以規(guī)避一些防火墻和IDS。
Nmap IP欺騙可以使用=D選項來指定多個IP地址,或者利用RND隨機(jī)生成幾個地址。
IP欺騙掃描命令:"N m a p-D R N D:1 1 192.168.1.1"
NSE腳本引擎是Nmap中一個很強(qiáng)大的功能,用戶可以自己編寫腳本來執(zhí)行自動化的操作或擴(kuò)展Nmap的功能。
NSE使用了Lua腳本語言編寫,目前包含14個類別的350多個腳本。使用類別的時候是不區(qū)分大小寫的,下面以ftp-brute為例介紹一下NSE腳本的使用。
ftp-brute是Nmap中一個審計FTP安全的NSE腳本,可以檢測自己的FTP服務(wù)器是否存在弱口令。詳細(xì)的破解命令和使用方法是:"Nmap--script ftp-brute--script-args userdb=user.txt,passdb=password.txt-p21 IP地址"其中user.txt是指定的用戶名字典,password.txt是指定的密碼字典,21是FTP對應(yīng)的端口號。