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 下载地址:查看原文下载奥~

你可能喜欢

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180304B0AVPT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励