一,端口掃描技術
基本的TCP connect()掃描
TCP SYN掃描(半開連接掃描, half open)
TCP Fin掃描(祕密掃描,stealth)
TCP ftp proxy掃描(bounce attack)
用IP分片進行SYN/FIN掃描(躲開包過濾防火牆)
UDP recvfrom掃描
UDP ICMP端口不可達掃描
Reverse-ident掃描
二,TCP連接常識
TCP數據包6個標誌位
URG: 緊急數據包
ACK: 確認
PSH: 請求急迫操作
RST: 連接復位
SYN: 連接請求
FIN: 結束
TCP/IP的一些實現原則
當一個SYN或者FIN數據包到達一個關閉的端口,TCP丟棄數據包同時發送一個RST數據包
當一個RST數據包到達一個監聽端口,RST被丟棄 當一個RST數據包到達一個關閉的端口,RST被丟棄
當一個包含ACK的數據包到達一個監聽端口時,數據包被丟棄,同時發送一個RST數據包
當一個不包含SYN位的數據包到達一個監聽端口時,數據包被丟棄
當一個SYN數據包到達一個監聽端口時,正常的三階段握手繼續,回答一個SYN|ACK數據包
當一個FIN數據包到達一個監聽端口時,數據包被丟棄
三,各種掃描方式詳細
1, TCP connect()掃描
做法
掃描器調用socket的connect()函數發起一個正常的連接
如果端口是打開的,則連接成功
否則,連接失敗
優點
簡單,不需要特殊的權限
缺點
服務器可以記錄下客戶的連接行爲,如果同一個客戶輪流對每一個端口發起連接,則一定是在掃描
2, TCP SYN掃描
做法
向目標主機的特定端口發送一個SYN包
如果應答包爲RST包,則說明該端口是關閉的
否則,會收到一個SYN|ACK包。於是,發送一個RST,停止建立連接
由於連接沒有完全建立,所以稱爲“半開連接掃描”
優點
很少有系統會記錄這樣的行爲
缺點
在UNIX平臺上,需要root權限纔可以建立這樣的SYN數據包
3, TCP FIN掃描
做法
向目標主機的特定端口發送一個TCP FIN包
如果應答包爲RST包,則說明該端口是關閉的
若未收到,表示端口是打開的。
4, 分片掃描
它本身並不是一種新的掃描方法,而是其他掃描技術的變種,特別是SYN掃描和FIN掃描
思想是,把TCP包分成很小的分片,從而讓它們能夠通過包過濾防火牆
注意,有些防火牆會丟棄太小的包
而有些服務程序在處理這樣的包的時候會出現異常,或者性能下降,或者出現錯誤
5, reverse-ident掃描
Ident協議使得可以發現任何一個通過TCP連接的進程的所有者的用戶名,即使該進程並沒有發起該連接
只有在TCP全連接之後纔有效
TCP端口113
例如
可以先連接到80端口,然後通過identd來發現服務器是否在root下運行
建議關閉ident服務,或者在防火牆上禁止,除非是爲了審計的目的
6, TCP FTP proxy掃描
FTP bounce attack
做法
在ftp協議中,數據連接可以與控制連接位於不同的機器上
讓ftp server與目標主機建立連接,而且目標主機的端口可以指定
如果端口打開,則可以傳輸否則,返回"425 Can't build data connection: Connection refused."
Ftp這個缺陷還可以被用來向目標(郵件,新聞)傳送匿名信息
優點:這種技術可以用來穿透防火牆
缺點:慢,且有些ftp server禁止這種特性
7, UDP ICMP端口不可達掃描
利用UDP協議
做法
開放的UDP端口並不需要送回ACK包,而關閉的端口也不要求送回錯誤包,所以利用UDP包進行掃描非常困難
有些協議棧實現的時候,對於關閉的UDP端口,會送回一個ICMP Port Unreach錯誤
缺點
速度慢,而且UDP包和ICMP包都不是可靠的
需要root權限,才能讀取ICMP Port Unreach消息
一個應用例子
Solaris的rpcbind端口(UDP)位於32770之上,這時可以通過這種技術來探測
8, UDP recvfrom()&write()掃描
非root用戶不能直接讀取ICMP Port Unreach消息,但是Linux提供了一種方法可以間接通知到
做法
第二次對一個關閉的UDP端口調用write()總是會失敗
經驗:在ICMP錯誤到達之前,在UDP端口上調用recvfrom()會返回EAGAIN(重試),否則會返回ECONNREFUSED(連接拒絕)
偶滴作品
http://www.dbank.com/download.action?t=40&k=ODM3NDMyMg==&pcode=LCwzMDUyNTgsMzA1MjU4&rnd=2725