1244 字
6 分钟
2021-绿城杯-misc流量分析题过程记录
2021-绿城杯-misc流量分析题过程记录
声明
- 本文为2021-绿城杯-misc解题记录,用于个人学习总结和原理分享,参考文章链接、工具链接等见文末。
获取flag流程
- 题目附件给了一个pcapng的流量包,复制到wireshark中打开,先看看http包(可在顶部过滤),如图有一些包传输内容比较可疑,右键该包追踪流,看到如下格式数据,经过搜索发现是CVE-2021-3129 漏洞攻击特征。

- 复制下来处理掉头部的一串A和
=00后,通过base64解码即可获得数据内容,如图是一个小马,通过密码14433连接。
- 接下来可以尝试的思路如,寻找有14433的字符串的包,过滤到一些,比如下面这个数据段有PK开头的一段数据,是zip文件的格式(zip文件头两个字节为50 4B或者ASCII的PK)。

- 以及其它含有14433的包中,我们通过应答包看到了上传的secret.zip,故可以通过选择以原始数据呈现复制十六进制数据,用在线工具转为zip保存到本地。

- 在以下这个包中,看到了解压secret.zip的操作,于是尝试对数据段进行解密,根据前面对小马的内容解密,暴露了加密方式如下代码块,为base64外嵌套gzinflate压缩,可通过文末链接四给出的参考网站中的代码进行解密,这里写了一个decode_model.php,将加密内容填入变量运行进行解密。
<?phpeval(gzinflate(base64_decode('加密部分')));?>
6. 在解密上一步解压secret.zip操作的数据包的如图所选变量数据后,获得很长一片代码,是一个功能更齐全的大马,具体代码这里不放了,由于这一步执行了解压缩,必然传入解压缩指令和压缩包密码,故仅展示关键部分用于提取压缩包密码。
7. 这里的变量s用于接收执行的命令,根据大马代码逻辑,从数据段提取该部分数据去掉前两个字符用base64解密即获得密码(这里不再需要使用gzinflate(base64_decode(''))解密,仅14433的传入值需要通过脚本解密,其它变量是并列关系),使用密码解压缩secret.zip,获得文件.cobaltstrike.beacon_keys。
8. 使用文末给出的cs-scripts,将克隆下来的脚本所咋目录下.cobaltstrike.beacon_keys替换为解压获得的密钥文件,获得公私钥(实际仅需要保存私钥)。
9. 对CS_Decrypt适当修改参考了文章中的修改方法(文末引用的第一个链接),并在kali虚拟机的虚拟环境中运行python程序,解决了运行报错问题。
10. 将RSA私钥粘贴至Beacon_metadata_RSA_Decrypt.py指定位置,还需要填写的是encode_data变量,作为待解密内容,解密cookie值获得元数据。
11. 继续搜寻,通过如图对GET请求和存在cookie的过滤,找到一些心跳包,随便复制一个cookie填入解密,在该目录执行如下命令,获取了AES key和HMAC key。

python3 -m venv venv ##创建虚拟环境source venv/bin/activate ##激活虚拟环境pip install M2Crypto ##所需模块pip install hexdump ##所需模块python Beacon_metadata_RSA_Decrypt.py ##执行解密deactivate #退出虚拟环境- 继续观察http通信,在跟踪心跳包过程中发现了目标文件为/submit.php?id=xxx的post请求,经过确认为beacon任务返回数据,复制加密内容为hex格式,去转base64。

- 将转为base64的内容复制到Beacon_Task_return_AES_Decrypt.py并于虚拟环境中运行(若为linux系统,且可能出现No module named ‘Crypto’需要通过pip install pycryptodome安装)

- 按submit.php作为字符串,找其它beacon任务返回数据,依次解密最后获得flag。

其它补充与收获总结
- C2服务端与beacon通信使用了RSA非对称加密,在
.cobaltstrike.beacon_keys中存储一个序列化对象,包含一对RSA公私钥,通信中会向一些伪装地址发起正常流量请求作为心跳包(如本题的/en_US/all.js),并将元数据用RSA公钥加密发给C2服务器,常被Base64编码作为cookie发送。
- 许多linux发行版上无法使用pip全局安装模块,在python>=3.3版本内置了venv,可以有效避免污染,将不同项目隔离不影响其他项目,除去本文提到的使用方法,详细介绍可见’https://www.runoob.com/python3/python-venv.html’
参考文章和工具链接
- 解密Cobalt Strike流量方法和工具选用参考了https://pepster.me/2021-%E7%BB%BF%E5%9F%8E%E6%9D%AF-misc/
- 部分思路也参考了’https://blog.csdn.net/qq_43264813/article/details/120560209’
- 用到的工具:
- 从
.cobaltstrike.beacon_keys中获取存储了CS通信时用来加密的RSA公私钥:‘https://github.com/Slzdude/cs-scripts’ - 解密AES key和HMAC key以及解密任务完成返回数据:‘https://github.com/WBGlIl/CS_Decrypt’
- 前半段eval gzinflate base64_decode解密方法参考:‘https://blog.csdn.net/nzjdsds/article/details/90109595’
2021-绿城杯-misc流量分析题过程记录
https://www.dxowo8.top/posts/post-32/32/ 部分信息可能已经过时







