[toc]

Aggressor Script官方文档翻译-2.Cobalt Strike

Cobalt Strike 客户端

Aggressor 脚本引擎是Cobalt Strike的集成特性(the glue feature). 大多数Cobalt Strike对话框和特性都是作为向Aggressor 脚本引擎公开某些接口的独立模块编写的。

Cobalt Strike中内置了一个默认的脚本, default.cna, 这个脚本定义了Cobalt Strike的工具栏按钮,弹出式菜单,它还为大多数Cobalt Strike事件格式化输出。

本章将向您展示这些功能如何工作,并使您能够按照您的需求来塑造Cobalt Strike客户端。

The default.cna script

快捷键

脚本可以创建快捷键,使用bind关键字绑定快捷键。这个例子展示了当Ctrl和H同时按下时,在对话框中显示“**Hello World!**”。

1
2
3
bind Ctrl+H {
show_message("Hello World!");
}

效果如下:

image-20210709154617398

快捷键可以是任何ASCII字符或特殊键。快捷键可以有一个或多个修饰符应用于它们,例如:Ctrl, Shift, Alt,或Meta。脚本可以指定修饰符+键。

弹出式菜单

脚本也可以添加到Cobalt Strike的菜单结构或重新定义它。popup关键字为popup钩子构建菜单层次。

下面是定义Cobalt Strike帮助菜单的代码:

1
2
3
4
5
6
7
8
9
popup help {
item("&Homepage", { url_open("https://www.cobaltstrike.com/"); });
item("&Support", { url_open("https://www.cobaltstrike.com/support"); });
item("&Arsenal", { url_open("https://www.cobaltstrike.com/scripts"); });
separator(); # 分隔线
item("&System Information", { openSystemInformationDialog(); });
separator();
item("&About", { openAboutDialog(); });
}

效果如下:

image-20210709155141293

该脚本与Help popup钩子挂钩,并定义了几个菜单项。菜单项名称中的&是它的快捷键(keyboard accelerator)。当用户单击每个项时,与它相关联的代码块将执行。

脚本也可以定义带有子元素的菜单。关键字menu定义了一个新菜单。当用户将鼠标悬停在菜单上时,将执行与它相关的代码块,并用于构建子菜单。

这是Pivot Graph(拓扑图)菜单的一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
popup pgraph {
menu "&Layout" {
item "&Circle" { graph_layout($1, "circle"); }
item "&Stack" { graph_layout($1, "stack"); }
menu "&Tree" {
item "&Bottom" { graph_layout($1, "tree-bottom"); }
item "&Left" { graph_layout($1, "tree-left"); }
item "&Right" { graph_layout($1, "tree-right"); }
item "&Top" { graph_layout($1, "tree-top"); }
}
separator();
item "&None" { graph_layout($1, "none"); }
}
}

效果如下:

image-20210709155958173

如果您的脚本为Cobalt Strike菜单钩子指定了一个菜单层次结构,它将添加到已经存在的菜单中。您也可以使用&popup清除功能来清除其他注册菜单项,并重新定义一个符合您个人品位的菜单层次结构。

自定义输出

Aggressor脚本中的set关键字定义了如何格式化事件并将其输出显示给用户。下面是set关键字的示例:

1
2
3
4
5
6
7
set EVENT_SBAR_LEFT {
return "[" . tstamp(ticks()) . "] " . mynick();
}

set EVENT_SBAR_RIGHT {
return "[lag: $1 $+ ]";
}

显示效果:

image-20210709161631047

上面的代码定义了Cobalt Strike事件日志中状态栏的内容 (View -> Event Log)。状态栏的左侧显示当前时间和昵称。右边显示Cobalt Strike客户端和团队服务器之间消息的往返时间。

您可以创建自己的文件来覆盖Cobalt Strike默认脚本中的任何设置选项,其中包含您所关心的事件的定义。把脚本加载进Cobalt Strike后Cobalt Strike将使用您的定义来构建。

事件

使用on关键字来定义事件的处理程序。当Cobalt Strike连接到团队服务器并准备好时,ready事件就会触发。

1
2
3
on ready {
show_message("Ready for action!");
}

显示效果:

image-20210709162022551

Cobalt Strike为各种情况生成事件。使用*元事件查看Cobalt Strike的所有事件。

1
2
3
4
5
6
7
8
9
10
on * {
local('$handle $event $args');

$event = shift(@_);
$args = join(" ", @_);

$handle = openf(">>eventspy.txt");
writeb($handle, "[ $+ $event $+ ] $args");
closef($handle);
}

效果如下:

image-20210709162801522

生成了事件日志。

⬆︎TOP