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 是第一个被广泛适用的 SOCKSSocks 协议版本,它支持 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


当配置好

SOCKSSocks 服务器后,在 Linux 上,通过在要运行的程序以及参数前加入 proxychains 这个包装器以实现让任何应用的流量通过 Socks 代理用于进行隧道。除了 CS 自带的模块与命令,以及可以通过代理来交换服务端与客户端 CS 运行数据包。代理的普遍实现是在工具 Web(例如 代理中C# 工具浏览器连接到代理BOF 等)中继发送到目标网站的请求以及返回的响应。我们可以将这样的方法用于 C2 之中,使得C2可以将一些外部工具隧道到内部网络
这点在我们想利例如 Impacket 也会很有作基于 Linux 的工具的时候尤其有用,因为是考虑到 Windows 没有执行 Python 的原生功能 ,因此,在我们自己的系统上使用这些工具并且将通信通过 Beacon 隧道到内部网络可以扩展我们的军火库。同时,这么做还有 OPSEC 的优势,不需要将工具和代码带到目标主机上

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


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

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

image.png

若想使用 proxychains 隧道工具,命令是这样的:proxychains [tool] [args]
例如,通过 proxychains 隧道 nmap 流量实现对于内网的扫描,命令应该这样
proxychains nmap -n -Pn -sT -p-

image.png


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

image.png


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

image.png



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

image.pngimage.png

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

image.pngimage.png