Cobalt Strike 是红队演练领域的顶级商业工具,其核心优势在于高度可定制性。主要通过Aggressor Script(文件扩展名 .cna)和Malleable C2 Profile(文件扩展名 .profile)实现。前者主要扩展客户端功能和自动化操作,后者主要重塑 Beacon 的网络通信和内存行为。
一、Aggressor Script(.cna 脚本)详解
Aggressor Script 是 Cobalt Strike 内置的脚本语言(基于 Sleep 语言),用于扩展客户端(操作员界面)的功能。它可以自动化任务、自定义菜单、修改输出格式、创建机器人等。
主要用途
- 自动化 Beacon 上线后任务(如枚举、提权)。
- 添加右键菜单、键盘快捷键。
- 高亮输出、自动记笔记、事件通知。
- 集成第三方工具(如 Rubeus、PowerView)。
- 创建虚拟红队机器人(headless agscript)。
加载方式
图形客户端:Cobalt Strike → Script Manager → Load/Unload/Reload。
自动加载:将 .cna 放入 ~/.cobaltstrike/scripts/ 目录,客户端启动时自动加载。
Headless 模式:使用 agscript 命令行工具加载脚本,实现无界面自动化。
在国内流行的 Cobalt Strike 整合包,目录通常被人为分为client和server两个文件夹,每个文件夹下都有plugins子目录,用于存放 .cna 脚本。
典型结构示例:
cs_kunkun/ ├── client/ │ └── plugins/ │ ├── CobaltStrike_CNA-main/ │ ├── CrossC2Kit/ │ ├── LSTAR-master/ │ └── CrossC2-GithubBot-2023-xx-xx.cna └── server/ ├── plugins/ │ ├── WeChatPush.cna │ ├── antiVirusCheck-master/ │ ├── CS-auto_inject-BOF-main/ │ └── CS-AutoPostChain-main/ └── tools/ ├── ExternalC2-master/ └── Malleable-C2-Randomizer-master/这种 client/server 分离的模式并非官方设计,而是打包者为了方便实战管理而人为划分。
- client/plugins中的脚本:建议在图形客户端中加载,主要用于扩展操作界面、菜单、交互式功能(如 CrossC2 生成跨平台 Beacon、LSTAR 横向移动菜单)。
- server/plugins中的脚本:建议在Team Server 同机器上使用 agscript(headless 模式)长期运行,实现“服务器端自动化”,常见功能包括:
- WeChatPush.cna:新 Beacon 上线时自动推送微信/企业微信/飞书通知。
- antiVirusCheck-master:自动检测目标杀软并调整策略。
- 自动 BOF 注入、自动横向链等后台任务。
常用配置项
.cna 脚本中“配置项”通常指脚本内部的全局变量(用$或%定义),许多社区脚本会通过对话框暴露这些变量供用户调整。以下是常见的配置项:
| 配置项变量 | 类型 | 详细解释 | 常见值/示例 | 所属脚本示例 |
|---|---|---|---|---|
$enable_initial_tasks | 布尔 | 是否启用 Beacon 首次上线自动任务 | true/false | Beacon_Initial_Tasks.cna |
$initial_commands或@autorun_commands | 数组/列表 | 上线后自动执行的命令列表 | @(“powershell whoami”, “net group ‘Domain Admins’ /domain”) | Beacon_Initial_Tasks.cna |
$HIGHLIGHT_DURATION | 整数(毫秒) | Beacon 高亮持续时间(如新上线高亮) | 5000 ~ 30000 | Highlight_Beacons.cna |
%HIGHLIGHTS | 哈希表 | 定义高亮事件及颜色(key: 事件, value: 颜色代码) | %HIGHLIGHTS = (initial => “\c4”, output => “\c3”) | Highlight_Beacons.cna |
$sleep_time/$beacon_sleep | 整数(秒) | 建议 Beacon sleep 时间(脚本可自动设置) | 60, 300, 3600 | 多种自动化脚本 |
$jitter | 整数(%) | Beacon 休眠抖动百分比 | 20 ~ 50 | 多种自动化脚本 |
$spawnto_x64/$spawnto_x86 | 字符串 | Beacon spawn 新进程路径(用于进程注入) | “%windir%\syswow64\rundll32.exe” | 进程注入相关脚本 |
$note_on_checkin | 布尔/字符串 | 上线时自动为 Beacon 添加 note(如时间戳、主机信息) | true 或自定义格式 | beaconid_note.cna |
$opsec_profiles | 布尔/列表 | 启用 OPSEC 限制,禁止高风险命令执行 | true 或命令黑名单 | OPSEC Profiles.cna |
$timestamp_format | 字符串 | 自定义 Beacon 输出时间戳格式 | “[%Y-%m-%d %H:%M:%S]” | 输出美化脚本 |
$USE_UNSAFE_ENCODEDCOMMAND_AND_IEX | 整数 | PowerShell 执行方式(0: 安全, 1: 自定义, 2: 默认) | 0 ~ 2 | PowerShell 相关脚本 |
这些变量通常在脚本头部定义,并在on ready或菜单中通过bdialog/drow_checkbox等函数创建配置对话框。
推荐社区脚本仓库:
- https://github.com/bluscreenofjeff/AggressorScripts
- https://github.com/mgeeky/cobalt-arsenal
- https://github.com/harleyQu1nn/AggressorScripts
二、Malleable C2 Profile 详解
Malleable C2 Profile 是 Cobalt Strike 的核心伪装机制,使用一种领域特定语言(DSL)重定义 Beacon 的网络流量和内存行为,使流量伪装成正常应用(如 Amazon、jQuery),规避签名检测。
主要用途
- 改变 HTTP/S URI、Header、User-Agent、参数。
- 控制 sleep/jitter、进程注入、内存混淆。
- 模拟真实 APT 流量。
常用配置项
Profile 分为全局选项、http-get、http-post、http-stager、stage、process-inject、post-ex 等块。
全局选项
| 选项 | 类型/值 | 详细解释 | 推荐值/示例 |
|---|---|---|---|
set sleeptime | 字符串(毫秒) | Beacon 默认休眠时间(check-in 间隔) | “60000” (60秒) |
set jitter | 整数(%) | 休眠时间抖动百分比,避免规律流量 | “20” ~ “50” |
set useragent | 字符串 | 默认 User-Agent | “Mozilla/5.0 (Windows NT 10.0; Win64; x64) …” |
set spawnto_x64 | 字符串 | x64 Beacon spawn 临时进程路径 | “%windir%\sysnative\rundll32.exe” |
set spawnto_x86 | 字符串 | x86 Beacon spawn 临时进程路径 | “%windir%\syswow64\rundll32.exe” |
set pipename | 字符串 | SMB 命名管道模板(#### 被随机数字替换) | “msagent_####” |
set sleep_mask | 布尔 | 启用 Beacon 休眠时内存混淆(规避内存扫描) | “true” |
set obfuscate | 布尔 | 启用内存中 Beacon 代码混淆 | “true” |
http-get / http-post / http-stager 块
| 选项(在 client/server 子块中) | 类型 | 详细解释 | 示例 |
|---|---|---|---|
set uri | 字符串(空格分隔多个) | Beacon 使用/服务器绑定的 URI 路径 | “/jquery-3.3.1.min.js /api/v1/news” |
set verb | 字符串 | HTTP 方法(GET/POST) | “GET” 或 “POST” |
header | 字符串 | 添加/移除 HTTP Header | header “Accept” “text/html,/”; |
parameter/id/output | 字符串 | 数据存放位置(parameter、header、cookie 等) | parameter “id”; header “Cookie”; |
metadata / task | 变换函数 | 数据编码/变换(如 base64、netbios、prepend/append 等) | base64; prepend “session=”; |
print | 无 | server 输出原始数据(无额外包装) | print; |
stage 块(Payload 加载器)
| 选项 | 详细解释 |
|---|---|
set cleanup | 加载后清理内存痕迹 |
set userwx | 允许 RWX 内存权限(规避某些 EDR) |
process-inject 块(进程注入)
| 选项 | 详细解释 |
|---|---|
set allocator | 注入内存分配方式(VirtualAllocEx 等) |
set startrwx/set userwx | 权限设置 |
transform-x64 / transform-x86 | 注入前 shellcode 变换(如 xor、base64) |
post-ex 块(后利用行为)
| 选项 | 详细解释 |
|---|---|
set amsi_disable | 禁用 AMSI |
set keylogger | 启用键盘记录模式 |
HTTPS 支持
https-certificate { set keystore "keystore.jks"; set password "123456"; }Malleable C2 操作指南
- 创建/编辑:新建 .profile 文件,从官方示例(如 amazon.profile)修改。
- 验证:使用
./c2lint your.profile检查语法和问题。 - 加载:启动 teamserver 时指定
./teamserver <IP> <password> /path/to/profile.profile - 查看当前:客户端 Help → Malleable C2 Profile
- 推荐资源:
- 官方参考:https://github.com/Cobalt-Strike/Malleable-C2-Profiles
- 详细指南:https://github.com/threatexpress/malleable-c2
- 随机生成器:C2concealer 等工具
三、.cna 与 Malleable C2 的区别
| 维度 | Aggressor Script (.cna) | Malleable C2 Profile (.profile) |
|---|---|---|
| 作用范围 | 客户端(UI、自动化) | Beacon Payload(网络、内存) |
| 加载时机 | 动态(Script Manager) | 静态(teamserver 启动时) |
| 配置重点 | 变量、事件钩子、菜单 | 数据变换、Header、URI、sleep 等 |