重新連接埠可用於主動探測防火牆以列舉傳出或傳入封鎖規則。正確使用它,您將能夠取得防火牆的配置。
我開發它主要是為了幫助我解決我目前正在開發的分散式網路掃描器的問題。
這段程式碼只是一個 PCAP 解析器,這意味著您必須為其提供正確取得的網路封包轉儲才能使其正常運作。然後,該工具將列印出(根據 PCAP)被防火牆阻止的連接埠。
為了使用它,您至少需要存取兩台機器。一個位於您要測試的防火牆後面,另一個位於另一側。
有兩種可能的用例:
您將需要 tcpdump、tshark 或wireshark 等工具來擷取和保存網路流量(或任何其他嗅探器),以及 nmap 或 Masscan 等工具來製作和傳送偵測封包。在下面的範例中,我將使用masscan和tcpdump。
如果外部電腦前面還有一個防火牆(而不是您要測試的防火牆後面的防火牆),最好了解什麼是就地規則。但這不是強制性的,您仍然可以透過從不同位置進行更多測試來找出答案。
遵循以下步驟將幫助您獲得準確的結果。
假設我們想要列舉傳出規則,因為我們計劃稍後在該電腦上運行網路掃描儀,因此我們希望確保我們的出口防火牆不會阻止任何傳出流量。
防火牆後面的機器的 IP 位址為aaaa
而外部機器的 IP 位址為bbbb
。第二台機器將是我們運行封包嗅探器(在本例中為tcpdump
)的機器,也是我們要設定的第一台機器。
投射式電容採集
我們需要在這裡啟動一個資料包嗅探器,以便查看哪些探測資料包不會到達目的地。考慮到該機器具有與網路介面eth0
關聯的公共 IP bbbb
,並且沒有運行防火牆。我們執行 tcpdump 如下
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
將產生一個檔案re-port.pcap
,在我們完成測試後,該檔案就是我們將傳遞給該工具的檔案。但我們稍後會看到這部分。
探測流量
我們將從防火牆後面的機器產生 65535 個SYN
封包並將它們傳送到bbbb
。
為此,我使用masscan
。它允許我們使用--rate
選項來設定速率,並使用--retries
選項來設定每個指定連接埠的封包數量。這兩個選項對我們來說都很重要,因為我們必須確保所有可以到達目的地的資料包都會到達目的地。根據您在來源/目標資料包上擁有的頻寬,可能會因為發送高速率而遺失。對於這個測試,我們需要緩慢而安全地進行。在義大利,我們有一句諺語:走得慢,走得遠,這對我來說似乎很合適。
masscan -Pn -n -p 1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
透過一些測試,我發現每個連接埠每秒發送 350 個資料包兩次,總計 131072 (128k) 個資料包,大約需要 9 分鐘而不丟失資料包。
列舉防火牆規則
此時我們可以使用Re-port
來取得關閉連接埠的清單。返回第一台計算機,停止資料包嗅探器CTRL+C
並將re-port.pcap
複製到擁有 Re-port 工具的目錄。現在您可以按如下方式運行它:
./enumerate.py re-port.pcap
前面的範例枚舉了 TCP 阻止規則。如果您想要所有被封鎖的 UDP 連接埠的列表,請按照上述步驟更改命令,如下所示:
# Machine with b.b.b.b IP
tcpdump -ni eth0 -w re-port.pcap src host a.a.a.a
# Machine with a.a.a.a IP
masscan -Pn -n -p U:1-65535 --wait 5 -e eth0 --rate 350 --retries 2 --open b.b.b.b
# Re-port
./enumerate.py re-port.pcap --udp
運行 ./enumerate.py --help 顯示所有選項
$./enumerate.py --help
usage: enumerate.py [-h] [--address ADDRESS] [--open] [--version] [-u] [-v] pcap
Re-port is a tool to actively enumerate firewall rules.
positional arguments:
pcap PCAP dump of receiving scan traffic
optional arguments:
-h, --help show this help message and exit
--address ADDRESS scanners's IP address. If unset, all the packets in the
PCAP will be used to enumerate closed ports
--open print open ports instead of closed ones
--version show program's version number and exit
-u, --udp search for UDP open ports instead of TCP
-v, --verbose increase output verbosity
Report 是一個Python 類,您可以根據需要使用/擴展它。
它是可迭代的,您可以在with
語句中使用它。
with Report('dump.pcap') as r:
r.enumerate_ports('tcp', '127.0.0.1')
r.print_ports()
或者
r = Report('dump.pcap')
r.enumerate_ports('tcp', '127.0.0.1')
for port in r:
print('Open %d' % port)
@r4d10n:這個工具背後的簡單想法。