CS-插件篇

参考文章:

1
http://sleep.dashnine.org/download/sleep.jar

Sleep环境的搭建

C2:Cobalt Strike,一款多人运动工具,常常使用再后渗透阶段

Aggressor Script:是C2 3.0以上版本的一个内置的脚本语言,他是由Sleep脚本解析,Sleep脚本目前国内是没有中文版本的,可能是因为使用的人不多,在在后面我会去把这个语言进行翻译;在CS 3.0 以上的版本,菜单、选项、事件、都有默认的default.cna构建。我们可以使用一些IRC、Webhook去对接机器人和监控,比如瞎子哥的Server上线监听,以及梼杌等插件的编写,所以本文也会在他们的代码基础上去解释一些东西

由于 Aggressor Script是由Sleep解析的,所以我们先要安装一下这个语言的解释器,这个语言是基于Java的脚本语言

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

  • 快速使用: java -jar sleep.jar:

图片

  • 输出 hello word:

新建一个 cna 文件,cna是Aggressor Scrip脚本的后缀,然后在里面写:

1
println("hello word");

简介

在 C4 中,我们可以打开 脚本控制台的控制台

这里我们可以使用 help查看一些帮助信息: 640

下面是介绍:

  • ? 进行一个简单的判断,返回值为True或者False,例如? int(1) == int(2)返回为False:!q

  • e 执行我们写的代码,相当于交互模式,如果不加上 e 的话是无法执行的,例如 e println("hello woed"):

fasdaf

  • load 加载 cna 脚本: load <cna path>:

fadggsf

这里加载的 cna 内容为

jjjjfadggsf

意思是创建一个 command 名字为 w,当输入w的时候就打印hello word。

  • ls 现实我们目前加载的 cna 代码:eyrujhfg

  • proff :静止 cna 脚本运行Sleep的语法(不明白具体的作用)

  • profile:统计 cna 脚本使用了哪些 Sleep的语法: ffsaffa

  • pron 机翻:运行 cna 脚本运行Sleep的语法

  • reload:重新加载 cna脚本,还是用我们刚刚的脚本举例: 我先修改 cna 中的内容: ggsdf

在到 控制台输入一下:

gggsddfa

没有改变,我们重载一下在运行:hhfgs

  • troff: 关闭函数跟踪,也就是我们不显示函数运行的具体情况:

  • tron: 开启函数跟踪,显示我们运行时的具体情况: fasfasd

发现我们运行的情况,在1.cna的第三行,我们输出 hello my friend

  • x:执行一个计算,比如1+1什么的,这里需要注意,两个数字之间需要间隔开,不然会报错:sasdawr

Sleep快速入门

  • 数字
  • 字符串
  • Arrays
  • Lists
  • Stacks
  • Sets
  • Hashs

这是他的数据类型,首先我们要注意的是,他的格式是一定需要带上空格的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$name = "kris"; # 字符串变量的命名
$age = 18; # 数字型变量命名

Arrays类型:
@user_list = @("kris",18,"四川","单身"); # Sleep的阵列(列表)是类似python的那种任何元素的集合,不需要元素的类型统一
也即是一种复合数据类型。
println(@name_list[0]); # 下标输出信息

Hashs类型
%dict["name"] = "kris";
%dict["age"] = 18;
%dict["address"] = "sichuan"; # 使用%号创建,有点和python的字典类似

println("Dict is ".%dict);

Arrays

ggsdfsadf

这样可以对列表中的元素进行输出。格式话输出的语法是使用 . 进行拼接

Hashs

fasdsasa

遍历

语法:

1
2
3
4
5
@name_list = @('kris',18,'sichuan');
foreach $var (@name_list)
{
println($var);
}

fasddas

Push

这个类似我们的python中的append方法,在列表的最后面添加数据:

1
2
3
4
5
@names = @("Hellen","Abao");
push(@names,"kris");


print("name :".@names);

asfsad

彩色输出

简单的来说就是让我们的控制台输出一个带颜色的字体:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
println("\c0This is my color");
println("\c1This is my color"); # 这是黑色
println("\c2This is my color");
println("\c3This is my color");
println("\c4This is my color");
println("\c5This is my color");
println("\c6This is my color");
println("\c7This is my color");
println("\c8This is my color");
println("\c9This is my color");
println("\cAThis is my color");
println("\cBThis is my color");
println("\cCThis is my color");
println("\cDThis is my color");
println("\cEThis is my color");
println("\cFThis is my color");

f1sdfasd

在3.0版本以上,客户端界面的大部分东西都是使用 deafult.cna 构建出来的,菜单、默认按钮,包括我们日常上线的时候 Event log 的格式化输出。接下来我们就一一介绍

键盘快捷键

语法:

1
2
3
4
bind <想绑定的组合键>
{
按下快捷键执行的命名;
}

我们绑定一个来试试看:

1
2
3
4
bind Ctrl+H {
show_message("使用键盘快捷键哦!"); # 弹窗显示我们的消息
elog("使用了快捷键!"); # 在 Event Log位置显示信息
}

assdff

菜单编写

菜单就是下面这样的东西:

我们可以自己定义想要的菜单或者将我们的二级菜单添加到已经存在的主菜单下,创建自定义菜单语法如下:

1
2
3
4
5
6
7
8
popup <菜单函数名>{
item("&<二级菜单显示>", {点击时执行的代码,或者函数}); # 第一个子菜单
separator(); #分割线
item("&<二级菜单名字>", {点击时执行的代码,或者函数}); # 第二个子菜单
separator(); #分割线
}

menubar("一级菜单显示名", "菜单函数名");

我们现在定义一个简单的菜单:

1
2
3
4
5
6
7
popup my_help{
item("&这是百度",{url_open("http://www.baidu.com")});
separator();
item("&这是谷歌",{url_open("http://www.google.com")}); # url_open()这个函数是用来打开网站的

}
menubar("帮助菜单", "my_help"); # 菜单函数,一定要加上

fasdsadsad

当我们点击以后,会直接打开百度的链接

果我们并不想创建新的菜单,而是想在默认的菜单上增加,我们可以这样做:

1
2
3
4
popup help{
item("&关于汉化",{show_message("4.1汉化 by XXX ")});
separator();
}

sdaasff

这样我们就在与原有的基础上加上了一个关于汉化的提示,这里我们是加载外部的 cna ,你可以修改默认的 default.cna来添加自己的信息。

  • 右键菜单的选择

    除了上面说的那样的菜单,我们还会在点击右键的时候打开菜单,如下所示:asdfff

创建这样的菜单我们的语法为:

1
2
3
popup beacon_bottom{
item("&关于作者", { url_open("https://wgpsec.org"); });
}

asddsasdadd

我们在任何的菜单里面都可以嵌套菜单,就整出一个多级菜单的样子,我们把上面的代码进行修改

1
2
3
4
5
6
popup beacon_bottom{
menu "关于作者"{
item("&博客", { url_open("https://wgpsec.org"); });
item("&QQ", { show_message("1574991635"); });
}
}

ds1d

多级菜单就是多了一个menu "右键显示的信息"{} 的写法,这里和上面菜单编写最大的区别就是没有menubar的写法,因为我们是直接在右键菜单上进行修改的,也就是原有菜单上修改