1.前言
最近看到奇安信的应急响应公众号平台发布了一篇漏洞应急响应文章,文章中指出CobaltStrike<=4.7存在xss的rce漏洞,这是不得不提升到CobaltStrike4.7版本阿,关键新版4.7只有原版,没有破解版有点难搞阿!!!本人只搞出了ntlm中继欺骗,RCE没搞成功!!相信后续会成功的!
2.漏洞信息
漏洞编号:
CVE-2022-39197
漏洞影响范围:
Cobalt Strike <=4.7
3.复现过程
首先我们准备的环境是CobaltStrike4.3,开启teamserver和服务端,这边用的是Windows的客户端
这边我们需要借助一个脚本工具来进行伪造上线到cs,脚本地址:
[CS伪造上线](https://github.com/Sentinel-One/CobaltStrikeParser/)
这边对应脚本最好是在linux下进行安装,windows安装对应扩展包的时候可能会失败,M2crypto和Crypto包需要去安装搭建
```
1.先安装对应的扩展:
sudo apt install libssl-dev swig
2.安装对应扩展包:
pip3 install M2Crypto pycryptodome
3.安装文件内相关扩展:
pip3 install -r requirements.txt
```
修改comm.py文件中的user字段值,插入对应的payload
```
vim ./comm.py #编辑对应的配置文件
```
```
python3 ./communication_poc.py 目标监听的服务 #模拟上线
```
执行之后CobaltStrike这边就会立马上线
这边可以结合中继服务进行测试,这边需要借助一个相关工具进行辅助测试验证脚本地址如下所示:
[NTLM中继欺骗服务](https://github.com/lgandx/Responder)
```
python3 ./Responder.py -I ens33 #设置网卡监听
```
这边就开始进行相关测试,修改对应的payload
```
```
发送之后这边去使用客户端访问对应的cobaltStrike客户端之后就会获取到windows的ntlm的hash了,但是这边抓的不是内网当中机器的hash,是net下的ntlm的hash,只能做破解并不能做pth传递横向,还是有点鸡肋
以下是成功获取到ntlm的hash值
4.以下附上某大佬梳理的CobaltStrike的通信原理
```
1. 我们的beacon先是搜集主机的一些信息和生成一个随机的bid然后通过rsa加密后用http协议get方式将数据发送给teamserver;
2. teamserver收到这个上线包之后,rsa解密获得主机信息,并显示在target列表中;
3. beacon发送上线包之后就会进入一个while循环,等到sleep时间到了之后,就http get去;
teamserver拉取命令列表,如果此时的teamserver没得命令,就又进入休眠时间;
4. 当我们在teamserver的beacon console中输入了命令时,beacon http get拉取命令命令时,teamserver就会在http get response中返回命令队列,beacon收到队列后依次去执行;
5. 执行时,如果有执行结果返回,beacon会等待当前的休眠周期结束,结束休眠周期后,通过httppost方法将AES加密的执行结果返回给teamserver;
6. teamserver会模拟一个http post response返回给beacon,使得这个http请求看起来是合理的
```
我太菜了,java系列底层的伪造上线注入rce没搞成功,但是具体实现还是可以操作的,看了相关大佬的rce复现文章和思路,需要修改伪造上线脚本,调整payload在底层传输的长度限制即可进行rce执行!!!还是要好好搞搞java底层和研究底层通信机制才行,嘤嘤嘤!!