倾旋的博客

倾旋的博客

现阶段在进行有效性验证/攻击模拟相关的安全研究工作,我的博客会记录一些我的学习过程和部分安全技术研究成果。

02 Mar 2020

Cobalt Strike Aggressor Script (第一课)

前言

在后渗透阶段,目前较为流行的C2平台就属Cobalt Strike做的比较优秀了;目前国内的论坛、网站上已经放出很多版本,最新的为Cobalt Strike 3.14,目前最新版本4.0已不再有试用版。

起初我刚接触Cobalt Strike时,觉得非常不习惯,从Metasploit萌新走来,觉得这个图形化软件远远比不上Metasploit的模块丰富,后经过长时间的使用以及研究,从这个项目中学习到了很多技术,被开发者的思想所折服,应该算比较超前的一款值得学习的平台了。

Aggressor Script

Aggressor Script是Cobalt Strike 3.0版本以上的一个内置脚本语言,由Sleep语言解析,Cobalt Strike 3.0以上版本的菜单、选项、事件都由default.cna构建。红队人员可以通过它来调用一些IRC、Webhook接口去对接机器人,实现自动化渗透与监控,Aggressor Script是Cobalt Strike这款C2平台的画龙点睛之笔。

对于Python、C/C++爱好者来说,Sleep语言一开始接触的时候感觉很奇怪,会有很多想吐槽的点,但久而久之,就会发现它的便捷之处。

安装Sleep语言环境

为了快速掌握Aggressor Script,需要先掌握和熟悉一些Sleep的语法,不然遇到错误无法发现自己错在哪里。

Sleep语言下载地址:http://sleep.dashnine.org/download/sleep.jar

启动Sleep脚本语言解释器:

java -jar sleep.jar

2020-03-01-11-37-38

Sleep语言数据类型

Sleep语法手册:http://sleep.dashnine.org/manual/

这里主要介绍一些特殊的数据类型:Stacks、Lists、Hashs

Array数据类型支持多种数据存放在一起,也就是说Array是一个复合数据类型;

例如:

1
2
3
# create a  List
@foo = @('foo',123.0,'bar');
println(@foo[0])

2020-03-01-11-37-53

遍历:

1
2
3
4
5
@foo = @('foo',123.0,'bar');
foreach $var (@foo)
{
   println($var);
}

Stacks 栈 - “后进先出”

1
2
3
4
5
6
7
8
9
# create a Stacks
push(@stack, "apple");
push(@stack, "banana");
push(@stack, "cucumber");

println("Stack is: " . @stack);
$value = pop(@stack);
println("Top item is: " . $value);
println("Stack is: " . @stack[0]);

2020-03-01-11-38-02

Hashes 更像是Python中的字典 Key-Value

1
2
3
4
5
6
$x = 3;
%foo["name"] = "Raphael";
%foo["job"]  = "wasting time";
%foo[$x]     = "Michelangelo";

println("%foo is: " . %foo);

2020-03-01-11-38-12

创建一个与用户交互的函数

一般,我们通常会在beacon中输入命令给Cobalt Strike,这些命令背后的代码其实都被事件关联起来了,下面来一个示例,做一次我们自己的命令绑定。

1
2
3
4
5
6
7
sub print_hello{
    println("Hello $1");
}

command say {
	print_hello($1);
}

加载到Cobalt Strike后,在Aggressor Script控制台输入say Tom就可以运行脚本了:

2020-03-01-11-38-22

2020-03-01-11-38-29

可以发现,Sleep的函数通过$数字来寻找函数参数,这个虽然友好,但是还是有说不出的难受…

下一课介绍Cobalt Strike的菜单创建以及快捷键绑定。