Intro
前篇有提到Nmap主要功能有二,並在前篇簡單介紹幾種常見的在線主機搜索的方法,那麼本篇就繼續介紹如何使用Nmap進行端口搜索以及在端口搜索的同時我們還能做些什麼事情:
- Live Host Discovery(在線主機搜索)
- Port Scan (端口搜索)
- Typical Scan: -sS/-sT/-sU
- TCP Flag Related: -sN/-sF/-sX/-sM
- Firewall Stateless/Stateful: -sA
- Idel/Zombie Scan: -sI
Typical Port Scan
-sS (TCP SYN scan)
有root權限下默認的掃描方式,又稱Stealth-Scan/Half-Scan,因為不同於正常的TCP三次握手,-sS
在發送SYN封包後等待對方回應,在接受到回應/或timeout後回傳RST而不是ACK,表示不想建立連接。也由於這個特性,-sS
被稱為隱蔽掃描(Stealth)就是由於沒有主動建立連接對方不容易察覺,再加上由於發送的都是正常的封包和flag,除非是非常嚴格的防火牆否則大多-sS
都會有效
-sT (TCP connect scan)
沒有root權限下默認的掃描方式,又稱Full-Scan,也就是通過建立TCP communication的方式對每一個要掃描的端口去嘗試連接。但官方也推薦說若有root權限下最好使用-sS
而非-sT
(性能/隱蔽性)
-sU (UDP scan)
發送UDP封包到目標主機端口,但由於UDP協議的特性無狀態,需要一點特殊技巧來判斷端口是否開放:
- 如果接收到
ICMP port unreachable error(type 3, code 3)
: closed - 如果接收到
ICMP port unreachable error(type 3, code 0, 1, 2, 9, 10, or 13)
: filtered - 如果接收到其他正常封包: open
- 如果沒有接收到任何回覆: open | filtered
這種UDP掃描方式由於判斷依據主要來自ICMP unreachable封包,因此常要執行很久(因為多數主機都會對ICMP unreachable封包設置頻率限制,例如Linux 2.4.20就設置1/sec。在這種情況下若要掃描全部65535端口則需要18hr)
Other Port Scan
-sN,-sF,-sX,-sM
-sN
, -sF
, -sX
, -sM
都是對TCP Flag UAPRSF中設置不同的Flag組合,下面就介紹一下它們分別都是設置什麼TCP Flag作封包:
- -sN(Null scan): 什麼TCP Flag都沒有設置
- -sF(FIN scan): FIN
- -sX(Xmas scan): FIN, PSH, URG
- -sM(Maimon scan): FIN, ACK
-sA (TCP ACK scan)
是一種較特殊的掃描方式,目的並不是查看端口是否開放而是用來 偵測防火牆是stateless/stateful (stateless防火牆不會紀錄連線狀態),通過發送ACK封包來判別。因此當目標主機中間的防火牆是stateless的話,並不會過濾掉此封包並最終由目標主機回傳RST封包給偵測者(因為目標主機沒有該連線紀錄所以回傳RST);若是防火牆是stateful的話會過濾並drop掉此封包,因此若使用-sA
進行掃描會得到下面兩種情況:
unfiltered
: 有收到RST封包,表示防火牆是statelessfiltered
: 沒有回覆表示防火牆是stateful
-sI (Idle scan/Zombie scan)
是一種特殊的掃描方式,藉由找到的代理(殭屍)替代自己來執行掃描,在目標主機中隱匿自己的IP。通過對IPID來判斷目標主機端口是否開放,但就現在來說這個方法的難點在於找到合適的殭屍,因為殭屍必須滿足以下三個條件:
- IPID為全域遞增(incremental),即每發送一個封包,IPID增加1
- 殭屍主機對攻擊主機可ping
- 殭屍主機必須處於閒置狀態,否則IPID判斷不了
可以通過執行以下Nmap腳本來判斷該主機能否當殭屍主機:
nmap -Pn -p80 --script=ipidseq <ZOMBIE_IP>
之後使用類似指令執行Idle Scan:
nmap -sI 192.168.1.100 192.168.1.200 # .100是zombie; .200是要探測的目標主機
小結
至此,Nmap基本用法及其介紹到這邊就結束了,後面若是再介紹可能就是相關的NSE的應用場景了。
謝謝各位看到這邊,如有任何疑問或文章有任何錯漏,歡迎來信與我討論,謝謝!