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


image.png


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

image.png

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

image.png