Cobalt Strike VPN 内网穿透

需求背景

  1. 网上没找到太多和 CS VPN 有关的文章。
  2. 在目标上部署了 CS VPN 后,只有 CS 主控(teamserver) 可以访问目标内网,异地 team 成员无法访问。

关于 CS VPN

  1. CS 这个 VPN 功能很垃圾,除非必要不然别用。

  2. VPN 部署在 UDP 等协议下,目标需要能够直接回连主控 IP,会导致暴露主控。

  3. 不想暴露主控的 IP 就设置 VPN 接口协议为 TCP(Bind) ,此时会从 Beacon 转发,但是会将 Sleep Time 设为 0,否则连接质量会很差。

解决方案

代理拓扑

通过在 CS 主控服务器上部署 WireGuard VPN 服务,让 team 成员客户端接入 WG VPN 网络,并配置流量转发,以实现 team 成员访问目标内网的能力。

对于 VPN 本身的安全性和稳定性问题暂时不讨论(我也没辙)。

如果有更好的解决方案,欢迎提 issue。

基础设施

测试环境

  • CSWG 服务端装在同一云服务器上
  • 3 台靶机组网,位于台式机上
  • 1 台攻击机,位于笔记本电脑
  • 攻击机和靶机环境物理隔绝
  • 拥有某一台靶机的 CS Beacon 会话
  • 在该靶机上部署了 CS VPN

靶机情况

靶机内网

根据参考资料以及拓扑图,我们需要搭建两个 VPN 网络:

  • CS 主控 为核心的:靶机 Beacon -> CS 主控 VPN 网络,靶机为客户端。
  • WG 服务 为核心的:team 成员 -> WG VPN 网络,team成员 为客户端。
  • CS 主控WG 服务 位于同一公网云主机。

Cobalt Strike VPN 部署

在 CS 客户端界面即可操作。

通过 CS 在目标主机部署 VPN 客户端后,还需要在 CS 主控(teamserver)上启用虚拟网卡并配置 IP 地址和网关信息。

1
2
3
4
# 启用虚拟网卡,记住刚才创建的网卡名称,不确定就用 ip a 命令查看
sudo ip link set phear1 up
# 设置 IP 和掩码
sudo ip addr add 192.168.163.211/24 dev phear1

正确配置后,CS 主控(teamserver)应该能访问目标内网。

CS VPN 接口:

CS 主控服务器虚拟网卡:

CS 主控服务器路由:

CS 主控服务器成功通过 CS VPN 访问靶机内网其他主机:

WireGuard VPN 部署

WG 服务端部署参考:https://yangpin.link/archives/1601.html

注意:为了让 WG VPN 成员能够通过 WG VPN 服务器访问其他网段,需要开启转发

其中,我们根据实际环境要确定几个信息:

  • WG 服务器公网监听所使用的网卡:eth0
  • WG 服务器公网监听端口:51820
  • WG 服务器 VPN 服务虚拟网卡:wg0
  • VPN 虚拟网段:10.252.1.0/24

开启 IP 转发:

1
2
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

开启 iptables 转发:

1
iptables -t nat -A POSTROUTING -s 10.252.1.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; 

CS 主控服务器 iptables:

配置 Team 成员以访问目标内网

先关闭 team 成员设备上的 WG VPN 客户端:

1
sudo wg-quick down /path/to/config

根据前文信息,我们目标内网为 192.168.163.0/24,那么可以修改 team 成员设备的 WG VPN 客户端配置文件:

1
AllowedIPs = 192.168.163.0/24

完整内容如下:

1
2
3
4
5
6
7
8
9
10
11
[Interface]
Address = 10.252.1.1/32
PrivateKey = 6DhDQcQOwFOW80muHxxxxxxxxxxxxxxxxxxx
MTU = 1450

[Peer]
PublicKey = 3Nr7DWnVmRwsl+yAF7HPMxxxxxxxxxxxxxx
PresharedKey = 9+HxR/pQvH0Srv/6Iuzxxxxxxxxxxxxxxxx
AllowedIPs = 192.168.163.0/24
Endpoint = 1.2.3.4:51820
PersistentKeepalive = 15

这样设置的意思是该客户端所有发往 192.168.163.0/24 的流量都从 VPN 隧道传输,而且不影响成员主机正常访问互联网。

而由于我们的 WG 服务端CS 主控 是同一设备,CS 主控 可以访问目标内网,就可以让 team 成员通过 WG 服务端 进入目标内网。

启用 team 成员设备上的 WG VPN 客户端:

1
sudo wg-quick up /path/to/config

启用客户端后,会自动创建虚拟网卡,自动配置 ip 和路由。

team 成员 WireGuard 虚拟网卡信息:

team 成员 WireGuard 虚拟网卡路由:

team 成员通过 WG VPN 访问目标靶机内网:

team 成员通过漏洞利用,攻击靶机内网的其他设备:


Cobalt Strike VPN 内网穿透
https://estamelgg.github.io/SecLabBlog/2024/08/24/cobaltstrike_vpn/
作者
Estamel GG
发布于
2024年8月24日
许可协议