Mobile wallpaper 1Mobile wallpaper 2Mobile wallpaper 3Mobile wallpaper 4Mobile wallpaper 5
1244 字
6 分钟
2021-绿城杯-misc流量分析题过程记录

2021-绿城杯-misc流量分析题过程记录#

声明#

  1. 本文为2021-绿城杯-misc解题记录,用于个人学习总结和原理分享,参考文章链接、工具链接等见文末。

获取flag流程#

  1. 题目附件给了一个pcapng的流量包,复制到wireshark中打开,先看看http包(可在顶部过滤),如图有一些包传输内容比较可疑,右键该包追踪流,看到如下格式数据,经过搜索发现是CVE-2021-3129 漏洞攻击特征。
  2. 复制下来处理掉头部的一串A和=00后,通过base64解码即可获得数据内容,如图是一个小马,通过密码14433连接。
  3. 接下来可以尝试的思路如,寻找有14433的字符串的包,过滤到一些,比如下面这个数据段有PK开头的一段数据,是zip文件的格式(zip文件头两个字节为50 4B或者ASCII的PK)。
  4. 以及其它含有14433的包中,我们通过应答包看到了上传的secret.zip,故可以通过选择以原始数据呈现复制十六进制数据,用在线工具转为zip保存到本地。
  5. 在以下这个包中,看到了解压secret.zip的操作,于是尝试对数据段进行解密,根据前面对小马的内容解密,暴露了加密方式如下代码块,为base64外嵌套gzinflate压缩,可通过文末链接四给出的参考网站中的代码进行解密,这里写了一个decode_model.php,将加密内容填入变量运行进行解密。
<?php
eval(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 #退出虚拟环境
  1. 继续观察http通信,在跟踪心跳包过程中发现了目标文件为/submit.php?id=xxx的post请求,经过确认为beacon任务返回数据,复制加密内容为hex格式,去转base64。
  2. 将转为base64的内容复制到Beacon_Task_return_AES_Decrypt.py并于虚拟环境中运行(若为linux系统,且可能出现No module named ‘Crypto’需要通过pip install pycryptodome安装)
  3. 按submit.php作为字符串,找其它beacon任务返回数据,依次解密最后获得flag。

其它补充与收获总结#

  1. C2服务端与beacon通信使用了RSA非对称加密,在.cobaltstrike.beacon_keys中存储一个序列化对象,包含一对RSA公私钥,通信中会向一些伪装地址发起正常流量请求作为心跳包(如本题的/en_US/all.js),并将元数据用RSA公钥加密发给C2服务器,常被Base64编码作为cookie发送。
  2. 许多linux发行版上无法使用pip全局安装模块,在python>=3.3版本内置了venv,可以有效避免污染,将不同项目隔离不影响其他项目,除去本文提到的使用方法,详细介绍可见’https://www.runoob.com/python3/python-venv.html’

参考文章和工具链接#

  1. 解密Cobalt Strike流量方法和工具选用参考了https://pepster.me/2021-%E7%BB%BF%E5%9F%8E%E6%9D%AF-misc/
  2. 部分思路也参考了’https://blog.csdn.net/qq_43264813/article/details/120560209’
  3. 用到的工具:
  1. 前半段eval gzinflate base64_decode解密方法参考:‘https://blog.csdn.net/nzjdsds/article/details/90109595’
2021-绿城杯-misc流量分析题过程记录
https://www.dxowo8.top/posts/post-32/32/
作者
Ne+N3k_O
发布于
2026-05-20
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时