目錄
0x01 nmap簡介
0x02 四大功能一 -- 主機發現
0x03 四大功能二 -- 端口掃描
0x04 四大功能三 -- 服務和版本檢測
0x05 四大功能四 -- 作業系統偵測
0x06 總結:
0x01 nmap簡介
(1)Nmap 一款開源免費的網絡發現和安全審計工具。名字Nmap是Network Mapper的簡稱。Nmap最初是由Fyodor在1997年開始建立的,随後在開源社群衆多的志願者參與下,該工具逐漸成為最為流行安全必備工具之一。最新版的Nmap6.0在2012年5月21日釋出,現如今最新版本到Nmap7.90。
官網下載下傳位址:www.nmap.org。
中文手冊:http://www.nmap.com.cn/doc/manual.shtm#4(版本有點老)
(2)Zenmap是Nmap官方提供的圖形界面(随Nmap的安裝包釋出),旨為nmap提供更加簡單的操作方式,由Python語言編寫而成的開源免費的圖形界面,能夠運作在現有作業系統平台上。
(3)Nmap包含四項基本功能:主機發現、端口掃描、版本偵測以及作業系統偵測。
0x02 四大功能一 -- 主機發現
(1)Nmap支援十多種不同的主機探測方式,可根據實際情況靈活選用不同的方式來探測目标機:
1) -sn: Ping Scan 隻進行主機發現,不進行端口掃描。通常稱為"ping 掃描",在以前的 Nmap 版本中,-sn被稱為 -sP。它允許對目标網絡進行輕度偵察,而不會引起太多關注。
2) -Pn: 完全跳過主機發現階段。預設情況下,Nmap隻對正在運作的主機進行高強度的探測如:端口掃描、版本探測或者作業系統探測。用此指令可以使Nmap對每一個指定的目标IP位址都進行所要求的掃描。老版本稱作-P0(數字0)。通常實際使用中 -Pn -sn 一起使用。
3) -PU: 使用UDP ping探測主機,當裝置的外部接口過濾所有TCP端口情況下使用。未指定端口,則預設為 40125,修改位置:可在nmap.h檔案中修改此預設值DEFAULT_UDP_PROBE_PORT_SPEC。
4) -PR[ARP Ping]:使用場景之一是掃描一個以太區域網路, 比基于IP的掃描更快更可靠。在預設情況下,如果Nmap發現目标主機就在它所在的區域網路上,它會進行ARP掃描,即使指定了不同的ping類型。
5) -PO[protocollist]: 使用IP協定包探測對方主機是否開啟。
6) -PE/PP/PM: 使用ICMP echo、 ICMP timestamp、ICMP netmask 請求包發現主機。
7) -PS/PA/PY[portlist]: 使用TCP SYN/TCP ACK或SCTP INIT方式進行發現。
8) -sL: 一種退化形式,它簡單地列出指定網絡的每個主機,而不向目标主機發送任何資料包。
9) -n/-R: -n表示不進行DNS解析;-R表示總是進行DNS解析。
10) --dns-servers <serv1[,serv2],...>: 指定DNS伺服器。
11) --system-dns: 指定使用系統的DNS伺服器
12) --traceroute: 追蹤每個路由節點
(2)常用指令 -sn 抓包解析:
1)掃描公網ip時:
Nmap會發送四種不同類型的資料包來探測目标主機是否線上。
①ICMP echo request
②a TCP SYN packet to port 443(https)
③a TCP ACK packet to port 80(http)
④an ICMP timestamp request
使用此指令探測會依次發送這四個封包探測目标機是否開啟。隻要收到其中一個包的回複,就可以證明目标機開啟。同時使用這四種不同類型的資料包可以有效避免因防火牆或丢包而造成的判斷錯誤。
2)掃描内網ip時:
使用此指令會發送arp請求包探測目标ip是否線上,如果有arp回複包,則說明線上。如果線上,此指令還可以得到其MAC位址,但是不會探測其開放的端口号。
(3)進階指令 -PE/-PP/-PM/PU 抓包分析:
① -PE(ICMP Echo): 通過向目标發送ICMP Echo資料包來探測目标主機是否存活,但由于許多主機的防火牆會禁止這些封包,實際使用需要配合其他指令才有更好效果。

② -PP(ICMP time stamp): 該掃描方式在大多數防火牆配置不當時可能會得到回複進而判斷目标主機是否存活。如果目标主機線上,該指令還會探測其開放的端口以及運作的服務。
③ -PM(ICMP address maskPing):通過位址掩碼方式掃描,會試圖用備選的ICMP等級Ping指定主機,有不錯的穿透防火牆的效果。
④-PU(UDP ping):它發送一個空的(除非指定了--data-length UDP)封包到給定的端口探測主機。如果目标機器的端口是關閉的,則會得到一個ICMP端口無法到達的回應封包;反則到達一個開放的端口,大部分服務僅僅忽略這個空封包而不做任何回應。未指定端口,則預設為 40125,該掃描類型的主要優勢是它可以穿越隻過濾TCP的防火牆和過濾器。
(4)總結:實際使用過程中主機發現并不單獨使用,而隻是作為端口掃描、版本偵測、OS偵測先行步驟。通常隻有在探測某些大型區域網路的活動主機數量時才會單獨使用主機發現功能來完成。
0x03 四大功能二 -- 端口掃描
(1)核心功能,用于确定目标主機的TCP/UDP端口的開放情況。預設情況下,Nmap會掃描1000個最有可能開放的TCP端口。
(2)Nmap通過探測将端口劃分為6個狀态:
1)open:端口是開放的。
2)closed:端口是關閉的。
3)filtered:端口被防火牆IDS/IPS屏蔽,無法确定其狀态。
4)unfiltered:端口沒有被屏蔽,但是否開放需要進一步确定。
5)unfiltered:端口沒有被屏蔽,但是否開放需要進一步确定。
6)closed|filtered :端口是關閉的或被屏蔽,Nmap不能識别。
(3)-sS (TCP SYN掃描):
這是Nmap預設的掃描方式,通常被稱作半開放掃描。該方式發送SYN到目标端口,如果收到SYN/ACK回複,那麼可以判斷端口是開放的;如果收到RST包,說明該端口是關閉的。如果沒有收到回複,那麼可以判斷該端口被屏蔽了。執行得很快,掃描相對來說不張揚,不建立完整的TCP連接配接,是以相對比較隐蔽,而且效率比較高,适用範圍廣。
(4)-sT (TCP connent掃描):
使用系統網絡API connect向目标主機的端口發起連接配接,如果無法連接配接,說明該端口關閉。該方式掃描速度真的是慢,而且由于建立完整的TCP連接配接會在目标主機上留下記錄資訊,不夠隐蔽。是以,-sT指令是TCP SYN無法使用才考慮使用的方式。
(5)-sA (TCP ACK 掃描):
向目标主機的端口發送ACK包,如果收到RST包,說明該端口沒有被防火牆屏蔽;沒有收到RST包,說明被屏蔽。該方式隻能用于确定防火牆是否屏蔽某個端口,可以輔助TCP SYN的方式來判斷目标主機防火牆的狀況。
(6)-sU (UDP掃描-sU):
UDP掃描用于判斷UDP端口的情況,向目标主機的UDP端口發送探測包,如果收到回複ICMP port unreachable就說明該端口是關閉的;如果沒有收到回複,那說明該UDP端口可能是開放的或者屏蔽的。是以,通過反向排除法的方式來判斷哪些UDP端口是可能處于開放狀态的。
(7)-sN/sF/sX (TCP FIN/Xmas/NULL 掃描):
這三種掃描方式被稱為秘密掃描,因為相對比較隐蔽。FIN掃描向目标主機的端口發送的TCP FIN 包、Xmas tree包或NULL包,如果收到對方的RST回複包,那麼說明該端口是關閉的;沒有收到RST包說明該端口可能是開放的或者被屏蔽了。其中Xmas tree包是指flags中FIN URG PUSH被置為1的TCP包;NULL包是指所有的flags都為0的TCP包。
(8)-sY/-sZ (SCTP INIT/COOKIE-ECHO):
除了以上幾種常用的方式外,Nmap還支援多種其他的探測方式。例如使用SCTP INIT/Cookie-ECHO方式是來探測SCTP的端口開放情況。
(9)-sS -sU 聯用探測指定端口的開放狀态:
若既想掃描目标TCP端口又想掃描UDP的端口,則需要指定掃描方式以及端口。
例: nmap -sS -sU -p T:80,U:445 192.168.187.129
以半連接配接的TCP SYN方式掃描目标主機的80端口,以UDP方式掃描目标主機的445端口。
(10)--top-ports 探測N個最有可能開放的端口:
例:nmap -sS -sU --top-ports 100 10.96.10.246
與 -F 有異曲同工之處:通常 Nmap 會為每個掃描的協定掃描最常見的 1000 個端口。使用 -F,這減少到 100。
(11)-r 不要随機化端口:
預設情況下,Nmap 會随機順序掃描的端口(除了某些常見的端口出于效率原因移動到開頭附近)。可以指定 -r 順序(從低到高排序)端口掃描。
0x04 四大功能三 -- 服務和版本檢測
(1)用于确定目标主機開放端口上運作的具體的應用程式及版本資訊。
(2)Nmap提供的版本偵測具有如下的優點:
1)高速。并行地進行套接字操作,實作一組高效的探測比對定義文法。
2)盡可能地确定應用名字與版本名字。
3)支援TCP/UDP協定,支援文本格式與二進制格式。
4)支援多種平台服務的偵測,包括Linux/Windows/Mac OS/FreeBSD等系統。
5)如果檢測到SSL,會調用openSSL繼續偵測運作在SSL上的具體協定(如HTTPS/POP3S/IMAPS)。
6)如果檢測到SunRPC服務,那麼會調用brute-force RPC grinder進一步确定RPC程式編号、名字、版本号。
7)支援完整的IPv6功能,包括TCP/UDP,基于TCP的SSL。
8)通用平台枚舉功能(CPE)。
9)廣泛的應用程式資料庫(nmap-services-probes)。目前Nmap可以識别幾千種服務的簽名,包含了180多種不同的協定。
(3)版本偵測原理:
1)首先檢查open與open|filtered狀态的端口是否在排除端口清單内。如果在排除清單,将該端口剔除。
2)如果是TCP端口,嘗試等待6秒建立TCP連接配接(預設值6秒,可在檔案nmap-services-probes中Probe TCP NULL q||對應的totalwaitms值修改)。
如果在等待時間内,接收到目标機發送的“WelcomeBanner”資訊。nmap将接收到的Banner與nmap-services-probes中NULL probe中的簽名進行對比。查找對應應用程式的名字與版本資訊。
如果通過“Welcome Banner”無法确定應用程式版本,那麼nmap再嘗試發送其他的探測包(即從nmap-services-probes中挑選合适的probe),将probe得到回複包與資料庫中的簽名進行對比。如果反複探測都無法得出具體應用,那麼列印出應用傳回封包,讓使用者自行進一步判定。
3)如果是UDP端口,那麼直接使用nmap-services-probes中的探測包進行探測比對。根據結果對比分析出UDP應用服務類型。
(4)版本偵測用法:
1)-sV: 常用的指令,指定讓Nmap進行版本偵測。
當目标主機把ftp的21号端口改成了12端口,普通掃描則隻探測到12端口是開啟的,并不12号端口上運作的具體程式,可通過加參數 -sV 探測到目标主機上12端口運作的是ftp服務。
2)--version-intensity <level>: 指定版本偵測強度(0-9),預設為7。數值越高,探測出的服務越準确,但是運作時間會比較長。
3)--version-light: 指定使用輕量偵測方式 (intensity 2)。
4)--version-all: 嘗試使用所有的probes進行偵測 (intensity 9)。
5)--version-trace: 顯示出詳細的版本偵測過程資訊。
0x05 四大功能四 -- 作業系統偵測
(1)Nmap擁有豐富的系統資料庫nmap-os-db,目前可以識别2600多種作業系統與裝置類型。
(2)OS偵測原理:
使用 TCP/IP 堆棧指紋進行遠端作業系統檢測。Nmap 向遠端主機發送一系列 TCP 和 UDP 資料包,并幾乎檢查響應中的每一位。在執行了 TCP ISN 采樣、TCP 選項支援和排序、IP ID 采樣和初始視窗大小檢查等數十項測試後,Nmap 将結果與其 nmap-os-db 中的2600 多個已知作業系統指紋的資料庫進行比對得出作業系統詳細資訊。
具體簡化:
1)Nmap内部包含了2600多已知系統的指紋特征(在檔案nmap-os-db檔案中)。将此指紋資料庫作為指紋比對的樣本庫。
2)分别挑選一個open和closed的端口,向其發送經過精心設計的TCP/UDP/ICMP資料包,根據傳回的資料包生成一份系統指紋。
3)将探測生成的指紋與nmap-os-db中指紋進行對比,查找比對的系統。如果無法比對,以機率形式列舉出可能的系統。
(3)OS偵測用法:
1)-O: 指定Nmap進行OS偵測。
2)--osscan-limit: 限制Nmap隻對确定的主機的進行OS探測(至少需确知該主機分别有一個open和closed的端口)。
3)--osscan-guess: 大膽猜測對方的主機的系統類型。由此準确性會下降不少,但會盡可能多為使用者提供潛在的作業系統。
0x06 總結:
(1)nmap -T[0-5] 時間參數如何選擇:
1)-T0:非常慢,可用于躲避目标主機的防火牆攔截。
2)-T1:比較慢,可用于躲避目标主機的防火牆攔截。
3)-T2:一般不用,可以降低對帶寬的消耗,相應速度降下來了。
4)-T3:預設,根據目标的反應自動調整時間。
5)-T4:快速掃描,常用,需要在很好的網絡環境下進行掃描,請求可能會淹沒目标。
6)-T5:極速掃描,速度飛快同時犧牲了準确度。
(2)常用參數:
-sn:隻進行主機存活檢測,不進行端口掃描。通常稱為"ping 掃描",在以前的 Nmap 版本中,-sn被稱為 -sP。它允許對目标網絡進行輕度偵察,而不會引起太多關注。
-sS:半開放掃描。預設的端口掃描方式,不建立完整的3次握手,不在目标主機上産生任何日志記錄就能獲得遠端主機的端口開放資訊。
-Pn:跳過主機發現進行後續掃描,解決因主機的防火牆攔截而誤以為目前主機不存活,導緻停止所有後續掃描問題。
-sT:需要完成三次握手,速度慢,通常在 -sS 無法使用才考慮使用的方式。
-O:檢測作業系統類型。
-sA:用來穿過防火牆的規則集,速度慢。
-sV:實用于目标主機端口更換綁定後的服務及版本探測。
-v:在掃描的過程顯示詳細資訊。
(3)-A (全面掃描):
這個指令不僅列出目标主機開放的端口号,對應的服務,還較為詳細的列出了服務的版本,其支援的指令,到達目标主機的每一跳路由等資訊。在進行完全掃描時,掃描機與目标主機之間存在大量的資料流量互動,掃描時長随之增加。完全掃描不僅僅是TCP協定上的通信互動,還有例如ICMP、HTTP、NBSS、TDS、POP等等協定的互動。
通常搭配 -T4 一起使用: >> nmap -A -T4 192.168.187.129