Python滲透測試之tcp幾種埠掃描的講解

青衫無名發表於2018-03-15

tcp資料包格式: 

TCP是傳輸層的協議,它的資料包格式如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

1、源埠號 
2、目標埠 
3、seq 用於表示這個資料包攜帶的資料是這個資料流哪個位置的資料,用於資料排序 
4、ack 接受方向傳送方確認已經收到的資料 
5、跟ip頭部的4位首部長度一樣(見本期上半節內容),最少值為5(20位元組,即選項處沒資料),最大15(60位元組,即選項處資料為40位元組) 
6、保留位,wirshake抓包沒發現此欄位,但是發現它與標誌欄位合併了 
7、6位標標誌欄位: 
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

(源自百度百科) 
8、可以看作tcp的緩衝區,根據mss大小,用於確定一次性傳送分組的個數 
9、校驗和,與IP校驗和欄位是一樣的(見本期內容上半節講解) 
10、當標誌位設定了URG時,表示這個緊急指標有效,表示緊急指標開始的資料才是正常資料 
11、選項欄位 
12、資料 
此處沒有總長度欄位是因為可通過ip頭部總長度減去ip頭部得到tcp總長度,而udp有總長度欄位是為了32位對齊

TCP建立連線:

表現形式為三次握手,客戶機傳送SYN標誌位的資料包,對方返回SYN,ACK標誌位的欄位,客戶機收到包後返回ACK確認包,在這三次握手後就建立起tcp連線了:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

3次握手例項:

0?wx_lazy=1

埠: 
每一個埠對應一個服務,有時我們可以根據埠知道後面執行著什麼服務,例如埠22開放表示開放著ssh服務。

SYN掃描:

SYN掃描又稱半開掃描,傳送一個‘標誌位’為S的TCP資料包到目標伺服器的某個埠,如果埠開放,就會返回一個標誌位為SYN,ACK的TCP資料包,如果埠關閉就返回標誌位為RST的資料包。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

SYN掃描速度比較快,但容易被防火牆過濾,且丟包無法被發現

FIN掃描:

本機傳送一個標誌位為F的TCP資料包到目標伺服器的某個埠,如果埠開放,就不會做出回應,如果埠關閉就返回標誌位為RST的TCP資料包。

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

FIN掃描速度快,且不易被過濾,難以被發現,但是對windows系統無效,無論埠是否開放,windows都返回RST包。

NULL掃描:

與FIN掃描類似,本機傳送一個標誌位為空的TCP資料包到目標伺服器的某個埠,如果埠開放,就不會做出回應,如果埠關閉就返回標誌位為RST的TCP資料包。

NULL掃描速度快,且不易被過濾,難以被發現,但是對windows系統無效

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

XMAS掃描: 
XMAS掃描,又稱聖誕樹掃描,因為它像聖誕樹一樣掛了很多標誌位,本機傳送一個標誌位為“FIN,URG,PSH”的TCP資料包到目標伺服器的某個埠,如果埠開放,就不會做出回應,如果埠關閉就返回標誌位為RST的TCP資料包。
640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

XMAS掃描速度快,且不易被過濾,難以被發現,但是對windows系統無效。

指令碼效果展示(以SYN掃描為例):

我ubuntu(192.168.1.113)的TCP對外只開了22埠(ssh服務)

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

現在我執行我的指令碼(先掃描小範圍埠,以便用wireshark抓包進行分析)

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

下面我以FIN掃描1-250埠來檢視效果(FIN,NULL,XMAS掃描當沒有資料包返回時都進行了再次兩次重傳進行驗證)

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

指令碼程式碼片段展示:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

原文釋出時間為:2017-03-08
本文作者:exploit
本文來自雲棲社群合作伙伴“Python中文社群”,瞭解相關資訊可以關注“Python中文社群”微信公眾號


相關文章