Skip to main content

Socks代理

在之前的内容中,我们已经使用了一些代理与跳板的技术,用于访问靶场内部的主机,这是因为除了边界主机 Web01 以及 Web02 外,我们不能直接访问到其他主机。为了推动攻击的流程,我们只是讲了特定命令,例如 socks 的用法,但并没有阐述其概念、原理,以及为什么我们需要它。尽管这些也并不是晦涩深奥的话题,但这个章节我们正式讨论各种不同的代理与跳板技术,以在内部灵活地漫游。

SOCKS

 

Socks 版本

Socks 4

Socks 4 是第一个被广泛适用的 SOCKS 协议版本,它支持 TCP 协议,适用于浏览网站、文件传输等,但不支持 UDP 协议,即用于流式传输 媒体、VoIP 电话等。Socks4 也不支持身份验证,因此任何客户端都可以使用代理,从而带来潜在的安全问题。

Socks 4a

Socks 4a 是一个支持主机名解析的扩展,这意味着代理可以解析域名,而不仅仅是 IP 地址,这有助于提高匿名性,因为 DNS 请求可以通过代理转发,而不是由客户端的本地 DNS 服务器处理。与 Socks 4 一样,Socks 4a 不支持身份验证。在 CS 4.7 版本之前,socks 命令内置的就是 Socks 4a 版本。

image.png

Socks 5

Socks 5 同时支持 TCP 与 UDP 协议,使其适用于不同类型的网络流量。Socks 5 还包括对各种身份验证机制的支持,增强了代理使用的安全性。Socks 5 也像 Socks 4a 一样支持 IPv6 地址和主机名解析。Socks5 比以前的版本具有更多功能,但也因此可能需要更多资源,以及更复杂的客户端软件才能充分利用其功能。总的来说,Socks5 是该协议最先进、最灵活的版本,是如今大多数应用程序的首选。从 CS 4.7 版本开始,支持了 Socks 5。

image.png

Proxychains

 

SOCKS 代理用于通过代理来交换服务端与客户端的数据包。代理的普遍实现是在 Web 代理中,浏览器连接到代理,中继发送到目标网站的请求以及返回的响应。我们可以将这样的方法用于 C2 之中,使得C2可以将外部工具隧道到内部网络
这点在我们想利用基于 Linux 的工具的时候尤其有用,因为 Windows 没有执行 Python 的原生功能。因此,在我们自己的系统上使用这些工具并且将通信通过 Beacon 隧道到内部网络可以扩展我们的军火库。同时,这么做还有 OPSEC 的优势,不需要将工具和代码带到目标主机上

在 Beacon交互中,执行命令 socks 1080。如果已经有了一条Beacon链,那么我们在该链上的任意一Beacon上执行该命令都可以,因为Beacon是代理感知的。于是,TS主机的1080端口开启了监听,该端口绑定到了所有网卡上。


不是很多应用可以自身使用 socks 代理,因为我们可以使用proxychains。这是一个包装器,通过在执行的工具最前面加入proxychains,可以将任何应用的流量通过socks代理进行隧道

当然,我们需要修改一下 /etc/proxychains.conf 配置文件,使得端口匹配
通过 proxychains 隧道工具,命令是这样的:proxychains [tool] [args]
例如,通过 proxychains 隧道 nmap 的流量,命令应该这样
proxychains nmap -n -Pn -sT -p-

image.png


需要记住的是,不是所有流量都可以被隧道,ICMP与SYN扫描就不可以。因为,我们要跳过主机扫描,并且指定TCP扫描端口


我们可以通过在Windows上运行代理客户端例如Proxifier来隧道GUI应用
打开Proxifier,前往Profile -> Proxy Servers,添加一个新的代理实体,将IP与端口指向CS的SOCKS代理,即10.10.5.120:1080
然后,在Profile -> Profixication Rules中可以自定义规则,例如只有指定的应用发送到指定网段的流量经过代理

image.png



火狐浏览器加上FoxyProxy插件是将浏览器转向到网络中的理想方案,用于浏览内部的web应用
添加一个新的实体,代理类型选择SOCKS4,然后输入CS的SOCKS代理的端口以及IP
然后就可以浏览网络内部的应用了

image.png

image.png