1. 概述
這里討論 nmap 支持的掃描技術(shù)蚁孔,雖然 nmap 支持多種的掃描技術(shù)但是一般情況下一次只用一種方法,就是一般不將多種掃描技術(shù)混合使用惋嚎,不過這里有個例外就是 UDP 掃描杠氢,它可能需要和任意一種 TCP 掃描技術(shù)結(jié)合使用。好了作了這個簡單說明另伍,下面開始詳細(xì)的講解每一種掃描技術(shù) (也叫掃描類型)鼻百。
2. 掃描技術(shù)
2.1. TCP SYN 掃描
-sS
(TCP SYN 掃描) SYN 掃描是 namp 的默認(rèn)掃描選項,SYN
掃描的特點是掃描速度快摆尝,快是有多快呢温艇,在一個沒有入侵防火墻的快速網(wǎng)絡(luò)上,一秒鐘可以掃描幾千個端口堕汞,這速度夠快吧勺爱。
屬于半開放掃描,因為它不打開一個完全的 TCP 連接換句話說就是從來不完成 TCP 三次握手讯检。所以
SYN
掃描連接信息被目標(biāo)服務(wù)器記錄到日志的概率更低琐鲁。
它發(fā)送一個
SYN
報文,告訴目標(biāo)服務(wù)器要打開一個連接视哑,然后等待目標(biāo)服務(wù)器響應(yīng)绣否,如果得到響應(yīng)SYN/ACK
表示端口在監(jiān)聽 (開放),得到RST(復(fù)位)
表示沒有監(jiān)聽者挡毅。
2.2. TCP connect() 掃描
-sT
(TCP connect() 掃描) 如果我們在掃描時SYN
掃描不可用時connect()
掃描就是 TCP 掃描蒜撮。SYN
掃描一般在用戶沒有權(quán)限發(fā)送原始報文或者在掃描 IPv6 網(wǎng)絡(luò)而不可用。此時 nmap 通過創(chuàng)建connect()
系統(tǒng)調(diào)用要求操作系統(tǒng)和目標(biāo)機以及端口建立連接跪呈,這時也就無法直接發(fā)送原始報文段磨。
缺點是 nmap 對高層的
connect()
調(diào)用比對原始報文控制更少,所以掃描效率較低耗绿。這種掃描需要完全連接到開放的目標(biāo)端口而不是像SYN
掃描那樣進(jìn)行半開放的掃描苹支。所以需要發(fā)送更多的報文,由于是使用完全連接所以被目標(biāo)服務(wù)器記錄到日志的概率更高误阻。
2.3. UDP 掃描
-sU
(UDP 掃描) UDP 掃描發(fā)送沒有數(shù)據(jù)的 UDP 報頭到需要掃描的目標(biāo)端口债蜜。
如果目標(biāo)返回ICMP
端口不可到達(dá)錯誤 (類型 3,代碼 3)究反,該端口是closed(關(guān)閉的)
寻定。
其它ICMP
不可到達(dá)錯誤 (類型 3,代碼 1精耐,2狼速,9,10卦停,或者 13) 表明該端口是filtered(被過濾的)
向胡。
偶爾地恼蓬,某服務(wù)會響應(yīng)一個 UDP 報文,證明該端口是open(開放的)
僵芹。
如果幾次重試后還沒有響應(yīng)处硬,該端口就被認(rèn)為是open|filtered (開放|被過濾的)
,說明端口可能是開放的淮捆,或過濾的郁油。
UDP 掃描掃描速度緩慢本股,這時因為開放的和被過濾的端口很少響應(yīng)攀痊,讓 nmap 超時然后再探測,以防探測幀或者響應(yīng)丟失拄显。關(guān)閉的端口一般會返回給 nmap 一個
ICMP
端口無法到達(dá)錯誤苟径。
2.4. TCP Null | FIN | Xmas 掃描
這里包含是三種掃描,
Null
躬审,FIN
棘街,Xmas
掃描,而不是一種掃描承边。這三種掃描類型在 TCP RFC 中發(fā)現(xiàn)了一個巧妙的辦法來區(qū)分open(開放的)
和closed(關(guān)閉的)
端口遭殉。這些掃描的優(yōu)點是可以越過一些無狀態(tài)防火墻和報文過濾路由器。另一個優(yōu)點是這些掃描類型甚至比 SYN 掃描還要隱秘博助,更不容易被目標(biāo)服務(wù)器記錄到連接日志中险污。
-sN
(Null 掃描) 不設(shè)置任何標(biāo)志位(即 TCP 標(biāo)志頭是 0)。
-sF
(FIN 掃描) 只設(shè)置 TCPFIN
標(biāo)志位 ( FIN 是 Finish 的縮寫表示關(guān)閉連接)富岳。
-sX
(Xmas 掃描) 設(shè)置FIN
蛔糯,PSH
(表示有數(shù)據(jù)傳輸),和URG
(是 Urgent 的縮寫表示本報文段中發(fā)送的數(shù)據(jù)是否包含緊急數(shù)據(jù)) 標(biāo)志位窖式。
這里還有一個問題需要注意的是蚁飒,有些目標(biāo)服務(wù)器(比如 windows系統(tǒng)的目標(biāo)服務(wù)器)管端口開放還是關(guān)閉都響應(yīng)
RST
,這導(dǎo)致所有端口都被認(rèn)為是closed(關(guān)閉的)
萝喘。
2.5. TCP ACK 掃描
ACK 掃描探測報文只設(shè)置
ACK
標(biāo)志位淮逻。當(dāng)掃描未被過濾的目標(biāo)主機時,open(開放的)
和closed(關(guān)閉的)
端口都會返回RST
報文阁簸,這是因為機器接受一個未經(jīng)請求的ACK
包會返回RST
爬早,Nmap 把它們標(biāo)記為unfiltered(未被過濾的)
,意思是ACK
報文不能到達(dá)强窖,至于它們是open(開放的)
或者closed(關(guān)閉的)
無法確定凸椿。
不響應(yīng)或者發(fā)送特定的 ICMP 錯誤消息(類型 3,代號1翅溺,2脑漫,3髓抑,9,10优幸,或者 13)的端口吨拍,nmap 將其標(biāo)記為
filtered(被過濾的)
。
2.6. TCP 窗口掃描
-sW
(TCP 窗口掃描) 這個控制選項告訴 namp 使用窗口掃描网杆。當(dāng) nmap 探測收到RST
報文時不是都認(rèn)為端口是unfiltered
羹饰。
窗口掃描通過檢查目標(biāo)主機端口返回的
RST
報文的 TCP 窗口來區(qū)分不同的端口狀態(tài)。在一些系統(tǒng)上開放端口用正數(shù)表示窗口大小碳却,而關(guān)閉端口的窗口大小為 0队秩。當(dāng)收到RST
報文時,窗口掃描根據(jù) TCP 窗口值是正數(shù)還是 0昼浦,來分別端口狀態(tài)并將端口狀態(tài)標(biāo)記為open
或者closed
馍资。
2.7. TCP Maimon 掃描
-sM
(TCP Maimon 掃描) Maimon 掃描是什么掃描這個名稱好像和網(wǎng)絡(luò)沒有任何關(guān)系,其實這個名稱是用此項掃描提出者 Uriel Maimon 的名字命名的关噪。這項技術(shù)和Null
鸟蟹,FIN
,以及Xmas
掃描是一樣的使兔,但是要注意它的探測報文使用的是FIN/ACK
建钥。本來按照網(wǎng)絡(luò) RFC 標(biāo)準(zhǔn)約定無論端口 開放或者關(guān)閉,都應(yīng)該對這樣的探測響應(yīng)RST
報文虐沥。但是 Uriel 注意到如果端口開放熊经,許多基于 BSD 的系統(tǒng)只是默默的丟棄該探測報文。
2.8. TCP 定制掃描
--scanflags
(定制的 TCP 掃描) 通過這個選項我們可以定制我們需要的掃描置蜀,所謂定制就是指定我們需要的 TCP 標(biāo)志位奈搜。
--scanflags
指定選項可以是由一個數(shù)字標(biāo)記值比如 9 (9指的是PSH
和FIN
),也可以使用標(biāo)志位的字符名盯荤。TCP 標(biāo)志位的字符名稱有:URG
馋吗,ACK
,PSH
秋秤,RST
宏粤,SYN
,FIN
指定的時候可以使用字符名稱進(jìn)行任意的組合使用灼卢。比如設(shè)置所有的標(biāo)志位--scanflagsURGACKPSHRSTSYNFIN
绍哎。
除了設(shè)置我們需要使用的標(biāo)志位之外同時還可以設(shè)置 TCP 的掃描類型比如同時指定掃描類型
-sA
。如果你不指定掃描類型 nmap 默認(rèn)使用SYN
掃描鞋真。詳細(xì)內(nèi)容可以查看 https://nmap.org/book/idlescan.html崇堰。
2.9. TCP Idlescan 掃描
-sI
<zombie host[:probeport]> (Idlescan) 空閑掃描,允許完全盲端口掃描。 攻擊者實際上可以掃描目標(biāo)而無需向目標(biāo)發(fā)送單個數(shù)據(jù)包 目標(biāo)來自他們自己的IP地址海诲,一個聰明的側(cè)信道 攻擊允許掃描被一個啞巴反彈 “僵尸宿主” 繁莹。 入侵檢測系統(tǒng) (IDS) 報告將指無辜的僵尸作為攻擊者,這種掃描類型允許發(fā)現(xiàn)基于 IP 的信任 關(guān)系機器之間特幔∽裳荩空閑掃描是終極隱形掃描。
在了解 Idlescan 掃描工作原理之前需要知道前面 2.1 講解的
SYN
掃描蚯斯,還需要知道機器接受一個未經(jīng)請求的SYN/ACK
包會返回RST
薄风,一個未經(jīng)請求的RST
會被忽略。還有一點很重要需要知道拍嵌,那就是任何數(shù)據(jù)包在互聯(lián)網(wǎng)上都有一個片段標(biāo)識號IP ID
遭赂,當(dāng)數(shù)據(jù)包發(fā)送的時候峭火,大部分操作系統(tǒng)只是簡單的增加了數(shù)字嘿棘,未做其他處理。所以攻擊者只需要探究IP ID
就可以知道最終發(fā)送了多少個報文。
空閑掃描由三個步驟組成: 對每個端口重復(fù):
- 探測僵尸的
IP ID
并記錄下來龄糊。- 偽造一個
SYN
包從僵尸并將其發(fā)送到所需的目標(biāo)端口。 根據(jù)端口狀態(tài)募疮,目標(biāo)的反應(yīng)可能會或可能不會導(dǎo)致僵尸的IP ID
增加炫惩。- 再次探的
IP ID
。 然后目標(biāo)端口狀態(tài)是 通過將此新IP ID
與步驟中記錄的IP ID
進(jìn)行比較確定阿浓。
經(jīng)過上面的三個步驟 Zombie (僵尸) 主機的
IPID
應(yīng)該會增加 1~2他嚷。如果只是增加了1,那么就可以說明Zombie 主機還沒有發(fā)出任何包芭毙,當(dāng)然響應(yīng)攻擊者的探查請求除外筋蓖。沒有發(fā)送包也就意味著目標(biāo)端口沒有開放(也可能是目標(biāo)主機向 Zombie 主機發(fā)送了一個 RST 包導(dǎo)致請求被忽略,或者是根本就是什么都沒有做)退敦。增加的如果是 2粘咖,那就表明 Zombie 主機成功在兩個探測器之間發(fā)送了包。這種情況一般情況都意味著目標(biāo)端口是開放的(目標(biāo)大概會向 Zombie 主機發(fā)送一個SYN/ACK
包去響應(yīng)攻擊者偽造的SYN
侈百,從Zombie 主機誘導(dǎo) RST 包)瓮下。如果是增加了一個比 2 還大的數(shù)字,那么就說明 Zombie 主機不可用可能不能勝任預(yù)測IP ID
數(shù)值钝域,也可能是正在忙于其他與 Idle Scan 無關(guān)的事情讽坏。
closed(關(guān)閉的)
的端口與filtered(被過濾的)
端口會發(fā)生不同的情況,攻擊者在兩種情況下使用相同的處理結(jié)果例证,即IP ID
增加 1路呜,因此空閑掃描無法區(qū)分closed(關(guān)閉的)
端口與filtered(被過濾的)
端口。 當(dāng) nmap 記錄一個IP ID
增加 1 表示端口狀態(tài)是closed|filtered
。
2.10. IP 協(xié)議掃描
-sO
(IP 協(xié)議掃描) 這里-sO
是字母 O 而不是數(shù)字 0胀葱,IP 協(xié)議掃描可以讓您確定目標(biāo)機支持哪些 IP 協(xié)議TCP
党涕,ICMP
,IGMP
巡社,或其他膛堤。從技術(shù)本質(zhì)上來說這不屬于端口掃描,掃描遍歷的是 IP 協(xié)議號而不是 TCP 或者 UDP 的端口號晌该。
2.11. FTP 彈跳掃描
-b <ftp relay host>
(FTP 彈跳掃描) FTP 協(xié)議的一個有一個特點是支持代理 ftp 連接肥荔。代理連接指的是它允許用戶連接到一臺 FTP 服務(wù)器,然后要求此 FTP 服務(wù)器將文件送到一臺第三方服務(wù)器朝群。所以導(dǎo)致 FTP 服務(wù)器可以利用于對其它主機端口掃描燕耿。
使用該選項支持 ftp 彈跳掃描。參數(shù)格式是
username:password@server:port
姜胖。 server 是某個脆弱的 FTP 服務(wù)器的名字或者 IP 地址誉帅。您也許可以省略username:password
,如果服務(wù)器上開放了匿名用戶
(user:anonymous password:-wwwuser@)右莱。端口號(以及前面的冒號) 也可以省略這個前提是 server 使用默認(rèn)的 FTP 端口 21蚜锨。