Offensive Security

通过SOCKS5隧道在被攻陷主机之间进行跳板渗透

4 min read Published Updated 745 words

一个被攻陷的内网主机如果没有可靠的跳板路径就毫无用处。基于SSH的SOCKS5隧道提供了延迟最低、工具兼容性最强的横向移动方法——然而大多数操作者配置不当,或留下足以让优秀蓝队瞬间发现的取证痕迹。在2024年,正确配置的SOCKS5代理在原始TCP吞吐量上仍然优于HTTP CONNECT代理,借助proxychains-ng和Chisel等工具,你可以通过单个SSH会话路由nmap、Metasploit和自定义脚本,而无需触碰目标防火墙规则。

为什么基于SSH的SOCKS5优于端口转发

静态本地端口转发(-L)迫使你在与每个远程服务交互之前,先将其映射到本地端口。如果你需要扫描一个/24子网,就必须创建254个单独的转发。SOCKS5动态转发(-D)通过暴露一个本地SOCKS5代理来解决这个问题,该代理通过SSH隧道将任何TCP连接路由到远程主机。该协议在RFC 1928中定义,支持认证、UDP(可选)和IPv6。实践中,你只需一个本地监听器——通常位于127.0.0.1:1080——所有支持SOCKS代理的工具都可以使用它。开销微乎其微:SSH加密可能增加5-10%的CPU负载,但延迟远低于VPN或通过Web Shell的反向端口转发。

在Linux立足点上设置SOCKS5监听器

假设你已获得目标网络内一台Linux主机的Shell。建立跳板最快的方式是在被攻陷主机上运行ssh -D 1080 -N -f user@your-listener,连接回你的攻击机。但这需要出站SSH访问,可能被阻止。相反,从你的攻击机向被攻陷主机发起动态转发:

ssh -D 1080 -N -f compromised_user@compromised_host

这会在你的本地1080端口上打开一个SOCKS5代理。现在配置proxychains-ng(/etc/proxychains.conf)使用该代理:

socks5 127.0.0.1 1080

然后通过隧道运行任何TCP工具:

proxychains4 nmap -sT -Pn -p 445,3389 10.10.10.0/24

注意,nmap需要-sT(TCP连接扫描),因为SOCKS5不支持原始SYN包。对于Metasploit,设置setg Proxies socks5:127.0.0.1:1080后,所有辅助和漏洞利用模块都会通过跳板路由。这种技术在Hack The Box或Proving Grounds等CTF环境中非常有效,目标通常是到达第二个子网。

Chisel、Ligolo-ng及其权衡

当SSH不可用时——例如目标运行Windows或没有SSH服务器——替代隧道工具可以填补空白。Chisel使用基于Go的客户端和服务器,通过HTTP/HTTPS隧道传输TCP。在你的攻击机上运行服务器:chisel server -p 8000 --reverse。在被攻陷主机上运行客户端:chisel client your_ip:8000 R:socks。这会在服务器端提供一个SOCKS5监听器。Chisel速度快,能穿透严格的出站过滤器,但其流量默认未加密——如果注重操作安全,请用TLS包装或使用SSH。

Ligolo-ng采用不同方法:它使用TUN/TAP接口在第3层创建网络隧道。与SOCKS5不同,你可以将整个IP范围通过跳板路由。这意味着你可以直接运行nmap -sS(SYN扫描)而无需proxychains。代价是管理开销:两端都需要root权限,并且隧道设置需要在攻击机上添加路由。在双方都由你控制的CTF中,Ligolo-ng更快。在实际渗透测试中,SOCKS5方法更具可移植性,因为它无需在跳板主机上提升权限即可工作。

攻击者留下的检测信号

每种跳板方法都会留下痕迹。SSH动态转发会在被攻陷主机上创建一个监听套接字——ss -tlnp显示一个绑定到127.0.0.1:1080ssh进程。蓝队可以将此与指向外部IP的出站SSH连接关联起来。Chisel的客户端进程默认名为chisel——通过进程监控很容易检测。Ligolo-ng需要一个TUN设备(ip link show),这在服务器上是不正常的。

更糟的是,许多操作者忘记清理。SSH会话会一直存在,直到远程主机终止它或连接断开。Proxychains不会留下本地痕迹,但nmap流量本身——从通常不进行扫描的主机发出的异常端口扫描——会触发IDS警报。最常见的错误是重复使用默认的SOCKS5端口1080。将其改为高位临时端口(例如ssh -D 53421),并为proxychains配置设置别名,以避免留下默认配置文件。在CTF中,这些都不重要。但在实际渗透测试中,这些信号正是你被抓住的原因。