// 红队渗透 · 2025-12-29

Cobalt Strike 中的 Aggressor Script(.cna)与 Malleable C2 Profile 详解

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 等函数创建配置对话框。

推荐社区脚本仓库:

二、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 操作指南

  1. 创建/编辑:新建 .profile 文件,从官方示例(如 amazon.profile)修改。
  2. 验证:使用 ./c2lint your.profile 检查语法和问题。
  3. 加载:启动 teamserver 时指定 ./teamserver <IP> <password> /path/to/profile.profile
  4. 查看当前:客户端 Help → Malleable C2 Profile
  5. 推荐资源:

三、.cna 与 Malleable C2 的区别

维度 Aggressor Script (.cna) Malleable C2 Profile (.profile)
作用范围 客户端(UI、自动化) Beacon Payload(网络、内存)
加载时机 动态(Script Manager) 静态(teamserver 启动时)
配置重点 变量、事件钩子、菜单 数据变换、Header、URI、sleep 等

原文 https://blog.csdn.net/2301_79518550/article/details/156392396