当前位置: 首页 > news >正文

实战复盘:如何从混杂的Web流量中揪出Cobalt Strike Beacon?一份完整的解密指南

从混杂流量中解密Cobalt Strike信标的实战手册

当安全团队在例行流量审计中发现异常HTTP请求时,往往意味着内网已经存在失陷主机。最近处理的一起案例中,攻击者通过Laravel框架的已知漏洞植入Webshell后,在服务器上遗留了包含Cobalt Strike信标密钥的压缩包。本文将完整还原从流量识别到最终解密C2通信的全过程。

1. 初始线索发现与关键文件提取

在分析pcap文件时,首先需要关注异常HTTP POST请求。某次案例中,攻击者上传的Webshell响应包包含以下特征字符串:

AAA*VGhpcyBpcyBhIHRlc3Q=*AAA

这类经过伪装的Base64字符串通常需要特殊处理:

  1. 去除AAA*前缀和*AAA后缀
  2. =替换为00
  3. 进行标准Base64解码

通过反复解码多个类似字符串,最终发现了服务器上的关键文件线索:

cd /d "D:\phpstudy_pro\WWW\secret"&"C:\Program Files\7-Zip\7z.exe" x secret.zip -pP4Uk6qkh6Gvqwg3y

关键文件特征对比表

文件类型识别特征提取工具典型位置
secret.zipPK文件头被Webshell输出包裹WinHex修复/tmp或Web目录
.cobaltstrike.beacon_keysRSA密钥对特征7z解压攻击者指定目录

2. 压缩包修复与密钥提取

受损的压缩包需要通过十六进制编辑器手动修复。以下是使用WinHex的标准操作流程:

  1. 从原始流量中导出被污染的zip文件片段
  2. 搜索50 4B 03 04(PK头)和50 4B 05 06(中央目录结束记录)
  3. 删除头尾的非zip数据
  4. 保存为标准zip格式

使用之前获得的密码P4Uk6qkh6Gvqwg3y解压后,得到.cobaltstrike.beacon_keys文件,其内容结构如下:

# 公钥 -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx6QZ6OZ7O8Z6O8Z6O8Z6 ... -----END PUBLIC KEY----- # 私钥 -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAx6QZ6OZ7O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z6O8Z ... -----END RSA PRIVATE KEY-----

3. C2流量解密实战

获得密钥对后,可以开始解密Cobalt Strike的通信流量。典型C2流量包含两种类型:

  1. 心跳包(元数据):GET请求/en_US/all.js,密钥通过Cookie传输
  2. 数据回传:POST请求/submit.php?id=xxxxxx,包含加密的失陷主机信息

3.1 解密元数据获取AES密钥

使用Python脚本解密元数据:

from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 private_key = RSA.import_key(open('beacon_keys').read()) cipher = PKCS1_v1_5.new(private_key) aes_key = cipher.decrypt(encrypted_metadata, None)

关键参数说明

  • encrypted_metadata:从HTTP Cookie中提取的Base64编码数据
  • aes_key:解密后得到的32字节AES密钥

3.2 解密主机回传数据

获得AES密钥后,可以解密POST请求中的实际数据:

from Crypto.Cipher import AES import base64 def decrypt_c2_data(encrypted_data, aes_key): iv = encrypted_data[:16] cipher = AES.new(aes_key, AES.MODE_CBC, iv) return cipher.decrypt(encrypted_data[16:]) raw_data = base64.b64decode(http_post_data) decrypted = decrypt_c2_data(raw_data, aes_key)

典型解密结果示例

{ "hostname": "DC01.corp.local", "username": "admin", "process": "lsass.exe", "data": "收集的凭证数据..." }

4. 防御建议与检测增强

基于多次事件响应的经验,建议在安全设备上部署以下检测规则:

Suricata规则示例

alert http any any -> any any (msg:"Cobalt Strike Beacon Metadata Request"; http.method; content:"GET"; http.uri; content:"/en_US/all.js"; http.cookie; content:".cobaltstrike.beacon_keys"; sid:1000001;)

网络设备配置建议

  1. 对出站HTTP流量实施TLS拦截检查
  2. 限制服务器发起的异常HTTP POST请求
  3. 监控Web目录下的.zip文件创建行为

在一次实际事件中,攻击者在解密后的数据中泄露了其C2服务器的真实IP,这成为溯源突破的关键。通过交叉分析多个解密数据包的时间戳,我们还成功还原了攻击者在失陷主机上的完整操作链条。

http://www.jsqmd.com/news/965791/

相关文章:

  • 保姆级教程:用GprMax 3.0做探地雷达正演,从建模到避开‘空白图’陷阱
  • 别只把Termux当玩具了!用它在安卓手机上搭建Python开发环境(保姆级配置流程)
  • SAP ABAP锁参数SCOPE实战避坑:为什么我的BAPI执行后锁就丢了?
  • 从三极管切换到MOS管?搞懂G、S、D和压控原理,你的电路效率能翻倍
  • STM32H7上跑ThreadX USBX?手把手教你搞定开发环境(MDK/IAR/GCC全支持)
  • 新手也能玩转CTF PWN:从零开始,用Python和pwntools搞定攻防世界XCTF前5题
  • 别再硬编码了!Flowable流程节点信息动态获取的完整配置流程
  • 从一道CTF题复盘CVE-2021-3129:手把手解密Laravel漏洞流量中的Cobalt Strike密钥
  • 2025-2026年汽车零部件工厂AMR选型评测:五大品牌实测,线边仓配送与跨车间搬运方案
  • 避坑指南:Harbor在ARM服务器(鲲鹏920)部署时,你可能会遇到的5个权限与配置问题
  • 如何快速实现SketchUp模型3D打印:终极STL插件完整指南
  • 分布式事务 Seata 实战:AT 模式双阶段锁定隔离与 TCC 模式空回滚、悬挂防御架构选型
  • 告别手动配置!在Ubuntu 22.04上用CMake+VS Code一键搞定OpenCV C++开发环境
  • PDMS二次开发避坑指南:从PML1到PML2,这些语法“雷区”千万别踩
  • Conformer多级嵌入框架优化孟加拉语语音识别
  • 2026年实测10款降AI率工具推荐:免费与付费全对比,毕业论文降低ai率必看
  • 从GWR到GTWR再到MGWR:一文讲清地理加权回归家族的区别、选择与实战场景
  • ai辅助开发:让快马智能生成应对动态加载与验证码的twitter x下载方案
  • CTF PWN通关秘籍:绕过NX保护,手把手教你构造ROP链拿Shell
  • 2026年口碑好的彩钢岩棉复合板/彩钢三明治岩棉夹芯板/彩钢围挡板/包头彩钢压型板生产厂家推荐 - 行业平台推荐
  • 告别千篇一律!用Operator Mono和Fira Code给你的VS Code编辑器换个“编程体”
  • ADS8684/ADS8688软件SPI驱动避坑指南:从位带操作到多片级联的实战经验
  • Dirbuster扫描太慢或漏扫?可能是你没用好这些高级功能:代理、身份验证与内容分析模式详解
  • 告别手动建模!用PML脚本批量创建PDMS设备,效率提升10倍
  • 别再傻傻分不清!用万用表快速识别N沟道MOS管的G、S、D三个脚(附实测图)
  • 别再死记硬背了!通过‘增删查改’四步,彻底搞懂C语言顺序表的内存模型
  • 【HarmonyOS实战】 @Builder构建函数:UI复用的正确姿势
  • 别再问FPGA是啥了!用面包板和“黑方块”的故事,带你5分钟搞懂它的前世今生
  • 效率革命:跳过下载安装与配置,用快马AI即刻生成Vue3项目框架
  • 国产硬件仿真工具在AI芯片和HPC大芯片验证中的应用现状