引言:Nmap(網(wǎng)絡映射器)是由Gordon Lyon設計,用來探測計算機網(wǎng)絡上的主機和服務的一種安全掃描器.常用在網(wǎng)絡安全審計之中,通過對設備或者防火墻的探測來審計它的安全性。很多好萊塢黑客大片中都有Nmap的身影,例如:虎膽龍威4、黑客帝國等。
Nmap(Network Mapper)是一款開放源代碼的網(wǎng)絡探測和安全審核的工具。Nmap的設計目標是為了快速地掃描大型網(wǎng)絡,當然用它也是可以掃描單個主機的。Nmap使用原始IP報文來發(fā)現(xiàn)網(wǎng)絡上有哪些主機,這些主機提供什么服務(例如Telnt、FTP等),服務運行在什么操作系統(tǒng)之上(例如 windows XP、windows 2008 R2等),它們使用什么類型的報文過濾器/防火墻,以及一堆其他功能。
雖然Nmap通常用于安全審核,但許多系統(tǒng)管理員和網(wǎng)絡管理員也用它來做一些日常的工作,比如查看整個網(wǎng)絡的信息,管理服務升級計劃,以及監(jiān)視主機和服務的運行。
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的意譯,可以認為是設備與外界通訊交流的出口。端口可分為虛擬端口和物理端口,其中虛擬端口指計算機內部或交換機路由器內的端口不可見。例如計算機中的80端口、21端口、3389端口等。物理端口又稱為接口,是可見端口,例如計算機網(wǎng)卡上面的RJ45口,文中我們主要討論的是虛擬端口。虛擬端口是通過端口號來標記的,端口號只有整數(shù),范圍是從0到65535(2^16-1)。虛擬端口可以通過端口號的范圍分為3大類。
從0到1023,它們都綁定于一些服務。通常這些端口的通訊明確表明了某種服務的協(xié)議。例如:80端口實際上總是HTTP通訊,23端口Telnet服務。
從1024到49151。它們松散地綁定于一些服務。也就是說有許多服務綁定于這些端口,這些端口同樣用于許多其他目的。
從 49152到 65535。理論上,不應為服務分配這些端口。實際上,機器通常從1024起分配動態(tài)端口。
虛擬端口也可以通過傳輸協(xié)議分為TCP端口和UDP端口。
TCP:(Transmission Control Protocol)傳輸控制協(xié)議TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層(OSI參考模型中的第四層)通信協(xié)議。
UDP:UDP是一種無連接的傳輸層協(xié)議,提供面向事務的簡單不可靠信息傳送服務。
端口說明:80號端口和8080號端口,是被用于WEB服務的,通俗的說也就是我們網(wǎng)頁瀏覽所使用的端口。黑客可以通過這個端口判斷目標主機是否開啟WEB服務,然后在通過常見的WEB攻擊手段來攻擊,如:XSS(跨站腳本攻擊)、SQL注入攻擊。
端口說明:23端口是被用于Telnet服務的。Telnet遠程登錄服務,通常一些網(wǎng)絡設備都開啟23號端口,例如:交換機、路由器等。黑客可以通過社會工程學結合窮舉口令來攻擊。
端口說明:21號端口是被用于FTP(文件傳輸協(xié)議)服務的。
很多服務器也開啟FTP服務,甚至有些攝像頭也開啟著這個服務。黑客可以通過暴力破解來攻擊。
端口說明:3389端口被用于遠程終端桌面訪問服務,很多服務器開啟這個端口,方便網(wǎng)絡管理員遠程維護服務器。一些低版本的服務器黑客可以通過輸入法漏洞繞過登錄界面。
Nmap掃描結果中有6種端口狀態(tài),可以根據(jù)這些端口狀態(tài)來大概判斷的目標系統(tǒng)中運行著什么服務。只通過端口的狀態(tài)判斷是否開啟服務是片面的,一般來說公認端口是緊密綁定一些服務的例如:23(Telnet端口)80(http端口)但這些端口也可以人為改變的。如果網(wǎng)絡管理員把服務的默認端口號改了,那么在通過端口的狀態(tài)來判斷服務的開啟顯然就不準確了。
前面把Nmap的安裝和一些端口基本知識介紹了,下面就開始實戰(zhàn)Nmap掃描。Nmap也有很多種掃描方式,這里就簡單介紹幾種常用的。在網(wǎng)絡掃描中合理的利用不同的掃描方式往往能達到事半功倍的效果。
TCP Open掃描是基于TCP連接掃描的,TCP掃描是一種穩(wěn)定的掃描方式,基本不會對目標主機產(chǎn)生很大的影響(例如:主機崩潰什么的)這種掃描基于TCP的3次握手,在掃描的過程會在目標主機留下日志記錄,并且這種掃描的速度很慢。
具體的掃描命令:"Nmap-sT iP地 址 ",例 如:"Nmap-sT 192.168.1.1"。(注:Nmap命令不帶"")
TCP Open掃描原理:首先攻擊者向目標主機發(fā)送一個TCP SYN數(shù)據(jù)包,如果目標主機服務端口是開放狀態(tài),那么目標主機回應SYN+ACK數(shù)據(jù)包后再發(fā)送一個ACK包,如果目標主機服務端口是關閉狀態(tài),那么目標主機就回應RST+ACK數(shù)據(jù)包。TCP Open掃描通過目標主機回應不同的數(shù)據(jù)包來判斷端口是否開啟或關閉。
TCP Half Open掃描的掃描速度比較快,而且也比較隱蔽,很難被防火墻或網(wǎng)絡管理員發(fā)現(xiàn)。TCP Half Open掃描是基于SYN掃描的,可以很明確地判斷出端口的開放或關閉,是一種高效并且常用的掃描方式。
具體的掃描命令:"Nmap-sS ip地 址 ",例 如:"Nmap-sS 192.168.1.1"。
TCP Half Open掃描原理:首先攻擊者向目標主機發(fā)送一個TCP SYN數(shù)據(jù)包,如果目標主機服務的端口是開放狀態(tài),那么目標主機就會回應一個SYN+ACK的數(shù)據(jù)包,然后在發(fā)送一個RST數(shù)據(jù)包。如果目標主機服務端口是關閉狀態(tài),那么目標主機就會回應一個RST+ACK數(shù)據(jù)包。因為TCP Half Open掃描方式是在不建立完整的會話的前提下查看端口的狀態(tài)的,所以在掃描的時候不會在目標主機留下日志記錄。
TCP FIN掃描是一種隱蔽的掃描方式,對防火墻有很好的穿透效果,TCP FIN掃描是通過向目標主機發(fā)送FIN包,然后通過目標主機返回的信息來判斷目標主機的服務端口是否開放。
具體的掃描命令:"Nmap-sF ip地 址 ",例 如:"Nmap-sF 192.168.1.1"。
TCP FIN掃描原理:首先攻擊者向目標主機發(fā)送一個TCP FIN數(shù)據(jù)包,如果目標主機的服務端口是開放狀態(tài),那么目標主機沒有任何回應。如果目標主機的服務端口是關閉狀態(tài),那么目標主機就返回一個RST數(shù)據(jù)包。
TCP NULL掃描和TCP FIN掃描一樣,也是一種比較隱蔽的掃描方式,這種掃描是向目標主機發(fā)送一個特殊的TCP通信包來對目標主機探測。
具體的掃描命令:"Nmap-sN ip地 址 ",例 如:"Nmap-sN 192.168.1.1"。
TCP NULL掃描原理:首先攻擊者向目標主機發(fā)送一個TCP NULL數(shù)據(jù)包,如果目標主機的服務端口是開放狀態(tài),那么目標主機不會返回消息。如果目標主機的服務端口是關閉狀態(tài),那么目標主機就會返回一個RST數(shù)據(jù)包。
TCP Xmas掃描是利用 FIN、PSH、URG數(shù) 據(jù)包掃描的,同樣和TCP FIN掃描一樣也是一種隱藏的掃描方式。
具體的掃描命令:"Nmap-sX ip地 址 ",例 如:"Nmap-sX 192.168.1.1"。
TCP Xmas掃描掃描原理:首先攻擊者向目標主機發(fā)送TCP FIN、PSH、URG數(shù)據(jù)包,如果目標主機的服務處于開放狀態(tài),那么目標主機不會有回應。如果目標主機處于關閉狀態(tài),那么目標主機就會回應RST數(shù)據(jù)包。
Ping掃描不會返回太多的的信息造成對結果的分析。這種掃描在目標主機禁用Ping之后就失效了。
具體的掃描命令:"Nmap-sP ip地 址 ",例 如:"Nmap-sP 192.168.1.1"
Ping掃描原理:Ping掃描是通過Ping來查看目標主機激活狀態(tài)的。
UDP端口掃描是基于UDP掃描的,UDP掃描速度比較慢,可以結合-p選項來指定需要掃描的端口。
具體的掃描命令:"Nmap-sU ip地 址 ",例 如:"Nmap-sU 192.168.1.1"
還有很多掃描方式還沒有介紹,感興趣的話可以去https://nmap.org查找。
上文中介紹端口的時候說過如果只是通過判斷目標端口是否開放來來判斷服務是否開啟,這種判斷方法是片面的,因為有些服務網(wǎng)絡管理員可能更改了默認的端口,例如我把Telent服務的默認端口改成FTP服務的默認端口21,那么用Nmap探測到目標21端口開放著,以此來判斷目標主機上面運行著FTP服務,這樣顯示判斷是錯誤的。Nmap不止能掃描端口,還能對目標主機的服務和版本號進行識別和探測。通過對目標主機服務識別這種掃描方式來判斷目標主機是否運行指定的服務,這種方式比基于端口的判斷準確多了。
Nmap之所以可以識別出相關的服務及版本,是因為Nmap-service。Nmap-service中包括很多不同服務的報文。Nmap通過和Nmapservice里面的報文匹配來識別服務的。
Nmap版本探測命令:"Nmap-sV IP地址",例如:"NmapsV 192.168.1.1"。
Nmap是根據(jù)服務的指紋識別出服務和相應的版本的。Nmap的系統(tǒng)探測也是通過指紋來判斷系統(tǒng)的,要啟動Nmap的系統(tǒng)探測功能只用在后面加一個-O選項就行。例如:"Nmap-O 192.168.1.1"。在滲透測試中只有準確判斷出目標系統(tǒng)中運行的是什么操作系統(tǒng),才能根據(jù)相應的操作系統(tǒng)來指定不同的滲透方式。所以系統(tǒng)探測是Nmap中一個實用的功能。
用Nmap掃描有時候會被目標網(wǎng)絡中的防火墻或IDS(入侵檢測系統(tǒng))阻止了。那么如何規(guī)避開網(wǎng)絡中的防火墻和IDS那,下面簡單介紹兩種規(guī)避防火墻和IDS的方法。
將可以的探測包進行分片處理,例如:將TCP包拆分成多個IP包發(fā)動過去。因為簡單的防火墻為了加快處理速度沒有進行重組檢查,所以這種方法可以繞過一些簡單的防火墻或IDS。
報文分段的選項是-f,Nmap 通過–f選項將TCP頭分段在幾個包中,使IDS等檢查更加困難。
報文分段掃描命令:"Nmap-sX-v-F 192.168.1.1"
在進行掃描時,將真實的IP地址和其他主機的IP地址混用,這樣會使目標主機誤認為是在利用誘餌進行掃描,而不是一個真實的掃描,這樣可以規(guī)避一些防火墻和IDS。
Nmap IP欺騙可以使用=D選項來指定多個IP地址,或者利用RND隨機生成幾個地址。
IP欺騙掃描命令:"Nmap-DRND:11 192.168.1.1"
關于防火墻和IDS的規(guī)避方法就介紹到這,要想了解更多可以參考Nmap官網(wǎng)的參考手冊。
NSE腳本引擎是Nmap中一個很強大的功能,用戶可以自己編寫腳本來執(zhí)行自動化的操作或擴展Nmap的功能。
NSE使用了Lua腳本語言編寫,目前包含14個類別的350多個腳本。這14個類別主要有auth、broadcat、brute、default、discovery、dos、exploit、e x t e r n a l、f u z z e r、intrusice、malware、safe、version、vnln。使 用 類別的時候是不區(qū)分大小寫的。下面以ftp-brute為例介紹一下NSE腳本的 使 用。ftp-brute是Nmap中一個審計FTP安全的一個NSE腳本,可以檢測自己的FTP服務器是否存在弱口令。詳細的破解命令和使用方法是:"Nmap--scriptftp-brute--s c r i p targs userdb=user.txt,passdb=password.txt-p 21 IP地址"其中user.txt是指定的用戶名字典,password.txt是指定的密碼字典,21是FTP對應的端口號。更多的關于NSE腳本的介紹請參考“nmapscript使用幫助”下載地 址: http://pan.baidu.com/s/1pJvijsJ這是我網(wǎng)上找的一個不錯的Nmap腳本參考資料,這里分享給大家。
凡事都有利和弊對于黑客來說可以利用Nmap來掃描遠程主機存在什么漏洞,然后實施入侵。而對于網(wǎng)絡管理員來說,可以利用Nmap對自己的網(wǎng)絡進行安全審計檢測,來對自己的網(wǎng)絡加固。關于Nmap的敘述并不是一篇文章就能敘述完的,畢竟Nmap也算網(wǎng)絡安全圈里很牛的一款工具。Nmap還有很多腳本,如:telnet-brute腳本用來檢測Telnet服務弱口令、ms-sql-brute腳本用來檢測MSSQL數(shù)據(jù)庫的弱口令。要想熟練的掌握Nmap腳本只有通過自己的不斷的學習和不斷的練習才行。