Cobalt Strike VPN 内网穿透
需求背景
- 网上没找到太多和 CS VPN 有关的文章。
- 在目标上部署了 CS VPN 后,只有 CS 主控(teamserver) 可以访问目标内网,异地 team 成员无法访问。
关于 CS VPN
CS 这个 VPN 功能很垃圾,除非必要不然别用。
VPN 部署在 UDP 等协议下,目标需要能够直接回连主控 IP,会导致暴露主控。
不想暴露主控的 IP 就设置 VPN 接口协议为 TCP(Bind) ,此时会从 Beacon 转发,但是会将 Sleep Time 设为 0,否则连接质量会很差。
解决方案
通过在 CS 主控服务器上部署 WireGuard VPN 服务,让 team 成员客户端接入 WG VPN 网络,并配置流量转发,以实现 team 成员访问目标内网的能力。
对于 VPN 本身的安全性和稳定性问题暂时不讨论(我也没辙)。
如果有更好的解决方案,欢迎提 issue。
基础设施
测试环境
CS
和WG
服务端装在同一云服务器上- 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 |
|
正确配置后,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 |
|
开启 iptables 转发:
1 |
|
CS 主控服务器 iptables:
配置 Team 成员以访问目标内网
先关闭 team
成员设备上的 WG VPN
客户端:
1 |
|
根据前文信息,我们目标内网为 192.168.163.0/24
,那么可以修改 team
成员设备的 WG VPN
客户端配置文件:
1 |
|
完整内容如下:
1 |
|
这样设置的意思是该客户端所有发往 192.168.163.0/24
的流量都从 VPN 隧道传输,而且不影响成员主机正常访问互联网。
而由于我们的 WG 服务端
和 CS 主控
是同一设备,CS 主控
可以访问目标内网,就可以让 team 成员通过 WG 服务端
进入目标内网。
启用 team
成员设备上的 WG VPN
客户端:
1 |
|
启用客户端后,会自动创建虚拟网卡,自动配置 ip 和路由。
team 成员 WireGuard 虚拟网卡信息:
team 成员 WireGuard 虚拟网卡路由:
team 成员通过 WG VPN
访问目标靶机内网:
team 成员通过漏洞利用,攻击靶机内网的其他设备: