CobaltStrike插件开发官方指南 Part1
字数 1366 2025-08-26 22:11:34
CobaltStrike插件开发官方指南 Part1 - 详细教学文档
0x01 简介
什么是agscript
agscript(Aggressor Script)是CobaltStrike 3.0+内置的脚本语言,用于:
- 武装CobaltStrike客户端
- 对目标主机进行持久性控制
- 扩展或修改CobaltStrike客户端以满足个性化需求
背景与发展
- 源于Armitage的开源脚本引擎Cortana
- 由DARPA的Cyber Fast Track计划支持开发
- CobaltStrike 3.0重构时引入agscript
- 目前仍处于起步阶段,未来会持续发展
加载与使用脚本
加载方式:
- 图形界面:Cobalt Strike客户端 -> Script Manager -> Load
- 命令行:
./agscript [host] [port] [user] [password] [/path/to/script.cna]
脚本控制台:
- 访问路径:View -> Script Console
- 常用命令:
? "foo":测试Sleep predicatee println("foo");:测试Sleep statementhelp:列出所有命令load /path/to/script.cna:加载脚本ls:列出已加载脚本proff/profile/pron:性能分析相关troff/tron:功能跟踪相关unload script.cna:卸载脚本x 2 + 2:执行表达式
Sleep语言基础
agscript基于Sleep语言开发,语法类似Perl但需要语句间有空格。
变量类型
$x = "Hello World"; # 字符串
$y = 3; # 数字
$z = @(1, 2, 3, "four"); # 数组
$a = %(a => "apple", b => "bat"); # 字典
字符串插值
println("\$a is: $a and \n\$x joined with \$y is: $x $+ $y");
# 输出:$a is: %(d => 4, b => 'bat', c => 'awesome language', a => 'apple') and $x joined with $y is: Hello World3
函数定义
sub addTwoValues {
println($1 + $2);
}
addTwoValues("3", 55.0); # 输出:58.0
函数引用:
$addf = &addTwoValues;
[$addf : "3", 55.0]; # 调用方式1
[&addTwoValues : "3", 55.0]; # 调用方式2
变量作用域
- 全局变量
- 特殊变量
- 本地变量(使用
local('$x $y $z')声明)
输出函数
&println:带换行输出&printAll:输出所有参数&writeb:二进制写入&warn:带文件名和行号的输出(调试用)
交互式操作
自定义命令
command foo {
println("Hello $1");
}
# 使用:foo bar
参数处理:
$1,$2...:按空格分隔的参数$0:原始输入文本(用于包含空格的参数)
控制台文本颜色
在双引号字符串中使用转义:
\cX:设置颜色(X为颜色值)\U:添加下划线\o:重置格式
0x02 CobaltStrike客户端扩展
快捷键绑定
bind Ctrl+H {
show_message("Hello World!");
}
支持修饰符:Ctrl, Shift, Alt, Meta
弹出菜单
添加菜单项:
popup help {
item("&Homepage", { url_open("https://www.cobaltstrike.com"); });
item("&Support", { url_open("https://www.cobaltstrike.com/support"); });
separator();
item("&About", { openAboutDialog(); });
}
添加子菜单:
popup pgraph {
menu "&Layout" {
item "&Circle" { graph_layout($1, "circle"); }
menu "&Tree" {
item "&Bottom" { graph_layout($1, "tree-bottom"); }
item "&Left" { graph_layout($1, "tree-left"); }
}
}
}
覆盖已有菜单:
使用&popup_clear清除已注册项
自定义输出格式
set EVENT_SBAR_LEFT {
return "[" . tstamp(ticks()) . "] " . mynick();
}
set EVENT_SBAR_RIGHT {
return "[lag: $1]";
}
事件管理
基本事件处理:
on ready {
show_message("Ready for action!");
}
监听所有事件:
on * {
local('$handle $event $args');
$event = shift(@_);
$args = join(" ", @_);
$handle = openf(">>eventspy.txt");
writeb($handle, "[$event] $args");
closef($handle);
}
总结
本文档详细介绍了:
- agscript的基本概念和加载方式
- Sleep语言的核心语法
- CobaltStrike客户端的扩展方法
- 快捷键绑定
- 菜单定制
- 输出格式设置
- 事件处理
关键点:
- agscript基于Sleep语言,语法类似Perl但需要空格
- 通过脚本可以完全定制CobaltStrike的界面和功能
- 事件系统可以监听和响应CobaltStrike的各种状态变化
- 脚本可以通过图形界面或命令行加载
后续开发应关注CobaltStrike官方API的更新,随着agscript的发展,会有更多功能可用。