本文作者:si1ence,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。
前言
HTTP隧道技术允许在受限网络条件下,在两台计算机之间建立网络连接,绕过IDS(入侵检测系统)和防火墙等安全设备,实现基于HTTP协议的通信。这种技术常用于内网端口转发和流量代理,由于HTTP流量与正常流量差异较小,通常不易被检测。
本文将简要探讨HTTP隧道技术及其在RDP暴力破解中的应用,希望能为网络安全从业者提供参考。
部署环境
选择了一款经典工具reGeorg进行实验。reGeorg支持多种Web环境,特别是针对Tomcat 5版本进行了优化。GitHub链接如下:
https://github.com/sensepost/reGeorg
实验环境使用Windows 2008 + Java + Tomcat:
在Kali Linux上访问远程服务器上的tunnel.jsp文件,成功返回后,使用reGeorgSocksProxy.py脚本监听本地的9999端口,从而建立通信链路。本地端口9999已成功开启。
接下来配置Kali Linux上的proxychains,以便通过HTTP隧道进行流量转发。
暴力破解攻击
传统Web服务器通常不会将内部的3389端口暴露到公网,直接进行RDP暴力破解容易被安全设备捕获并锁定。通过HTTP隧道进行端口转发,可以直接访问到Web服务器的3389端口,且流量特征不明显,难以被检测。
使用Hydra工具对Web服务器的3389端口进行暴力破解。捕获的流量显示为HTTP流量,无RDP协议流量,字段基本不可读。
成功暴力破解后,可以通过rdesktop工具实现远程登录。系统安全事件日志中可以记录到相关攻击信息,包括源IP地址。
流量分析
查看tunnel.jsp的connect方法实现代码,主要通过socket.channel定义了一个连接到TCP网络套接字的通道。IP和端口从HTTP Header中获取,cmd执行命令也从Header中获取,并用x-status标记当前状态值,同时本地设置了一个sessions保存当前的SocketChannel会话。
在Wireshark中捕获的流量显示,IP和端口在初始连接时通过URL传递。Connect方法连接到目标IP和端口,3389为RDP暴力破解的端口。
tunnel.jsp的请求参数主要包括forward、read、disconnect、connect等。数据包的主要请求集中在read和forward参数的传递过程中,每次请求的时间间隔非常短。
关于forward的代码实现如下:从session中获取SocketChannel,定义一个buf确认要发送的内容。SocketChannel.write()方法在一个while循环中调用,确保所有数据都写入SocketChannel。
客户端设置Header参数的关键代码包括COOKIEs、content-type、connection等。为了使流量更加真实,还可以伪造User-Agent和Referer等常见头参数。
总结
1. HTTP隧道流量与正常网站访问流量差异较小,能够较好地避开安全设备的检测,结合Web命令执行或上传漏洞,可以有效进入内网。
2. 在日常运维和日志审计中,应结合行为特征和异常参数识别异常HTTP请求。
3. reGeorg的脚本特征较为明显,部分杀毒软件已能查杀,但通过二次开发加入免杀技术,仍可有效使用。
本文作者:si1ence,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。