常规解法

即题目给出了流量包和 .cobaltstrike.beacon_keys 密钥

例题: CSGO

题目描述: 拿到 flag

方法一: 直接 CTF-NetA 一把梭了,非常强大

方法二: 使用多个脚本手动完成

首先使用 cs-decrypt-metadata.py 脚本,利用密钥和流量包的带的固定的 cookie 解出 HMAC key 和 AES key

1
python cs-decrypt-metadata.py -f .cobaltstrike.beacon_keys CMUxtZ2Ks80gC9OFjQ0DAmxErO6ikAONXSjdR4tfLIkEwlpCYZRFizNqDCRUkBqbgx1cAIzyqgbXYOsdKBS09Aw8LKOf63SYyRcCH8TAU/3Xf3jL4l0j7K4xudAdwrY6T/Btb7c+9bXgE5jUSXwCY1qaazaegCL/w4/BpNcNKwk=

得到 hmackey 和 aeskey 后,使用这两个 key 和 cs-aes-decrypt.py 脚本解密 POST 流量包里传输的数据

先过滤一下所有 POST 请求包,有六个向 submit.php 页面发送的包,将他们传输的数据部分复制下来

将 AES_KEY 和 HMAC_KEY 和流量包里的数据以列表形式填入脚本,运行即可解密得到 flag

进程内存提取密钥进而解密

例题: 2025-NepCTF-客服小美

题目描述: 找到黑客传输的敏感数据

先打开流量包,发现很明显的 CS 流量特征(看Cookie数据和请求路径)

如果给出解密密钥 .cobaltstrike.beacon_keys,这里就可以直接一把梭了,但是没有密钥

给了一个内存镜像,使用 lovelymem 加载镜像,在网络信息中可以看到 关于2025年部分节假日安排的通知.exe 这个文件有外连机器和端口,猜测是木马文件

检测恶意进程发现 关于2025年部分节假日安排的通知.exe 确实是恶意木马文件

可以看到该文件的 PID 是 6492,右键进程转储(即把某个进程在内存运行时的“快照”完整地备份下来),我忘了第一次怎么转的了,反正第一次转的挺完美的,第二次把整个进程都转出来了,很大

首先分析流量,使用脚本 cs-parse-http-traffic.py 提取加密流量

1
python cs-parse-http-traffic.py -k unknown DESKTOP.pcapng

选择 长度为16 的倍数的 raw data ,使用 raw datacs-extract-key.py 解密 dmp 数据

1
python cs-extract-key.py -t ecfff639c9a79bbb3c59bbec390fa070335fa6d5b33c7ba752fe9803ee2082296233a5dcd7f76c8adb3a1e404df09447 pid.6492.vad.0x640000-0x695fff.dmp

得到 HMAC keyAES key,使用这两个 key 和 cs-aes-decrypt.py 脚本解密 POST 流量包里传输的数据

先过滤一下所有 POST 请求包,有六个向 submit.php 页面发送的包,将他们传输的数据部分复制下来

将 AES_KEY 和 HMAC_KEY 和流量包里的数据部分填入脚本,运行即可解密得到敏感信息

流量提取Beacon进而解密

打开流量包过滤 http 流量,发现 cs 流量特征(看Cookie数据和请求路径)

本题仍然没给出密钥文件 .cobaltstrike.beacon_keys,但是给了 Beacon

什么是Beacon?

在 Cobalt Strike 中,Beacon 是一种后门 payload,旨在提供持续的访问控制和通信通道。它被植入目标系统后,能够通过多种隐蔽的通信方式(如 HTTP/HTTPS)与攻击者的控制服务器进行定期的交互,执行命令、获取敏感信息并保持持久化。这使得 Beacon 成为渗透测试和红队操作中用于维持长期控制、获取系统信息和横向移动的重要工具。

C2 的通信流程如下:

过滤 HTTP 流量,mB9u 就是 Beacon 随机生成的 URL 地址,使用导出对象功能把 mB9u 导出来

然后使用 1768.py 去解析刚刚导出的 Beacon 文件

由于这里不是已知的 cskey 库里的,所以没给出密钥,只能拿到 RSA 公钥

1
python .\1768.py .\mB9u

先用 cyberChef 将 publickey 转化为基本的公钥格式文件,再用 openssl 转化为标准格式

1
2
3
4
5
6
openssl rsa -in pub.key -text -inform PEM -pubin

pub.key 内容如下:
-----BEGIN PUBLIC KEY-----
MIGeMA0GCSqGSIb3DQEBAQUAA4GMADCBiAKBgFJeF4Hy8C0TKngYptJput2/OTUsjSApDsIpT75Nd+ZUnvR2bYsOFiAACt+9ev+ZzXLwViPrDe8gImXPYx3YlazV6YHahCTAOilYlcgZSjFkHy7s1ahxXKic2/lDPF1DdTh2dmbDvbD4YpVVN1tXT+QIqUroL5KWAIXUFjdPFlSzAgMBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
-----END PUBLIC KEY-----

然后使用 轩禹RSA 工具导入公钥提取出 n,再分解 n 得到 p 和 q,再计算出 d,然后直接导出私钥文件

有了私钥文件,直接使用 cs-decrypt-metadata.py 脚本结合 priv.pemcookie 得到 RAW key

1
2
# python cs-decrypt-metadata.py -p 私钥 cookie
python cs-decrypt-metadata.py -p .\priv.pem SLHAIOj8/1icVtP6fImtJz6B6wR0t/XwLg1G0Y3AxoxnseBfPONxoyjAWCCOH84IJULnCZZrO7cIRxJPS2PtmDD4MvD8/PIpoW8Gj8536vhwd+tyXjNKyLNyNYcj+JgO4N5FTnKtkONgv7KnsMjJC3E0eI0ctqmZll8SrXLUS9k=

最后使用 cs-parse-http-traffic.py 脚本结合 RAW key 和 流量文件,解密出流量中所有的 C2通讯流量

1
2
# python cs-parse-http-traffic.py -r [Raw key] xxx.pcapng
python cs-parse-http-traffic.py -r 28ab951fc96bcb93ec13cf9dd5f21373 .\cscs.pcapng

本题后面的步骤有点太抽象,是一个反恐精英流量,就不考虑了,到此为止