當前位置:
首頁 > 最新 > Tunna:一款神奇的工具,它可以通過HTTP封裝隧道通信任何TCP

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:黑白之道 |