Tunna:一款神奇的工具,它可以通過HTTP封裝隧道通信任何TCP
Tunna:一款神奇的工具,它可以通過HTTP封裝隧道通信任何TCP,以及用於繞過防火牆環境中的網路限制。
- 總結 -
在一個完整的防火牆中,入站和出站連接都受到了受限,當然除了webserver的埠(通常是80/443),
webshell可以用於連接遠程主機上的任何服務,這是遠程主機上的本地埠連接,一般都被防火牆所允許,
webshell將從服務埠讀取數據,並將其封裝到HTTP上,並將其作為HTTP響應發送到本地代理,
本地代理將打開的數據寫到本地埠,客戶端程序將其連接,
當本地代理在本地埠上接收數據時,它將作為HTTP Post發送到webshell,
webshell將從HTTP Post中讀取數據並將其放到服務埠上,
並且重複進行,這個過程中webserver埠是需要打開(通常是80/443),整個外部通訊都是通過HTTP協議完成的。
- 使用 -
python proxy.py -u -l [options]
- 選項 -
--help, -h 顯示幫助消息並退出。
--url=URL, -u URL遠程webshell
--lport=LOCAL_PORT, -l LOCAL_PORT 本地監聽埠
--verbose, -v 輸出數據包大小
--buffer=BUFFERSIZE, -b BUFFERSIZE* HTTP請求大小(一些webshels對大小有限制)
- 沒有SOCKS代理的選擇
-如果使用SOCKS代理,則忽略此選項
--no-socks, -n 不用SOCKS代理
--rport=REMOTE_PORT, -r REMOTE_PORT 連接webshell服務的遠程埠
--addr=REMOTE_IP, -a REMOTE_IP 遠程webshell連接地址(默認為 127.0.0.1)
- 上游代理選項 -
通過本地代理隧道進行連接
--up-proxy=UPPROXY, -x UPPROXY的上游代理伺服器網站(http://proxyserver.com:3128)
--auth, -A 上游代理需要進行認證
- 高級選項 -
--ping-interval=PING_DELAY, -q PING_DELAY webshprx 的ping線程間隔(默認= 0.5)
--start-ping, -s 首先進行ping數據發送(例如一些服務,比如SSH)
--cookie, -C 請求cookies
--authentication, -t 基礎身份驗證
- 局限性 -
使用示例:python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -v
#利用80000埠啟動本地SOCKS代理伺服器
#此連接將通過HTTP並在遠程伺服器上打開
python proxy.py -u http://10.3.3.1/conn.aspx -l 8000 -x https://192.168.1.100:3128 -A -v
#利用80000埠啟動本地SOCKS代理伺服器
#將連接通過一個本地代理(https://192.168.1.100:3128),進行身份驗證
#進行遠程Tunna webshell
python proxy.py -u http://10.3.3.1/conn.aspx -l 4444 -r 3389 -b 8192 -v --no-socks
#這將啟動webshell和遠程主機RDP(3389)服務之間的連接
# RDP客戶端可以連接到本地主機4444埠
#此連接將通過HTTP進行
- 先決條件 -
具有在遠程伺服器上上傳webshell的能力
LIMITATIONS / KNOWN BUGS / HACKS (限制/已知的bug /黑客)
這是一個POC代碼,可能會導致伺服器的DoS,在執行或錯誤後清理後完成。
基於局部測試:
* JSP緩衝區需要有限制(緩衝區選項):
4096是Linux Apache Tomcat服務
1024是XAMPP Apache Tomcat服務
*遠遠超出了遠程丟失套接位元組的問題該如何解決?
例如:ruby代理 ruby proxy.rb -uhttp://10.3.3.1/conn.jsp-l 4444 -r 3389 -b 1024 -v
*套接字未啟用默認的PHP窗口(IIS PHP)
*在網殼上返回的cariages(代碼外):
發送響應,在本地套接字上寫入
* PHP webshell需要在文件的「?>」之後末尾處刪除新的行字元
因為這些將會被發送到每一個響應中,從而將Tunna混淆。
- 文件夾
-Webshells:
conn.jsp在Apache Tomcat(Windows Linux)上測試
conn.aspx在IIS 6 8(Windows Server 2003/2012)上測試
conn.php在LAMP XAMPP IIS (windows linux) 上測試
WebServer:
Python 2.6.5測試webserver.py
代理:
Python 2.6.5測試proxy.py
- 技術細節 -
架構descisions
數據被發送到HTTP Post(沒有Post變數)
指令/配置被發送到webshell作為URL參數(HTTP Get)
數據發送到HTTP主體(HTTP Post)
Websockets不使用,大多數webserver默認不支持Websockets。
非同步HTTP響應可能性較小
代理要不斷的查詢伺服器(一般默認為0.5秒)
- 起始階段 -
第一個數據包會啟動會話的webshell拿到cookie如:http://webserver/conn.ext?proxy
第二個數據包會將連接配置的選項發送到webshell 如:http://webserver/conn.ext?proxy&port=4444&ip=127.0.0.1
對於webshell連接的IP和埠
這是一個線程請求:
在PHP中這個請求將進入一個無限循環
保持webshell套接字的連接存活
- TUNNA客戶 -
本地套接字將在客戶端程序要連接時創建。客戶端連接後,啟動ping並開始執行。 任何有關套接字(來自客戶端)的數據都會被讀取並作為HTTP Post請求發送。webshell套接字上的任何數據都會作為POST的響應請求發送。
- PINGING THREAD -
因為HTTP響應不是非同步的,如果webshell有數據發送,這個線程將在webshell上執行HTTP Get請求,如果webshell有數據發送,它也會發送它作為對這個請求的回復,否則它會發送一個空響應。
一般來說:來自本地的代理數據通過HTTP Post發送,每0.5秒就會收到請求,以查詢webshell的數據,webshell端的數據被發送過來,作為對其中的一個請求的響應。
- 網站管理許可權 -
webshell連接到本地或遠程主機上的套接字。在套接字上寫的任何數據都會被發送回代理,作為對一個請求(POST/ get)的一個回復(POST/ get),該請求將被寫入到套接字。
筆記
所有的請求都需要URL參數「代理」並由webshell處理(http://webserver/conn.ext?proxy)
- AT EXIT / AT ERROR -
關閉所有線程和本地套接字發送,以及關閉webshell和遠程線程。
SOCKS
SOCKS支持是Tunna的addon模塊。本地是一個分離的線程,它處理連接請求,流量添加一個頭,指定埠和數據包的大小,並將其轉發到Tunna。Tunna將其發送到遠程webserver,刪除HTTP頭並將數據包轉發到遠程SOCKS代理。
遠程啟動SOCKS代理連接,並將接收到的埠發送到本地埠,如果遠程SOCKS代理從服務接收數據,它會查看映射表並找到需要響應的埠,將埠添加為頭,這樣本地SOCKS代理就知道在哪裡轉發數據,從接收到的埠流量將被轉發到本地埠,反之亦然。
Download Tunna 下載地址:查看原文下載奧~
你可能喜歡
※不使用宏的情況 Multi-Stage Word 也可讓用戶中馬
※FCKeditor編輯器,建立文件夾.變
TAG:黑白之道 |