《红蓝攻防对抗实战》十三.内网穿透之利用HTTP协议进行隧道穿透

一.前言

本文介绍了利用HTTP协议进行隧道穿透的方法。WEB tunnel即WEB隧道,可以进行局域网穿透控制,通过web tunnel可以桥接到局域网内的所有网络设备,让远程访问此设备就像在局域网内访问此设备一样。Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上携带其他协议数据。Web tunnel适用于当目标开启防火墙时,此时入站和出站连接都受到限制,除了WEB服务的端口(80或443)。Webshell可以用于连接目标主机上的服务,这是目标主机上的本地端口连接,一般都会允许从服务端口读取数据,并将其封装到HTTP上,作为HTTP响应发送到本地代理,整个外部通讯都是通过HTTP协议完成的。

二.前文推荐

《红蓝攻防对抗实战》一. 隧道穿透技术详解
《红蓝攻防对抗实战》二.内网探测协议出网之TCP/UDP协议探测出网
《红蓝攻防对抗实战》三.内网探测协议出网之HTTP/HTTPS协议探测出网
《红蓝攻防对抗实战》四.内网探测协议出网之ICMP协议探测出网
《红蓝攻防对抗实战》五.内网探测协议出网之DNS协议探测出网
《红蓝攻防对抗实战》六.常规反弹之利用NC在windows系统执行反弹shell
《红蓝攻防对抗实战》七.常规反弹之利用NC在Linux系统执行反弹shell
《红蓝攻防对抗实战》八.利用OpenSSL对反弹shell流量进行加密
《红蓝攻防对抗实战》九.内网穿透之利用GRE协议进行隧道穿透
《红蓝攻防对抗实战》十.内网穿透之利用DNS协议进行隧道穿透
《红蓝攻防对抗实战》十一.内网穿透之利用SSH协议进行隧道穿透
《红蓝攻防对抗实战》十二.内网穿透之利用ICMP协议进行隧道穿透
《红蓝攻防对抗实战》十三.内网穿透之利用HTTP协议进行隧道穿透
————————————————————————————————————————————

三.利用HTTP协议进行隧道穿透

WEB tunnel即WEB隧道,可以进行局域网穿透控制,通过web tunnel可以桥接到局域网内的所有网络设备,让远程访问此设备就像在局域网内访问此设备一样。Web隧道允许用户通过HTTP连接发送非HTTP流量,这样就可以在HTTP上携带其他协议数据。Web tunnel适用于当目标开启防火墙时,此时入站和出站连接都受到限制,除了WEB服务的端口(80或443)。Webshell可以用于连接目标主机上的服务,这是目标主机上的本地端口连接,一般都会允许从服务端口读取数据,并将其封装到HTTP上,作为HTTP响应发送到本地代理,整个外部通讯都是通过HTTP协议完成的。
假设在内网渗透中发现主机,经测试发现存在网站,可以通过此站点的HTTP协议去搭建隧道,通过漏洞获取到webshell权限,当拥有webshell权限时就可以利用HTTP协议的webshell tunnel进行搭建,下面用一些案例来演示如何搭建web tunnel,具体实验环境如表1-1所示,实验拓扑如图1-1所示。

图1-1 HTTP协议实验拓扑图

表1-1 HTTP协议实验环境表
主机类型IP配置
攻击机192.168.0.58
Web服务器192.168.0.25,192.168.52.11
靶机192.168.52.12

1. Reduh进行端口转发


Reduh是一款基于WEB服务的端口转发工具,它支持asp、jsp、php脚本环境,由客户端进行连接,客户端需要配置JDK环境,使用前需要获取到目标服务器webshell权限,才可以上传reDuh服务端对应脚本文件,reDuh文件再将内网服务器的端口通过HTTP/HTTPS服务转发到本地,形成一个连通回路。
1)通过上传reDuh.php文件搭建WEB隧道,将靶机的RDP远程连接服务通过reDuh.php文件转发到攻击机。首先检测到目标主机是PHP环境,通过文件上传漏洞获取到webshell权限,之后上传reDuh.php文件到网站根目录下,此时在攻击机访问网站[http://192.168.0.25/reDuh.php](http://192.168.0.25/reDuh.php)显示如图1-2所示结果,即表示文件部署成功。


图1-2 测试访问


2)接下来,我们使用攻击机进入工具目录reDuhClient/dis文件夹下,执行java -jar reDuhClient.jar http://192.168.0.25/reDuh.php命令,对Web服务器进行连接,这里搭建隧道时,默认会使用1010端口。注意,如果隧道连接未成功,有可能是服务端php环境配置问题,我们对Web服务器的PHP扩展设置,对其php.ini文件中的extension=php_sockets.dll代码去掉注释即可,命令执行成功,如图1-3所示。


图1-3 攻击机连接Web服务器


3)此时攻击机的1010端口会开启监听,我们可以利用nc工具连接本地1010端口,执行nc -nv 127.0.0.1 1010命令,即可对正向代理进行管理,执行后如图1-4所示。



图1-4 NC连接服务端


4)这里使用[createTunnel]的方法将靶机的远程连接服务映射到攻击机8888端口,执行[createTunnel]8888:192.168.52.12:3389命令,即可将靶机的3389端口转发到攻击机的8888
如图1-5所示。

图1-5 设置端口转发


5)这时靶机的3389端口的远程连接服务已经转发到本地的8888端口,可以尝试在攻击机中使用rdesktop命令连接本地8888端口,执行rdesktop 127.0.0.1:8888命令,发现可以远程连接,如图1-6所示。

图1-6 测试连接成功

2. ReGeorg进行隧道穿透

ReGeorg是一款利用http协议建立隧道进行数据传输的内网代理工具,依赖python2环境,是reduh的升级版,相对于reduh来说增加了很多特性,比如流量加密、响应码定制等。下载压缩包完成解压后,查看目录结构,可以看到支持3种脚本语言,如图1-7所示。按照web服务对应的脚本语言选择webshell文件上传,进行隧道穿透。

图1-7 reGeorg压缩包文件


1)本次实验环境如图1-1-7所示。假设Web服务器是PHP环境,可以使用tunnel.nosocket.php脚本文件,上传文件到Web服务器网站根目录下。成功上传则通过http访问网站此脚本文件,可以看到部署成功,如图1-8 所示。

图1-8访问服务器shell文件


2)使用攻击机运行reGeorgSocksProxy.py文件, 执行python2 reGeorgSocksProxy.py -u http://192.168.0.25/tunnel.nosocket.php -p 8888命令,连接tunnel.nosocket.php文件,指定转发流量到攻击机的8888端口,出现如图1-9所示的界面则证明隧道穿透成功。

图1-9搭建regeorg隧道

3)随后,在攻击机中修改 proxychains4.conf配置文件,并在其底部添加一行socks5127.0.0.1 8888参数来完成 proxychains 代理配置,如下图1-10所示。


图1-10修改proxychains配置

4)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,通过所建立的 socks协议隧道,直接远程连接到目标服务器,如图1-11 所示。


图1-11隧道连接测试成功

3. Neo-reGeorg加密隧道穿透

Neo-regeorg可以说是Regeorg的重构版,也是一款很实用的WEB隧道工具,在Regeorg的基础上提高隧道的连接安全性、可用性、传输内容保密性,以应对更多的网络环境场景,工具依赖python3环境,它的原理与regeorg相似。

1)本次实验环境如图1-1所示,Neo-Regeorg使用条件和Regeorg类似,这里也是通过webshell将tunnel.php文件上传Web服务器网站服务的根目录下,生成带有密码的服务器脚本文件。执行python neoreg.py generate -k test命令,-k是指定密码,运行后会在当前目录生成文件夹neoreg_servers,文件夹内会有各种环境下的脚本,如图1-12所示。

图1-12生成Web tunnel文件


2)将生成的文件上传放置到Web服务器下,访问网站下该文件,如图1-13所示。

图1-13访问服务器webtunnel文件


3)使用Kali攻击机执python neoreg.py -k test -u http://192.168.0.25/tunnel.php -p 8888命令,此时隧道搭建成功,如图1-14所示。

图1-14利用webtunnel搭建加密隧道1


4)随后,在攻击机中修改proxychains4.conf配置文件,并在其底部添加一行socks5127.0.0.1 8888参数来完成proxychains代理配置,如图1-15所示。

图1-15修改proxychains.conf文件


5)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,通过所建立的socks协议隧道,直接远程连接到目标服务器,如图1-16所示。

图1-16隧道连接成功

4. Tunna进行隧道穿透

Tunna是一款基于Python语言所开发的隧道工具,它不仅可以用于通过 HTTP来包装和隧道化任何TCP通信,还可以用于绕过防火墙环境中的各种网络限制,其工具结构如图1-17所示。

图1-17 Tunna结构


1)本次实验环境同上,通过webshell管理权限上传conn.php到网站根目录下,就可以通过http协议访问conn.php文件连接受控服务器,然后在攻击机上执行python proxy.py -u http://192.168.0.25/conn.php -l 8888 -a 192.168.52.12 -r 80 –v命令,将靶机里的WEB服务的80端口映射到本地8888端口。-l参数是指监听本地端口,-r参数是指远程转发的端口,-a参数是指转发的地址,-v参数是指详细模式,执行成功如图1-18所示。

图1-18端口映射


2)攻击机执行成功后,此时端口映射成功,接下来我们在浏览器访问本地8888端口,即可访问到内网靶机的WEB服务,如图1-19所示。

图1-19 映射成功

5 .Abptts加密隧道穿透

Abptts工具是一款基于python 2开发的工具,支持asp、jsp脚本环境,可以利用http建立ssl加密的隧道,相对于regeorg更加稳定。但Abptts工具每次只能转发一个端口,在使用上有一定局限性。下面演示Abptts工具隧道穿透。

1)Abptts需要python 2环境,并且需要使用pip2安装依赖包pycryptodome和httplib2。在Kali攻击机上使用git命令把github上的abptts包拉取到本地,执行git clone https://github.com/nccgroup/ABPTTS.git命令之后安装,进入工具目录下使用abpttsfactory.py执行python2 abpttsfactory.py -o webshell命令会生成webshell文件夹,如图1-20所示。

图1-20利用abptts生成webtunnel文件


2)由于abptts只能生成aspx和jsp脚本,因此本次跳板机使用的是asp+lls环境。为了方便直接把abptts.asp文件放置到根目录,我们通过url访问。如图1-21所示。

图1-21通过url访问


3)在攻击机执行命令将靶机的3389端口转发到攻击机的5555端口上,执行python2 abpttsclient.py -c webshell/config.txt -u “http://192.168.0.25/abptts.aspx” -f 127.0.0.1:5555/192.168.52.12:3389命令,即可实现端口转发,如图1-22所示。

图1-22利用webtunnel进行端口转发


4)命令执行后,我们在攻击机执行rdesktop 127.0.0.1:5555命令,即可连接到靶机的3389端口,成功连接如图1-23所示,表示隧道搭建成功。

图1-23隧道连接测试成功

6. Pivotnacci加密隧道穿透

Pivotnacci这款工具一样是通过HTTP协议来搭建隧道的,它通过socks代理,支持socks4、socks5两种协议,并且能为隧道加密,也是一款不错的隧道工具。

1)下载完安装包解压后需要先初始化,使用攻击机在pivotnacci-master文件夹下执行 pip2 install -r requirements.txt命令来下载相关依赖库。然后使用python配置环境,执行python setup.py install命令会生成文件,如图1-24所示。

图1-24初始化pivitnacci环境


2)使用ls命令显示存在执行安装命令后产生的文件,如图1-25所示。

图1-25 pivitnacci环境搭建完成


3)如果需要使用密码加密,可以在agents/agent.php文件中为AGENT_PASSWORD赋值,这里将密码设置为text,如图1-26所示。

图1-26配置webtunnel文件连接密码


4)设置完成后将agent.php放置在网站根目录下,在攻击机执行./pivotnacci http://192.168.0.25/agent.php -p 6666 --password text -v命令,其中-p 6666是指定转发端口,–password是指自定义密码,执行成功则如图1-27所示。

图1-27利用webtunnel文件搭建隧道


5)随后,在攻击机中修改 proxychains4.conf配置文件,并在其底部添加一行socks5 127.0.0.1 6666参数来完成proxychains代理配置,如图1-28所示。

图1-28修改proxychains配置文件

6)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,如图1-29所示,通过所建立的socks协议隧道,可以直接远程连接到靶机。


图1-29隧道测试连接成功

四.本篇总结

随着隧道技术的不断更新迭代,越来越多的攻击者利用隧道技术攻击企业内网中,在本篇文章中介绍了如何利用HTTP协议进行隧道穿透,希望本篇对读者有用。