開放的端口意味著遠程主機上正在運行著聯(lián)網(wǎng)的服務,而某些難以察覺的編程錯誤或?qū)崿F(xiàn)缺陷會使這些服務容易受到攻擊,有時甚至成為侵入整個系統(tǒng)的突破口。
這些網(wǎng)絡服務往往使用 TCP 或 UDP 作為傳輸協(xié)議。TCP(Transmission Control Protocol)是一種連接導向的協(xié)議,相對更常用。而 UDP(User Datagram Protocol)是一種非連接導向的協(xié)議,多用于對傳輸速度的要求高于數(shù)據(jù)完整性的服務。
而通過檢測端口及服務來入侵遠程系統(tǒng)的滲透測試方法即為端口掃描。
一、TCP 端口掃描技術(shù)
1. Connect 掃描
Connect 掃描對每一個端口都嘗試建立完整的 TCP 連接(三步握手),如果連接創(chuàng)建成功,則該端口被判定為開放的。

2. Stealth 掃描
Stealth 掃描也常被稱作 SYN 掃描或半開放掃描。該技術(shù)向每一個被掃描的端口發(fā)送一個單獨的 SYN 包,如果收到 SYN+ACK 回復,則該端口被判定為開放的。這之后不會再遵照三步握手的程序向目標主機發(fā)送 ACK 包,所以并沒有開啟完整的TCP連接,而目標主機的日志系統(tǒng)一般也不會記錄這類掃描的痕跡。

3. Zombie 掃描
『僵尸』掃描背后的實現(xiàn)原理比較負責。整個過程如下圖所示:
簡單來說,
- 先找一個遠程系統(tǒng)作為『僵尸』主機,該主機與網(wǎng)絡中的其他主機之間不存在活躍的網(wǎng)絡連接。
- 向『僵尸』主機發(fā)送一個 SYN+ACK 包并記錄下該主機初始的 IPID 值。
- 偽裝成『僵尸』主機(將報文中的源IP地址替換為『僵尸』主機的)向目標主機發(fā)送一個 SYN 數(shù)據(jù)包。
- 如果目標端口是開放的,則目標主機會向『僵尸』主機返回一個 SYN+ACK 包,而『僵尸』主機(覺得很懵逼。。。)則返回一個 RST 包并把自己的 IPID 值增加 1。
如果目標端口是關(guān)閉的,則目標主機會向『僵尸』主機返回 RST 響應,而收到 RST 的『僵尸』主機(依然不清楚發(fā)生了什么)則不做任何動作,IPID 值也不會增加。 - 向『僵尸』主機發(fā)送另一個 SYN+ACK 包,從返回的 RST 包中獲取最終的 IPID 值。如果該值比第 2 步時增加了 1,則目標端口是關(guān)閉的。如果最終增加了 2,則目標端口是開放的。
一點兒也不簡單哈。。。
命令示例
在特權(quán)用戶下執(zhí)行時,nmap 默認采用 SYN 掃描方式(即不開啟完整的TCP連接)以節(jié)省掃描時間。同時這種掃描行為也不易被目標主機的日志系統(tǒng)記錄到。
而普通用戶不具有修改原始數(shù)據(jù)包的權(quán)限,所以只能通過 connect系統(tǒng)調(diào)用 打開完整的 TCP 連接以完成對遠程系統(tǒng)的掃描。
所以從效率和安全的角度出發(fā),應優(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個端口可供掃描,默認掃描1000個常用的端口)。如:
$ sudo nmap 10.2.64.1 -p 21,22,80,443
$ sudo nmap 10.2.64.1 -p 20-25

從上述命令的輸出結(jié)果中可以看出,該主機的 22,80 端口是開放的(很可能運行著ssh服務和http服務),21 和 443 端口是關(guān)閉的。
二、UDP 端口掃描技術(shù)
UDP 掃描相對顯得更有難度,同時也更乏味和耗時。
其中一種方式依賴于ICMP端口不可達響應,即假設每一個被掃描的 UDP 端口在不開放時都會回復 ICMP 端口不可達的響應,而收不到該響應時則判定端口為開放的。
但有時候被掃描主機不允許生成端口不可達響應,或該響應被限制在一定頻率內(nèi),也可能是被主機的防火墻隔離。此種方法就會產(chǎn)生不準確的結(jié)果。
另一種方式是通過發(fā)送服務相關(guān)的請求來探測遠程主機上對應的服務。此種方法可信度更高,但同時消耗的時間也更多。

open|filtered 表示該端口可能是開放的,也可能被防火墻屏蔽掉了。