Polymorph:支援幾乎所有現有協議的實時網路資料包操作框架
Polymorph是一個用Python3編寫的框架,其允許實時修改網路資料包,為使用者提供對資料包內容的最大化控制。該框架旨在實現任何現有協議(包括沒有公共規範的私有協議)的網路資料包的實時修改。除此之外,其主要目的之一是為使用者提供對資料包內容的最大化控制,並能夠對資訊執行復雜處理。
安裝
專案地址: ofollow,noindex" target="_blank">https://github.com/shramos/polymorph
在Windows上安裝
Polymorph可以在Windows作業系統上被安裝,若要正常執行,需要以下必備元件:
Python3(新增到Path),URL: https://www.python.org/downloads/
Wireshark新增到Path),URL: https://www.wireshark.org/download.html
Visual C++ Build Tools,URL: https://www.visualstudio.com/en/thank-you-downloading-visual-studio/?sku=BuildToolsrel=15
Winpcap(如果沒和wireshark一起安裝)。URL: https://www.winpcap.org/install/default.htm
一旦依賴安裝好,你只需要開啟控制檯執行以下命令:
pip install --process -dependency -links polymorph
注意,必須要以管理員身份開啟控制檯使用polymorph。
在Linux上下載和安裝
Polymorph也用於在Linux作業系統(如Kali Linux)上安裝和執行。 在安裝框架之前,必須安裝以下依賴:
apt-get install build-essential python-dev libnetfilter-queue-dev tshark tcpdump python3-pip wireshark
在安裝好依賴之後,可以使用Python pip通過以下方式安裝框架本身:
pip3 install polymorph
Docker環境
從專案根目錄:
docker-compose up -d
任何機器訪問:
docker exec -ti [polymorph | alice | bob] bash
如何使用Polymorph
Polymorph框架由兩個主要介面組成:
Polymorph:它由一個命令控制檯介面組成。也是主介面,建議將其用於複雜的任務,例如修改複雜協議,修改欄位中的型別或在無需規範的情況下修改協議。 Phcli:它是Polymorph框架的命令列介面。建議用於修改簡單協議或執行先前生成的模板等任務。
使用Polymorph主介面
參照: https://github.com/shramos/polymorph/blob/master/doc/whitepaper/whitepaper_english.pdf
使用Phcli
解析幾乎任何網路協議
現在讓我們看看Polymorph如何解析不同網路協議的欄位,如果我們想要實時修改這些欄位,那麼引用它們將會很有用。你可以嘗試任何想到的協議。
HTTP協議,僅顯示HTTP層和屬於它的欄位。
# phcli --protocol http --show-fields
顯示完整的HTTP資料包及其所屬的欄位。
# phcli --protocol http --show-packet
你還可以對網路資料包進行過濾,例如,你可以僅顯示包含特定字串或數字的資料包。
# phcli -p dns --show-fields --in-pkt "phrack"
# phcli -p icmp --show-packet --in-pkt "84" --type "int"
過濾也可以這樣用:
# phcli -p http --show-packet --in-pkt "phrack;GET;issues"
# phcli -p icmp --show-packet --in-pkt "012345;84" --type "str;int"
你可以按協議包含的欄位名稱進行篩選,但要注意的是,此名稱是Polymorph在分析網路資料包時提供的名稱。
# phcli -p icmp --show-packet --field "chksum"
# phcli -p mqtt --show-packet --field "topic;msg"
實時修改網路資料包
知道了Polymorph中顯示的要修改的網路資料包,我們將要實時修改它。讓我們先從一些例子開始。上一節中介紹的所有過濾器也可以在此處應用。
該例子將通過在request_uri欄位中插入值/issues/61/1.html來修改包含字串/issues/40/1.html及GET的資料包。 因此,當用戶訪問 http://phrack.org/issues/40/1.html 時,瀏覽器將訪問 http://phrack.org/issues/61/1.html
# phcli -p http --field "request_uri" --value "/issues/61/1.html" --in-pkt "/issues/40/1.html;GET"
如果我們處於機器和閘道器之間,則上一個命令會起作用。
# phcli --spoof arp --target 192.168.1.20 --gateway 192.168.1.1 -p http -f "request_uri" -v "/issues/61/1.html" --in-pkt "/issues/40/1.html;GET"
或者也許使用者想在localhost上嘗試它,因為他只需要修改Polymorph預設建立的iptables規則。
# phcli -p http -f "request_uri" -v "/issues/61/1.html" --in-pkt "/issues/40/1.html;GET" -ipt "iptables -A OUTPUT -j NFQUEUE --queue-num 1"
使用者可能想要修改未被Polymorph解釋為欄位的網路分組的一組位元組的情況。為此,你可以使用“切分”直接訪問資料包位元組。(如果在localhost中嘗試,請記住新增iptables規則)
# phcli -p icmp --bytes "50:55" --value "hello" --in-pkt "012345"
# phcli -p icmp -b "\-6:\-1" --value "hello" --in-pkt "012345"
# phcli -p tcp -b "\-54:\-20" -v '"><script>alert("hacked")</script>' --in-pkt "</html>"
實時新增複雜處理
在某些情況下,PHCLI選項可能不足以執行某個操作。為此,框架實現了條件函式的概念,條件函式是用Python編寫的函式,它將在實時攔截的網路資料包。
條件函式具有以下格式:
def precondition(packet): # Processing on the packet intercepted in real time return packet
舉個簡單的例子,我們將遮蔽我們攔截的資料包的原始位元組。(如果在localhost中嘗試,請記住新增iptables規則)
def execution(packet): print(packet.get_payload()) return None # phcli -p icmp --executions execution.py -v "None"
*參考來源: kitsploit ,Covfefe編譯,轉載請註明來自FreeBuf.COM