多重跳板
众所周知,企业网络的边界所在的主机,往往具有多个网络适配器,1个1 个面向公共网络,至少1个 1 个面向企业内部网络,因此在我们进入边界之后需要以此主机作为跳板,继而访问内部网络。然而不过,即便在企业内部也可以有多个网段,因此也会有存在着多个适配器的主机。
考虑以下这种述可能的情况:
1:面向公网的主机 WEB01具Web01 有着两张网卡,一张面向公网,一张的网段是 192.168.172.16.1.1/24。24。
2:内网中的一台主机 Vault01Uat01 也具有着两张网卡,一张的网段是 192.168.172.16.1.1/24,24,另一张为 10.10.10.1/24。24。
除此之外,还有主机可以连接至更深的能存在其他内网网段中。
在Web01 的 Beacon 上运行 socks 1080,这种情况下,使得我们可以通过什么样的方法从C2 服务器Socks 代理访问到 172.16.1.1/24 网段的主机。那么如果我们想访问 10.10.10.1/24 网段甚至,该如何利用 C2 内置功能以及其他更深工具实现呢?
虽然在我们的靶场里,不存在第 2 个内网网段以直接供我们参考,但我们可以构造这样一个网络环境:我们的团队服务器都是搭建在 VPS 上的,并且为了保护团队服务器的安全性,暴露最少的端口在公网上。因为在任意一个 Beacon 上运行了 socks 1080 的命令,因此团队服务器是一个 Socks 服务器。但如果想从我们的 VM 上运行工具,那么即跨越了 2 层次网络:个人 VM 到团队服务器,团队服务器到内网主机。
以我个人使用配置为例,我的 VM 内网网段是 192.168.0.1/24,我的 VPS 的内网网段是 172.16.5.1/24,而靶场的内网网段是 172.16.1.1/24。那么,我应该怎么做使得可以在个人主机的 VM 上使用工具并最终将流量隧道至靶场的内网主机呢?我们可以充分利用工具、C2特性、以及计算机网络知识。
Socks 链
Socks + 端口转发
多重 Socks
我们在 C2 主机上设置了第一个 SOCKS 代理 127.0.0.1:1080
在内网主机 Vault01 上设置第二个 SOCKS代理 10.10.10.10:9050
修改 /etc/proxychains4.conf 文件的代理链
[ProxyList]
socks5 127.0.0.1 1080
socks5 10.10.10.10 9050
C2特性
TCP Beacon
SMB Beacon
Pivot Beacon
一些 C2 框架的内置功能可以让代理变得更加得心应手,例如 CobaltStrike 的 P2P 监听器,有 TCP 监听器、SMB 监听器、 Pivot 监听器。TCP、SMB 监听器与 Pivot 监听器的方向相反,但是对于我们渗透进入更深的网段的帮助都是同样有效的。
P2P监听器允许Beacon之间将它们的通信连接起来形成一条链,在Cobalt Strike中分为TCP与SMB。连接 Beacon 在跳板、特权提升、以及任何需要额外生成一个新的Beacon的时候特别有用。如果手动在受害主机上执行P2P载荷,那么除非使用link或者connect命令,否则不会出现在UI上。
实际上,存在另外一种P2P监听器。跳板监听器与TCP监听器的工作原理相反。当生成一个TCP监听器的Beacon,Beacon作为TCP服务器并且等待连接进来的现存Beacon,即TCP客户端。跳板监听器并不在监听器菜单中创建,而是绑定在个体Beacon。现存的Beacon会绑定一个端口并且监听前来的连接,即作为TCP服务器,而使用了跳板监听器的Beacon载荷则是客户端。
为什么这很有用呢?在一些场合例如GPO的利用,我们不知道载荷何时被执行然后再使用connect命令进行连接,而当我们使用跳板监听器的话,新的Beacon会立刻显示而不用手动连接。
系统特性
WinRM