Ledger 是一个 Cobalt Strike 攻击者脚本,用于追踪每次交战期间所做的操作变更。您启用的每个服务、打开的每个防火墙规则、创建的每个账户或修改的每个注册表项,都会被记录并附有风险评分、操作者归属和清理状态。在交战结束时,您将获得一份完整的审计追踪,显示哪些内容已被更改,哪些仍需清理。
红队交战会留下痕迹。服务被启用,账户被创建,防火墙规则被打开,注册表项被修改。如果没有结构化的日志,这些很容易被遗忘——尤其是在长时间交战或多个操作者同时工作时。
Ledger 为您提供一个运行日志,包含:
ledger.cna 复制到您的 Cobalt Strike 脚本目录中。ledger.cna。dirty 别名。所有命令均通过信标控制台使用 dirty 别名运行。
dirty <CATEGORY> <command> [comment] [score]
comment 和 score 可选。如果省略,则根据类别使用合理的默认值。
dirty RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty DEFENDER "add-exclusion C:\windows\temp" "Payload staging" 8
dirty GROUP "net group 'Domain Admins' svc_backup /add /domain"
dirty USER "net user backdoor P@ssw0rd! /add"
dirty SCHEDULED_TASK "schtasks /create /tn updater /tr C:\temp\beacon.exe /sc onlogon"

dirty exec <CATEGORY> <command> [comment] [score]
记录变更并立即在信标上执行该命令——一步完成,无需两步。
dirty exec RPC "sql-enablerpc lon-db-1 lon-db-2"
dirty exec USER "net user backdoor P@ssw0rd! /add"
dirty exec DEFENDER "sc config WinDefend start= disabled"
dirty exec FIREWALL "netsh advfirewall set allprofiles state off"
dirty exec 的限制
dirty exec 内部使用 brun,它直接执行二进制文件,而不使用 cmd.exe /c 包装。这意味着:
net、sc、reg、nltest、whoami、ipconfig 等。sleep、cd、ls、pwd、download、upload、execute-assembly、inject 等。对于这些命令,请正常运行信标命令,并单独使用 dirty <CATEGORY> <command> 进行记录。cmd.exe 的 shell 内置命令:dir、echo、set、type、管道(|)、重定向(>)等。请使用 dirty CATEGORY "shell <command>" 手动记录这些命令。.cna 文件加载的自定义 BOF 别名无法通过 dirty exec 正确调度。dirty show
dirty show DEFENDER
dirty show DESKTOP-ABC123
显示所有记录的条目。可选过滤器会匹配命令、注释、类别、主机名和用户名。

dirty score
显示每台主机的风险摘要,包括总分、待清理计数和可视化条形图。主机按分数从高到低排序。
dirty clean <id>
dirty clean all
dirty clean host <hostname>
主机名匹配不区分大小写,并支持部分匹配——DESKTOP 可匹配 DESKTOP-FGN4LPG。
dirty export text
dirty export json
dirty export text DEFENDER
dirty export json DESKTOP-ABC
导出内容将写入包含 ledger.cna 的目录,并在顶部显示主机分数摘要,随后是完整变更日志。Ledger 菜单栏按钮可直接触发未过滤的导出。
dirty help
| 类别 | 默认分数 | 默认注释 |
|---|---|---|
| REGISTRY | 2 | 注册表已修改 |
| FIREWALL | 3 | 防火墙规则已修改 |
| SERVICE | 3 | 服务配置已更改 |
| RPC | 4 | RPC 已修改 |
| WINRM | 4 | WinRM 已启用 |
| SMB | 4 | SMB 签名已更改 |
| DCOM | 4 | DCOM 已启用 |
| RDP | 5 | RDP 已启用 |
| SCHEDULED_TASK | 5 | 计划任务已创建 |
| DEFENDER | 6 | Defender 配置已更改 |
| GROUP | 6 | 组成员身份已修改 |
| USER | 7 | 用户账户已修改 |
| ACL | 8 | ACL 已修改 |
| SPN | 8 | SPN 已修改 |
| DOMAIN_ADMIN | 9 | 域管理员组已修改 |
| TRUST | 9 | 信任关系已修改 |
任何未列出的类别也会被接受,默认分数为 3。
每条记录
| 标签 | 分数 |
|---|---|
| 低 | < 5 |
| 中 | 5 – 7 |
| 高 | 8+ |
合计(每台主机)
| 标签 | 分数 |
|---|---|
| 低 | < 5 |
| 中 | 5 – 9 |
| 高 | 10 – 14 |
| 严重 | 15+ |
当信标变为死信标且仍有未清理的 Ledger 条目挂起时,Ledger 会向所有已连接操作者可见的 Cobalt Strike 事件日志中发出红色警告:

每个信标仅触发一次警告,如果信标恢复并再次签入,警告会自动重置。链接(子)信标和由操作者明确终止的信标会被排除。警告时间会随信标的休眠设置而缩放——60 秒休眠约 2 分钟后触发,5 分钟休眠约 10 分钟后触发。
LEDGER EXPORT -- 2026-05-21 19:50:34
HOST SCORE SUMMARY
================================================================================
主机 风险 分数 待清理 条形图
--------------------------------------------------------------------------------
DESKTOP-RLP4KBJ (sally *) 严重 +21 2 pend [##########]
DESKTOP-FGN4LPG (Admin) 严重 +18 0 pend [#########]
================================================================================
CHANGE LOG
================================================================================
[000002] 2026-05-21 19:22:56 | neo | GROUP | 中 +6 | 已清理
主机 : DESKTOP-FGN4LPG
用户 : Admin
进程 : HTTP Listener_x64.exe (PID 4716)
命令 : net group 'Domain Admins' svc_backup /add /domain
注释 : 将 svc_backup 添加到 Domain Admins 以进行横向移动
{
"exported": "2026-05-21 19:53:19",
"host_summary": [
{
"host": "DESKTOP-FGN4LPG (Admin)",
"risk": "CRITICAL",
"score": 18,
"pending": 0
},
{
"host": "DESKTOP-RLP4KBJ (sally *)",
"risk": "CRITICAL",
"score": 21,
"pending": 2
}
],
"entries": [
{
"id": "000004",
"timestamp": "2026-05-21 19:31:36",
"operator": "neo",
"beacon_id": "1607712302",
"computer": "DESKTOP-RLP4KBJ",
"beacon_user": "sally *",
"beacon_process": "HTTP Listener_x64.exe (PID 11540)",
"functionality": "USER",
"command": "net user svc_backup P@ssw0rd123! /add /domain",
"comment": "Created service account for persistence",
"score": 7,
"risk": "MEDIUM",
"cleaned": false
}
每条记录和清理的条目都会通过 elog 广播到 Cobalt Strike 事件日志,因此所有已连接的操作者都能实时看到彼此的更改。日志在会话期间存在于团队服务器内存中。
ledger.cna 的目录。dirty USER "net user ..." "my comment" 9 —— 最后一个参数设置显式分数。