前言
在后渗透阶段,目前较为流行的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
Sleep语言数据类型
- 数字
- 字符串
- Arrays
- Lists
- Stacks
- Sets
- Hashs
Sleep语法手册:http://sleep.dashnine.org/manual/
这里主要介绍一些特殊的数据类型:Stacks、Lists、Hashs
Array数据类型支持多种数据存放在一起,也就是说Array是一个复合数据类型;
例如:
# create a List
@foo = @('foo',123.0,'bar');
println(@foo[0])
遍历:
@foo = @('foo',123.0,'bar');
foreach $var (@foo)
{
println($var);
}
Stacks 栈 - “后进先出”
# 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]);
Hashes 更像是Python中的字典 Key-Value
$x = 3;
%foo["name"] = "Raphael";
%foo["job"] = "wasting time";
%foo[$x] = "Michelangelo";
println("%foo is: " . %foo);
创建一个与用户交互的函数
一般,我们通常会在beacon中输入命令给Cobalt Strike,这些命令背后的代码其实都被事件关联起来了,下面来一个示例,做一次我们自己的命令绑定。
sub print_hello{
println("Hello $1");
}
command say {
print_hello($1);
}
加载到Cobalt Strike后,在Aggressor Script控制台输入say Tom就可以运行脚本了:
可以发现,Sleep的函数通过$数字来寻找函数参数,这个虽然友好,但是还是有说不出的难受…
下一课介绍Cobalt Strike的菜单创建以及快捷键绑定。