一、概述:
这次文章主要介绍下Cobalt Strike 4.1相关功能的二开和后门(artifact.exe\beacon.exe)的生成方式,Cobalt Strike的jar包我已反编译,并改了下反编译后的bug,teamserver与agressor均能正常调试使用,附反编译后项目地址: https://github.com/mai1zhi2/CobaltstrikeSource 。若有不对的地方希望大伙指出,谢谢。后续将会再分享通讯协议与自定义客户端(后门)。PS:感谢Moriarty的分享课。
二、常用二开的方式:
2.1 RDI,反射型DLL注入
新建目录,添加反射型Dll:
在default.can文件中添加自定义的菜单项,其中传入参数$1为beaconID:
在AggressorBridge.java的scriptLoaded()方法中增加自定义的dialog:
在evaluate()方法添加相应的事件处理,来打开自定义的对话框:
自定义的对话框的构造方法传入client和beaconID的数组,以便后续构造TaskBeacon实例,再调用TaskBeacon实例中新增的RDITest()方法,:
下图为在TaskBeacon.java中的TaskBeacon类中新增的RDITest(),在该方法中生成RDITestJob类对象并调用其spawn()方法:
所增加的RDITestJob类,该类继承Job类,并实现所需的虚函数,其中getDLLName()函数要返回所需dll的路径:
另外在该类中重写了父类的spawn()方法,因为父类的spawn()方法会调用decrypt()函数解密后相应的资源后再去读取,而我们的dll没有进行加密,所以直接读取即可:
测试运行:
2.2 BOF,Beacon Object File,加载运行obj File
先生成相应的.Bof文件,这里以netstat功能为例子
新建自定义的BOF类,并继承PostExInlineObject类,重写类中的getObjectFile()方法,该方法的作用是返回要加载的BOF文件路径:
其中在父类PostExInlineObject中的getFunction()方法可以修改BOF文件的入口方法名,不一定为go:
然后在TaskBeacon增加其BOF类的调用:
最后在自定义dialog中调用:
测试运行: