记 Cobalt Strike 基础使用
启动服务器
1 | ./teamserver <服务端ip> <CS服务端密码> |
创建监听器
上线客户端后,首先创建一个Beacon
可以看到这里有好几个类型,当然最常见的就是HTTP Beacon
Beacon
是一种核心的远程控制组件,是植入目标主机后用于维持访问、执行命令、上传下载文件、横向移动等操作的“后门”,我们可以以此为载荷执行命令、上传下载文件、键盘记录、屏幕截图、横向移动、提权等正如上图,其支持多种协议,用于不同的场景下
🔄
Beacon
的通信模式
- 异步通信:每隔一段时间(由 Sleep 设置)主动向 C2 请求任务并回传结果
- 交互式通信:实时响应命令(Sleep 设置为 0),适合快速操作但隐蔽性较差
External C2
外部控制通道:自定义通信协议,将 Beacon 与 Team Server 连接起来(使用 Python、C、Go 等语言编写自己的第三方控制器和客户端)
Foreign HTTP/HTTPS
外部 Beacon 会话:已经通过其他工具植入了 Payload,但想用 Cobalt Strike 的 GUI 来控制它,使用端口转发、SSH 隧道或代理,将外部 Beacon 的通信流量导入 Cobalt Strike
参数解释(以HTTP Beacon
为例):
- HTTP Hosts:用于指定 C2 通信的域名或 IP 地址。可以添加多个,支持轮询策略
- Host Rotation Strategy:主机轮换策略,
round-robin
表示 Beacon 会轮流使用多个 HTTP Host 进行通信 - Max Retry Strategy:最大重试策略,
none
表示 Beacon 不会重试连接失败的主机 - HTTP Host (Stager):初始阶段使用的主机地址
设置攻击载荷
之后就是去生成具体payload使其运行在目标主机中,来连接我们的监听器
HTML Application (HTA文档)
生成一个 HTML 应用程序(.hta 文件),嵌入恶意脚本,执行后可植入 Beacon。适用于钓鱼攻击,通过网页或邮件诱导用户点击
- Executable:HTA 文件中嵌入一个可执行文件,但容易被杀软拦截
- PowerShell:HTA 文件中嵌入 PowerShell 脚本,适合绕过杀软
- VBA:HTA 文件中嵌入 VBA 脚本,适合伪装成 Office 攻击
1 | <script language="VBScript"> |
可以看到内嵌了 VBScript 代码,并调用 Wscript.Shell
对象来运行一个 PowerShell 命令,解码后还要解压缩一个 Gzip 压缩过的数据流,并通过IEX
直接在内存中执行代码
Office Marce (Office宏)
This package generates a VBA macro that you may embed into a Microsoft Word or Excel document. This attack works in x86 and x64 Office on Windows.
此软件包会生成一个 VBA 宏,您可以将其嵌入到 Microsoft Word 或 Excel 文档中。此攻击适用于 Windows 上的 x86 和 x64 Office。
宏是一种自动化工具,它可以在软件中执行一系列预定义的操作,通常用于简化重复性任务,使用 VBA(Visual Basic for Applications) 编程语言编写
将VBA脚本代码植入到Office文档中,用户无感知打开的情况下,执行Office文档中内嵌的恶意代码
创建宏,将代码复制上去后保存
不过现代Office中默认禁用宏,诱导受害者也许需要一些社会工程学的手法
Payload生成器&有效载荷生成器
以python为例,其生成后只是一个十六进制格式的 shellcode,需要加载进内存中执行,便于进行免杀
初始 shellcode 很小,执行后会连接 C2 服务器下载完整 Beacon
还可以看到另一个选项是有效载荷生成器 (stageless),其shellcode中已经包含完整 Beacon,不需要再连接 C2 下载
根据使用场景进行选择,依赖网络连接或者是避免防火墙等则选择前者体积小的;离线执行或持久化选择后者
Windows可执行程序
同样也有stageless版本的,但落地一定会被杀软爹抬走,具体环境具体分析
Exit Function:决定了Beacon执行完毕后如何退出内存
Process:Beacon 退出时会终止整个进程。适合独立运行的 EXE 文件,但如果嵌入到其他程序中,可能会导致目标程序崩溃
Thread:Beacon 退出时只终止当前线程。适合注入到其他进程或作为 DLL 执行,不影响宿主程序
System Call:系统调用,从一定程度上绕过用户态的API调用,一定程度上避免EDR的检测
None:标准 Windows API
Direct:直接系统调用
Indirect:间接系统调用,通过中间跳板或混淆方式调用 syscall
不过需要注意的是,并不是所有的操作都能够进行系统调用,一般在自己的进程空间中操作都没什么问题
至于其它的操作,也要设定场景下才能利用,这里只是记录基础使用方法。最后想说的是,Cobalt Strike更多是为团队协作而生,其中一些操作也可以通过其它方式去实现,当然个人认为也无需完全过于依赖,配合其它手段食用也许更佳