CS43伪破解与二次开发
cobaltstrike.auth是被RSA私钥签名(加密)的授权文件,客户端加载时会利用内置的RSA公钥对其解密,解析获取到试用水印、授权版本、有效期、AES密钥、HMAC等内 2021-05-29 21:57:09 Author: hosch3n.github.io(查看原文) 阅读量:165 收藏

cobaltstrike.auth是被RSA私钥签名(加密)的授权文件,客户端加载时会利用内置的RSA公钥对其解密,解析获取到试用水印、授权版本、有效期、AES密钥、HMAC等内容。关键的AES密钥和HMAC256用于连接服务器时,解密和校验sleeve中的动态链接库。

LV0

破解cobaltstrike 4.x的前提是要么得到了泄漏的auth文件(或里面的关键key),要么得到了解密后的sleeve中的动态链接库。

LV1

当得到了原版Jar包、重新签发的auth文件和对应的公钥时,只需替换官方内置的公钥即可。具体操作如下:

I. 反编译原版Jar包

1
2

java -cp ./java-decompiler.jar org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true ./cobaltstrike.jar ./ex

II. 新建项目并将原版Jar包作为依赖加载,配置好Artifacts

III. 解压反编译后的jar包,替换resources/authkey.pub,修改common/AuthCrypto中的md5校验为公钥对应的哈希5e5c629ad2673a45b4d3c69984dbdf36

IV. 将beacon/BeaconData中49行的this.shouldPad修改为false,去除exit

LV2

基于原版Jar包和关键key,根据逆向的代码逻辑倒推出auth文件内容,自己生成RSA密钥对并签发auth文件。

由common/Authorization可以看出,auth文件中存放的字节数组依次为4位文件头、2位文件长度、4位有效期、4位水印、1位有效版本、3x(1+16)位未起作用的数据(1位用于标识长度,猜测是官方用于定位原auth文件的购买者身份?)、1位标识关键key长度、关键key。

LV3

利用关键key解密sleeve中的动态链接库,修改common/SleevedResource中的解密逻辑为直接返回原资源。

修改beacon/BeaconPayload中的抑或key,同时通过机器码特征定位修改dll中的抑或key。废除cloudstrike/WebServer中checksum8上线机制。

参考链接

Cobalt Strike 4.3 (March 17, 2021) [bug fixes]

官网SHA256哈希校验

【知识回顾】Cobalt Strike 4.0 认证及修补过程

RedCore红队学院CSTips


文章来源: https://hosch3n.github.io/2021/05/29/CS43%E4%BC%AA%E7%A0%B4%E8%A7%A3%E4%B8%8E%E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91/
如有侵权请联系:admin#unsafe.sh