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 <remoteurl> -l <localport> [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 -u http://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 下载地址:查看原文下载奥~

* 文章出处:blog.hackersonlineclub.com,由华盟网翻译排版,转载请注明华盟网

本文原创,作者:hulei,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/198551.html

发表评论