本文轉載至:http://www.cnblogs.com/tdcqma/p/5692546.html
1 Nmap介紹
Nmap掃描原理與用法PDF:下載地址
Nmap是一款開源免費的網路發現(Network Discovery)和安全審計(Security Auditing)工具。軟體名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始建立的。隨後在開源社區眾多的志願者參與下,該工具逐漸成為最為流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日發布,詳情請參見:www.nmap.org。
一般情況下,Nmap用於列舉網路主機清單、管理服務升級調度、監控主機或服務健全狀態。Nmap可以檢測目標機是否線上、連接埠開放情況、偵測啟動並執行服務類型及版本資訊、偵測作業系統與裝置類型等資訊。
Nmap的優點:
1. 靈活。支援數十種不同的掃描方式,支援多種目標對象的掃描。
2. 強大。Nmap可以用於掃描互連網上大規模的電腦。
3. 可移植。支援主流作業系統:Windows/Linux/Unix/MacOS等等;源碼開放,方便移植。
4. 簡單。提供預設的操作能覆蓋大部分功能,基本連接埠掃描nmap targetip,全面的掃描nmap –A targetip。
5. 自由。Nmap作為開源軟體,在GPL License的範圍內可以自由的使用。
6. 文檔豐富。Nmap官網提供了詳細的文檔描述。Nmap作者及其他安全專家編寫了多部Nmap參考書籍。
7. 社區支援。Nmap背後有強大的社區團隊支援。
8. 讚譽有加。獲得很多的獎勵,並在很多影視作品中出現(如駭客帝國2、Die Hard4等)。
9. 流行。目前Nmap已經被成千上萬的安全專家列為必備的工具之一。 1.1 Zenmap
Zenmap是Nmap官方提供的圖形介面,通常隨Nmap的安裝包發布。Zenmap是用Python語言編寫而成的開源免費的圖形介面,能夠運行在不同作業系統平台上(Windows/Linux/Unix/Mac OS等)。Zenmap旨在為nmap提供更加簡單的操作方式。簡單常用的操作命令可以儲存成為profile,使用者掃描時選擇profile即可;可以方便地比較不同的掃描結果;提供網路拓撲結構(NetworkTopology)的圖形顯示功能。
其中Profile欄位,用於選擇“Zenmap預設提供的Profile”或“使用者建立的Profile”;Command欄位,用於顯示選擇Profile對應的命令或者使用者自行指定的命令;Topology選項卡,用於顯示掃描到的目標機與本機之間的拓撲結構。 1.2 功能架構圖
Nmap包含四項準系統: 主機發現(Host Discovery) 連接埠掃描(Port Scanning) 版本偵測(Version Detection) 作業系統偵測(Operating System Detection)
而這四項功能之間,又存在大致的依賴關係(通常情況下的循序關聯性,但特殊應用另外考慮),首先需要進行主機發現,隨後確定連接埠狀況,然後確定連接埠上運行具體應用程式與版本資訊,然後可以進行作業系統的偵測。而在四項準系統的基礎上,Nmap提供防火牆與IDS(IntrusionDetection System,入侵偵測系統)的規避技巧,可以綜合應用到四個準系統的各個階段;另外Nmap提供強大的NSE(Nmap Scripting Language)指令碼引擎功能,指令碼可以對準系統進行補充和擴充。 2 Nmap基本掃描方法
Nmap主要包括四個方面的掃描功能,主機發現、連接埠掃描、應用與版本偵測、作業系統偵測。在詳細講解每個具體功能之前,首先可以看看Nmap的典型用法。 2.1 用法引入 2.1.1 確定連接埠狀況
如果直接針對某台計算的IP地址或網域名稱進行掃描,那麼Nmap對該主機進行主機發現過程和連接埠掃描。該方式執行迅速,可以用於確定連接埠的開放狀況。
命令形式:
nmap targethost
可以確定目標主機線上情況及連接埠基本狀況。
2.1.2 完整全面的掃描
如果希望對某台主機進行完整全面的掃描,那麼可以使用nmap內建的-A選項。使用了改選項,nmap對目標主機進行主機發現、連接埠掃描、應用程式與版本偵測、作業系統偵測及調用預設NSE指令碼掃描。
命令形式:
nmap –T4 –A –v targethost
其中-A選項用於使用進攻性(Aggressive)方式掃描;-T4指定掃描過程使用的時序(Timing),總有6個層級(0-5),層級越高,掃描速度越快,但也容易被防火牆或IDS檢測並屏蔽掉,在網路通訊狀況良好的情況推薦使用T4;-v表示顯示冗餘(verbosity)資訊,在掃描過程中顯示掃描的細節,從而讓使用者瞭解當前的掃描狀態。
例如,掃描區域網路內地址為192.168.1.100的電腦。顯而易見,掃描出的資訊非常豐富,在對192.168.1.100的掃描報告部分中(以紅框圈出),可以看到主機發現的結果“Host is up”;連接埠掃描出的結果,有996個關閉連接埠,4個開放連接埠(在未指定掃描連接埠時,Nmap預設掃描1000個最有可能開放的連接埠);而版本偵測針對掃描到的開放狀況進一步探測連接埠上啟動並執行具體的應用程式和版本資訊;OS偵測對該目標主機的裝置類型與作業系統進行探測;而綠色框圖是nmap調用NSE指令碼進行進一步的資訊挖掘的顯示結果。 2.2 主機發現
主機發現(Host Discovery),即用於發現目標主機是否線上(Alive,處於開啟狀態)。 2.2.1 主機發現原理
主機發現發現的原理與Ping命令類似,發送探測包到目標主機,如果收到回複,那麼說明目標主機是開啟的。Nmap支援十多種不同的主機探測方式,比如發送ICMP ECHO/TIMESTAMP/NETMASK報文、發送TCPSYN/ACK包、發送SCTP INIT/COOKIE-ECHO包,使用者可以在不同的條件下靈活選用不同的方式來探測目標機。
主機發現基本原理:(以ICMP echo方式為例)
Nmap的使用者位於源端,IP地址192.168.0.5,向目標主機192.168.0.3發送ICMP Echo Request。如果該請求報文沒有被防火牆攔截掉,那麼目標機會回複ICMP Echo Reply包回來。以此來確定目標主機是否線上。
預設情況下,Nmap會發送四種不同類型的資料包來探測目標主機是否線上。
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
依次發送四個報文探測目標機是否開啟。只要收到其中一個包的回複,那就證明目標機開啟。使用四種不同類型的資料包可以避免因防火牆或丟包造成的判斷錯誤。 2.2.2 主機發現的用法
通常主機發現並不單獨使用,而只是作為連接埠掃描、版本偵測、OS偵測先行步驟。而在某些特殊應用(例如確定大型區域網路內活動主機的數量),可能會單獨專門適用主機發現功能來完成。
不管是作為輔助用法還是專門用途,使用者都可以使用Nmap提供的豐富的選項來定製主機發現的探測方式。 -sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。 -sn: Ping Scan 只進行主機發現,不進行連接埠掃描。 -Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。 -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進行發現。 -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請求包發現主機。-PO[protocollist]: 使用IP協議包探測對方主機是否開啟。 -n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。 --dns-servers <serv1[,serv2],...>: 指定DNS伺服器。 --system-dns: 指定使用系統的DNS伺服器 --traceroute: 追蹤每個路由節點
-sL: List Scan 列表掃描,僅將指定的目標的IP列舉出來,不進行主機發現。-sn: Ping Scan 只進行主機發現,不進行連接埠掃描。-Pn: 將所有指定的主機視作開啟的,跳過主機發現的過程。-PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式進行發現。-PE/PP/PM: 使用ICMP echo, timestamp, and netmask 請求包發現主機。-PO[protocollist]: 使用IP協議包探測對方主機是否開啟。-n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。--dns-servers <serv1[,serv2],...>: 指定DNS伺服器。--system-dns: 指定使用系統的DNS伺服器--traceroute: 追蹤每個路由節點
其中,比較常用的使用的是-sn,表示只單獨進行主機發現過程;-Pn表示直接跳過主機發現而進行連接埠掃描等進階操作(如果已經確知目標主機已經開啟,可用該選項);-n,如果不想使用DNS或reverse DNS解析,那麼可以使用該選項。 2.2.3 使用示範
探測scanme.nmap.org
下面以探測scanme.nmap.org 的主機為例,簡單示範主機發現的用法。
命令如下:
nmap –sn –PE –PS80,135 –PU53 scanme.nmap.org
使用Wireshark抓包,我們看到,scanme.nmap.org 的IP地址182.140.147.57發送了四個探測包:ICMPEcho,80和135連接埠的TCP SYN包,53連接埠的UDP包(DNS domain)。而收到ICMP Echo的回複與80連接埠的回複。從而確定了scanme.nmap.org主機正常線上。
探測區域網路內活動主機
掃描區域網路192.168.1.100-192.168.1.120範圍內哪些IP的主機是活動的。
命令如下:
nmap –sn 192.168.1.100-120
從結果中,可以看到這個IP範圍內有三台主機處於活動狀態。
從Wireshark抓取的包中,可以看到發送的探測包的情況:
在區域網路內,Nmap是通過ARP包來詢問IP地址上的主機是否活動的,如果收到ARP回複包,那麼說明主機線上。
例如,某條ARP回複的報文詳細資料如下:
2.3 連接埠掃描
連接埠掃描是Nmap最基本最核心的功能,用於確定目標主機的TCP/UDP連接埠的開放情況。
預設情況下,Nmap會掃描1000個最有可能開放的TCP連接埠。
Nmap通過探測將連接埠劃分為6個狀態: open:連接埠是開放的。 closed:連接埠是關閉的。 filtered:連接埠被防火牆IDS/IPS屏蔽,無法確定其狀態。 unfiltered:連接埠沒有被屏蔽,但是否開放需要進一步確定。 open|filtered:連接埠是開放的或被屏蔽。 closed|filtered :連接埠是關閉的或被屏蔽。 2.3.1 連接埠掃描原理
Nmap在連接埠掃描方面非常強大,提供了十多種探測方式。 2.3.1.1 TCP SYN scanning
這是Nmap預設的掃描方式,通常被稱作半開放掃描(Half-open scanning)。該方式發送SYN到目標連接埠,如果收到SYN/ACK回複,那麼判斷連接埠是開放的;如果收到RST包,說明該連接埠是關閉的。如果沒有收到回複,那麼判斷該連接埠被屏蔽(Filtered)。因為該方式僅發送SYN包對目標主機的特定連接埠,但不建立的完整的TCP串連,所以相對比較隱蔽,而且效率比較高,適用範圍廣。
TCP SYN探測到連接埠關閉: