防火牆識別

0x00:端口識別

在檢測防火牆是否對一個端口過濾還是關閉,可通過發送兩個類型的數據包來判斷,第一個是 syn 包,第二個是 ack 包。分別根據這兩個包的返回來進行確認。正常的請求過程是發 syn,回 syn/ack,發 ack,回 fin/ack。兩個發兩個回,所以可以通過兩回來確認。這裏分爲四種情況。

第一種是最簡單的,端口是開放狀態,走的是正常的流程,所以 syn 應回 syn/ack,ack 應回 rst。因爲 ack 是單獨發的,所以回 rst。

第二種是關閉狀態,syn 沒有結果返回,ack 也沒有結果返回。都沒有結果返回時,則可證明端口是關閉的。

第三種是過濾狀態,端口被過濾,有兩種情況,第一個是 syn 正常返回,ack 不正常。第二個是 syn 不正常返回,ack 卻正常。也就是兩個包只有其中一個是正常的,另一個是不正常,則可判定爲端口被過濾。先看第一種,syn 返回了 syn/ack,ack 卻沒有結果返回,則端口被過濾。

第四種是過濾狀態,也就是上面說的另外一個,syn 沒有返回結果,ack 卻返回了 rst,則端口被過濾。

請輸入圖片描述

0x01:scapy 探測

瞭解了以上過程,可以通過 scapy 來分別發送 syn 和 ack,python 腳本如下:

#!/usr/bin/python

import sys
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *

if len(sys.argv) != 3:
    print "./firewall.py 1.1.1.1 1"
    sys.exit()

ip = sys.argv[1]
port = int(sys.argv[2])

ACK_response = sr1(IP(dst=ip)/TCP(dport=port,flags='A'),timeout=1,verbose=0)
SYN_response = sr1(IP(dst=ip)/TCP(dport=port,flags='S'),timeout=1,verbose=0)

if (SYN_response[TCP].flags == 18) and (ACK_response[TCP].flags == 4):
    print "port is open or unfiltered"
elif (SYN_response == None) and (ACK_response == None):
    print "port is closed or host down"
elif (SYN_response[TCP].flags == 18) and (ACK_response == None):
    print "port is filtered"
elif (SYN_response == None) and (ACK_response[TCP].flags == 4):
    print "port is filtered"
else:
    print "port is closed or host down"

上面腳本就是通過 scapy 發 syn 包和 ack 包,然後利用返回結果來做出的判斷,依據就是之前的那張表。其中 18 則代表 syn/ack,4 則代表 rst,flags 內容從下往上數,是從 1 開始倍數增加的,1,2,4,8,16,32 這種,把爲 1 的字段的值相加即可知道 flags 返回的內容。

syn/ack:

請輸入圖片描述

ack:

請輸入圖片描述

運行結果如下:

請輸入圖片描述

0x03:nmap

既然是發 syn 包和 ack 包,則 nmap 必然也可以,nmap 默認識別端口時就是 syn 的方式,如果要發 ack 則可用參數 sA,然後根據兩個包返回的結果對比剛開始的表,進行判斷即可。

請輸入圖片描述

syn 可以使用 sS 參數,ack 可以使用 sA 參數,一般 nmap 的 sS 掃描就會直接出端口的結果,也可以拿 ack 和 syn 的結果和表格做對比。

0x04:總結

防火牆識別其實就是判斷目標服務器過濾了哪些端口,可以使用 nmap 直接掃描端口得出結果。但通過 scapy 寫腳本實現自己構造數據包發包判斷返回信息的過程,更有利於瞭解其原理和過程。

公衆號回覆數字“8”領取CIS加固全套手冊。

微 信:fageweiketang,朋友圈不定期乾貨分享,歡迎討論。

公衆號:發哥微課堂,專注於代碼審計、WEB滲透、網絡安全。

                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章