開放的端口意味著遠(yuǎn)程主機(jī)上正在運(yùn)行著聯(lián)網(wǎng)的服務(wù)粱侣,而某些難以察覺的編程錯誤或?qū)崿F(xiàn)缺陷會使這些服務(wù)容易受到攻擊暮顺,有時甚至成為侵入整個系統(tǒng)的突破口鸟蜡。
這些網(wǎng)絡(luò)服務(wù)往往使用 TCP 或 UDP 作為傳輸協(xié)議艺糜。TCP(Transmission Control Protocol)是一種連接導(dǎo)向的協(xié)議阀湿,相對更常用着裹。而 UDP(User Datagram Protocol)是一種非連接導(dǎo)向的協(xié)議领猾,多用于對傳輸速度的要求高于數(shù)據(jù)完整性的服務(wù)。
而通過檢測端口及服務(wù)來入侵遠(yuǎn)程系統(tǒng)的滲透測試方法即為端口掃描骇扇。
一摔竿、TCP 端口掃描技術(shù)
1. Connect 掃描
Connect 掃描對每一個端口都嘗試建立完整的 TCP 連接(三步握手),如果連接創(chuàng)建成功少孝,則該端口被判定為開放的继低。
2. Stealth 掃描
Stealth 掃描也常被稱作 SYN 掃描或半開放掃描。該技術(shù)向每一個被掃描的端口發(fā)送一個單獨的 SYN 包稍走,如果收到 SYN+ACK 回復(fù)袁翁,則該端口被判定為開放的柴底。這之后不會再遵照三步握手的程序向目標(biāo)主機(jī)發(fā)送 ACK 包,所以并沒有開啟完整的TCP連接粱胜,而目標(biāo)主機(jī)的日志系統(tǒng)一般也不會記錄這類掃描的痕跡柄驻。
3. Zombie 掃描
『僵尸』掃描背后的實現(xiàn)原理比較負(fù)責(zé)。整個過程如下圖所示:簡單來說焙压,
- 先找一個遠(yuǎn)程系統(tǒng)作為『僵尸』主機(jī)鸿脓,該主機(jī)與網(wǎng)絡(luò)中的其他主機(jī)之間不存在活躍的網(wǎng)絡(luò)連接。
- 向『僵尸』主機(jī)發(fā)送一個 SYN+ACK 包并記錄下該主機(jī)初始的 IPID 值涯曲。
- 偽裝成『僵尸』主機(jī)(將報文中的源IP地址替換為『僵尸』主機(jī)的)向目標(biāo)主機(jī)發(fā)送一個 SYN 數(shù)據(jù)包野哭。
- 如果目標(biāo)端口是開放的,則目標(biāo)主機(jī)會向『僵尸』主機(jī)返回一個 SYN+ACK 包掀抹,而『僵尸』主機(jī)(覺得很懵逼虐拓。。傲武。)則返回一個 RST 包并把自己的 IPID 值增加 1蓉驹。
如果目標(biāo)端口是關(guān)閉的,則目標(biāo)主機(jī)會向『僵尸』主機(jī)返回 RST 響應(yīng)揪利,而收到 RST 的『僵尸』主機(jī)(依然不清楚發(fā)生了什么)則不做任何動作态兴,IPID 值也不會增加。 - 向『僵尸』主機(jī)發(fā)送另一個 SYN+ACK 包疟位,從返回的 RST 包中獲取最終的 IPID 值瞻润。如果該值比第 2 步時增加了 1,則目標(biāo)端口是關(guān)閉的甜刻。如果最終增加了 2绍撞,則目標(biāo)端口是開放的。
一點兒也不簡單哈得院。傻铣。。
命令示例
在特權(quán)用戶下執(zhí)行時祥绞,nmap 默認(rèn)采用 SYN 掃描方式(即不開啟完整的TCP連接)以節(jié)省掃描時間非洲。同時這種掃描行為也不易被目標(biāo)主機(jī)的日志系統(tǒng)記錄到。
而普通用戶不具有修改原始數(shù)據(jù)包的權(quán)限蜕径,所以只能通過 connect系統(tǒng)調(diào)用 打開完整的 TCP 連接以完成對遠(yuǎn)程系統(tǒng)的掃描两踏。
所以從效率和安全的角度出發(fā),應(yīng)優(yōu)先選擇 SYN 掃描而非 connect 掃描兜喻。
具體可參考 nmap 官方文檔——端口掃描技術(shù)
$ sudo nmap 10.2.64.1 -p 80
# 特權(quán)用戶 SYN 掃描
$ nmap 10.2.64.1 -p 80
# 普通用戶 connect 掃描
也可以顯式地指定采用哪種掃描方式梦染,-sT 表示 connect 掃描,-sS 表示 SYN 掃描朴皆。-p 選項用來指定掃描的端口號或端口范圍(一共有65535個端口可供掃描弓坞,默認(rèn)掃描1000個常用的端口)隧甚。如:
$ sudo nmap 10.2.64.1 -p 21,22,80,443
$ sudo nmap 10.2.64.1 -p 20-25
從上述命令的輸出結(jié)果中可以看出,該主機(jī)的 22,80 端口是開放的(很可能運(yùn)行著ssh服務(wù)和http服務(wù))渡冻,21 和 443 端口是關(guān)閉的戚扳。
二、UDP 端口掃描技術(shù)
UDP 掃描相對顯得更有難度族吻,同時也更乏味和耗時帽借。
其中一種方式依賴于ICMP端口不可達(dá)響應(yīng),即假設(shè)每一個被掃描的 UDP 端口在不開放時都會回復(fù) ICMP 端口不可達(dá)的響應(yīng)超歌,而收不到該響應(yīng)時則判定端口為開放的砍艾。
但有時候被掃描主機(jī)不允許生成端口不可達(dá)響應(yīng),或該響應(yīng)被限制在一定頻率內(nèi)巍举,也可能是被主機(jī)的防火墻隔離脆荷。此種方法就會產(chǎn)生不準(zhǔn)確的結(jié)果。
另一種方式是通過發(fā)送服務(wù)相關(guān)的請求來探測遠(yuǎn)程主機(jī)上對應(yīng)的服務(wù)懊悯。此種方法可信度更高蜓谋,但同時消耗的時間也更多。
open|filtered 表示該端口可能是開放的炭分,也可能被防火墻屏蔽掉了桃焕。