Skip to main content

Socks代理

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

SOCKS

Socks 代表“Socket Secure”,它是一种通过代理服务器在客户端和服务器之间路由网络数据包的 Internet 协议。Socks 5 是该协议的最新版本,之前则是 Socks 4 和 Socks 4a。

Socks 的主要目的是有如下方面:
绕过网络限制:例如,如果特定网站或服务在我们的网络中被阻止,可以使用 Socks 代理来绕过限制。
隐私和匿名:Socks 可以隐藏使用者的 IP 地址,使网站或服务更难跟踪使用者的在线活动。
作为红队与渗透测试人员,我们在行动中用于访问内部网络中的资源。Socks 的运行级别低于 HTTP 代理,因为它可以处理 TCP 以及 UDP 流量,不像 HTTP 代理那样仅限于 HTTP 流量。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

我们查看一下 Shodan 所爬到的公开 Socks 4a 服务器:

image.png

因为不支持认证,因此在没有其他访问控制的情况下(例如 IP 白名单、Socks 服务器仅允许访问特定地址等),如果黑客劫持到对公网开放的 Socks 4/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 服务器后,在 Linux 上,通过在要运行的程序以及参数前加入 proxychains 这个包装器以实现让任何应用的流量通过 Socks 代理进行隧道。除了 CS 自带的模块与命令,以及可以通过 CS 运行的工具 (例如 C# 工具,BOF 等),一些外部工具例如 Impacket 也会很有作用,尤其是考虑到 Windows 没有执行 Python 的原生功能 ,因此,在我们自己的系统上使用这些工具并且将通信通过 Beacon 隧道到内部网络可以扩展我们的军火库。同时,这么做还有 OPSEC 的优势,不需要将工具和代码带到目标主机上

在 Beacon交互中,执行命令 socks 1080,这会在团队服务器上开放 1080 端口作为 Socks 4a 服务器。

image.png

当然了,在使用 proxychains 之前,我们需要修改一下 /etc/proxychains.conf 配置文件,配置 Socks 服务器以及端口。在团队服务器上,配置 127.0.0.1:1080 即可,Socks 版本根据实际情况填写。

image.png

若想使用 proxychains 来隧道 nmap 流量实现对于内网的扫描,命令应该是 proxychains nmap -n -Pn -sT -p-。这里我们用的是 TCP 扫描且跳过了主机发现,因为不是所有流量都可以被隧道,ICMPSYN 扫描就不可以。

image.png


在 Windows 端,我们可以使用代理客户端例如 Proxifier (https://www.proxifier.com/) 来隧道应用的流量。打开 Proxifier,前往 Profile -> Proxy Servers,添加一个新的代理条目,将 IP 与端口指向团队服务器的 Socks 服务,即 <你们的VPS IP>:1080
然后,在 Profile -> Profixication Rules 中可以自定义规则,例如只有指定的应用发送到指定网段的流量经过代理。

image.png

指定 RDP 客户端的流量经过 Socks 代理

image.png

然后我们便能在 Windows 系统上通过 RDP 客户端访问内网中的 File01 了。

image.png


我们还可以使用浏览器作为 Socks 客户端。火狐浏览器加上 FoxyProxy 插件是使用浏览器访问内部网络中 Web 应用的理想方案。我们给 FoxyProxy 添加一个新的实体,代理类型选择 Socks 4,然后输入团队服务器的 Socks 代理的 IP 与端口,就可以浏览网络内部的应用了。

image.png

例如,我们可以通过 Socks 代理访问 Dc03 上的 ADCS Web 注册接口。

image.png