# 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](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/dUv4Xlg8XBUzOC4F-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/dUv4Xlg8XBUzOC4F-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/cM95cZ6LK0B0p5Be-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/cM95cZ6LK0B0p5Be-image.png)

因为**不支持认证**，因此在没有其他访问控制的情况下(例如 IP 白名单、Socks 服务器仅允许访问特定地址等)，如果黑客劫持到对公网开放的 Socks 4/4a 服务器，可以为自己所用以隐蔽行迹。

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/wzB2M8W0P4wgiYMf-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/wzB2M8W0P4wgiYMf-image.png)

#####   


##### **Socks 5**

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/89e9uQD51iUfWJ0a-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/89e9uQD51iUfWJ0a-image.png)

### **Proxychains**

当配置好 Socks 服务器后，在 Linux 上，通过在要运行的程序以及参数前加入 proxychains 这个包装器以实现让任何应用的流量通过 Socks 代理进行隧道。除了 CS 自带的模块与命令，以及可以通过 CS 运行的工具 (例如 C# 工具，BOF 等)，一些外部工具例如 Impacket 也会很有作用，尤其是考虑到 Windows 没有执行 Python 的原生功能 ，因此，在我们自己的系统上使用这些工具并且将通信通过 Beacon 隧道到内部网络可以扩展我们的军火库。同时，这么做还有 OPSEC 的优势，不需要将工具和代码带到目标主机上

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/zES7XTUJasaRIUgu-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/zES7XTUJasaRIUgu-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/oIT6PmTdLgzzklFI-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/oIT6PmTdLgzzklFI-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/hFgIMtmCw6tWytKR-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/hFgIMtmCw6tWytKR-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2025-04/scaled-1680-/evsznY2n6M1QMlpq-image.png)](https://raven-medicine.com/uploads/images/gallery/2025-04/evsznY2n6M1QMlpq-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/Oz4CUvZ1Ug1UVLMP-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/Oz4CUvZ1Ug1UVLMP-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/BVuGlTusUt10m5n5-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/BVuGlTusUt10m5n5-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/GXOOuRvClH6OAtph-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/GXOOuRvClH6OAtph-image.png)

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

[![image.png](https://raven-medicine.com/uploads/images/gallery/2023-05/scaled-1680-/FZidUbw9wTSi0Qw3-image.png)](https://raven-medicine.com/uploads/images/gallery/2023-05/FZidUbw9wTSi0Qw3-image.png)