cobaltstrike上线流量分析
在学习cs流量的过程中遇到了一些问题,这里结合源码来分析一下背后的原理。
CS流量
cs有很多流量通道如dns、http、smb、tcp等等。本文主要分析http通道的上线过程。创建监听器时选择beacon http,生成exe,传到虚拟机上运行,然后在本机抓包执行命令,拿到了一下流量包。

CS上线过程
下图描述了http分阶段beacon上线的过程

前两步很好理解,上传木马然后运行。但第三部的特定算法是什么?第四步的校验是什么?我们先看流量包

可以看到第一次访问的路由是/AAsh,并传输了加密后的stager beacon文件,根据设备的型号传输不同类型的文件。

这里用到了checksum8算法,下面是源码。简单来说就是把路由的每个字符的ascii相加,取模256的余数是92那就对应x86,93对应x64。

以/AAsh为例子算一下,65+65+115+104=349%256=93。代表了目标机器是x64。
导出传输的stager beacon文件,也就是第六步受害端解密的文件

可以通过脚本进行解密https://github.com/minhangxiaohui/CSthing
解密后可以看到payload类型、心跳间隔、公钥、心跳uri等等

第七步受害端用服务器公钥和自己伪随机生成的一个对称加密密钥生成cookie字段,通过http请求放在心跳包中传输

想要解密cookie得先拿到服务器的私钥。在服务端的目录中会有.cobaltstrike.beacon_keys,这是一个java序列化文件,里面存了rsa的公私钥对,提取出来。

然后就可以用这个脚本DidierStevens/Beta: Beta versions of my software来解密cookie了
python cs-decrypt-metadata.py -p 私钥 待解密内容

元数据里面有一个由受害端生成的AES的对称密钥,是由Raw key生成的。
心跳包的响应体存在一些乱码,因为得到了Raw key,可以直接用cs-parse-http-traffic.py解密

这里因为我的tshark装在e盘,所以我增加了-T参数
python cs-parse-http-traffic.py -r RAWKEY 流量包名 -T "E:\CTF\web_tools\Wireshark\tshark.exe"

脚本通过rawkey,计算其sha256的值,前16位为hmac的key,后16位为aes的key。

一般情况我们是拿不到私钥的,那怎么才能获得rawkey呢?
可以dump下beacon的内存,从中将元数据metadata给dump下来,然后拿到metadata里面的rawkey对交互流量解密。
cs-extract-key.py可以用这个脚本提取内存中的hmac和aeskey
-c指定callback,发送的加密字段



浙公网安备 33010602011771号