三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

解密冰蝎和蚁剑:在CTF流量分析中如何识别和还原WebShell攻击(含AES/Base64解密实操)

解密冰蝎和蚁剑:在CTF流量分析中如何识别和还原WebShell攻击(含AES/Base64解密实操)

解密冰蝎与蚁剑:CTF流量分析中的WebShell识别与解密实战

在CTF竞赛和安全分析领域,WebShell流量分析一直是让许多选手头疼的高阶挑战。特别是当面对冰蝎(Behinder)、蚁剑(AntSword)这类采用强加密通信的WebShell工具时,传统的字符串匹配方法往往失效。本文将带您深入加密型WebShell的流量特征识别与解密全过程,从异常流量发现到最终攻击命令还原,构建一套可复用的实战分析框架。

1. WebShell流量分析的核心挑战

WebShell作为攻击者维持服务器权限的常见手段,其通信流量往往隐藏在正常HTTP请求中。传统WebShell(如"一句话木马")由于采用明文传输,容易被安全设备检测。而冰蝎、蚁剑等工具通过以下机制提升了检测难度:

  • 动态密钥协商:每次会话使用不同的AES密钥和初始化向量(IV)
  • 多层编码嵌套:Base64、Hex、自定义编码组合使用
  • 协议模仿:完美模拟浏览器User-Agent、Cookie等头部字段
  • 心跳伪装:定时请求与正常AJAX调用无异

典型分析困境包括:

  1. Wireshark中观察到大量404响应,但少数200响应携带加密数据
  2. 特定PHP文件(如config.php)出现异常高频访问
  3. POST请求参数呈现规律性Base64特征,但解码后为乱码

关键提示:当发现Base64解码结果不符合可打印ASCII范围时,极可能是AES加密后的二进制数据经过Base64编码的结果。

2. 加密型WebShell的特征指纹

2.1 冰蝎(Behinder)的流量特征

通过分析历史捕获样本,冰蝎3.0版本存在以下可识别特征:

特征维度具体表现分析价值
URL路径常访问/admin.php/config.php等敏感文件可疑入口点定位
请求头固定包含Accept: text/html,application/xhtml+xml区别于正常API调用
参数名类似k=value的加密参数加密数据提取位
响应体固定前缀->|和后缀|<-解密结果校验标记

默认密钥配置(部分版本):

AES_KEY = "e45e329feb5d925b" # 默认密码 AES_IV = "0123456789abcdef" # 默认初始化向量

2.2 蚁剑(AntSword)的识别特征

蚁剑的连接流量具有更明显的模式特征:

  1. 连接阶段

    • POST请求体包含@ini_set等PHP禁用函数配置
    • 固定出现echo "->|";echo "|<-";作为响应边界
  2. 命令执行阶段

    • 参数名通常为32位MD5哈希值(如6ea280898e404bfabd0ebb702327b19f
    • 执行结果通过Base64编码返回

典型连接密码示例:

POST /backdoor.php HTTP/1.1 Content-Type: application/x-www-form-urlencoded 6ea280898e404bfabd0ebb702327b19f=%40ini_set(...)

3. 解密实战:从流量到明文

3.1 AES解密处理流程

当确认流量可能来自冰蝎后,可按以下步骤解密:

  1. 提取加密数据

    • 从HTTP POST参数或Cookie中定位加密字段
    • 去除可能的URL编码(如%3D替换为=
  2. Base64解码

    import base64 encrypted_data = base64.b64decode(request_param)
  3. AES-CBC解密

    from Crypto.Cipher import AES def decrypt(key, iv, ciphertext): cipher = AES.new(key.encode(), AES.MODE_CBC, iv.encode()) plaintext = cipher.decrypt(ciphertext) return plaintext.rstrip(b"\x00").decode()
  4. 结果验证

    • 检查是否包含->|...|<-标记
    • 查看是否出现systemeval等危险函数

3.2 蚁剑流量解密案例

分析某CTF赛题中的异常流量:

  1. 发现可疑请求:

    POST /upload.php HTTP/1.1 Content-Length: 132 Content-Type: application/x-www-form-urlencoded c=4a5b6c7d8e9f...3d2a1b&i=7e03864b0db7e6f9
  2. 参数解码:

    • 参数c经Base64解码后得到AES加密数据
    • 参数i为16字节IV值
  3. 使用已知密码7e03864b0db7e6f9解密:

    openssl enc -d -aes-256-cbc -K 7e03864b0db7e6f9 -iv 0123456789abcdef -in encrypted.bin -out decrypted.txt
  4. 获得攻击者执行的命令:

    id; uname -a; cat /flag.txt

4. 分析框架与防御建议

4.1 WebShell流量分析四步法

  1. 流量筛选

    • 过滤HTTP状态码异常(如404与200交替)
    • 统计特定URL访问频率
  2. 特征匹配

    • 搜索eval(system(等危险函数
    • 检测长Base64字符串参数
  3. 协议还原

    • 使用Wireshark的"Follow HTTP Stream"
    • 导出可疑对象(File → Export Objects → HTTP
  4. 解密验证

    • 尝试默认密钥解密
    • 检查解密结果的语法结构

4.2 防御层面建议

  • 日志监控

    • 记录所有执行命令的PHP文件访问
    • 告警高频访问的非常规PHP脚本
  • 网络防护

    location ~* \.php$ { if ($query_string ~* "[a-zA-Z0-9]{32}") { return 403; } }
  • 主机加固

    • 限制PHP函数调用(disable_functions
    • 设置文件完整性监控(如Tripwire)

在实际CTF比赛中,遇到加密WebShell流量时,保持对异常参数的敏感度是关键。某次比赛中,选手通过发现响应包中的Content-Length与实际正文长度不符这一细微差异,最终定位到隐藏在正常图片下载流量中的命令执行结果。这种对协议细节的深入理解,往往比工具使用更重要。

← 返回列表