WebShell工具流量特征分析

bash 复制代码
蚁剑流量偏明文+Base64编码、特征明显;
冰蝎3.0/4.0采用AES/RC4对称加密+固定密钥,载荷全程无明文;
哥斯拉采用动态密钥协商+异或/AES加密,响应体以MD5前后16位包裹Base64数据为强特征。

三者均以POST高频请求访问单一脚本文件,但加密强度与协议自定制程度逐级递增,检测难度也相应提升。

总览对比表

维度 蚁剑 AntSword 冰蝎 Behinder(3.0/4.0) 哥斯拉 Godzilla
默认加密方式 Base64 编码(可选 ROT13/Chr/AES 插件) AES-CBC(3.0)/ RC4(4.0),密钥 e45e329feb5d925b XOR+Base64 或 AES+Base64,密钥=md5(key)前16位
默认 User-Agent antSword/v2.1(可篡改) 内置 16 个老 UA 轮换 Java/1.8.0_121(暴露 JDK 版本)
Content-Type application/x-www-form-urlencoded application/octet-stream(3.0)/ application/x-www-form-urlencoded(4.0) application/x-www-form-urlencoded
请求体特征 @ini_set("display_errors","0");@set_time_limit(0); 开头 固定字节头 dFAXQV1LORcHRQtLRlwMAhwFTAg/M(4.0) pass= 起始,Cookie 末尾带 ;
响应体特征 随机数+结果+随机数 混淆 固定字节头 TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd(4.0) MD5前16位+Base64+MD5后16位
强特征 _0x[0-9a-f]{4} 参数名、eval/assert 明文 固定密钥、固定字节头、源端口递增 Cookie 末尾分号、响应体 MD5 分段结构
检测难度 中高

一、蚁剑 AntSword 流量特征

1. 请求头特征

  • User-Agent :默认值为 antSword/v2.1 等带版本标识的字符串,是最易识别的特征;高版本或定制版可通过修改 modules/request.js 伪装为 Chrome、Firefox、Opera 等浏览器 UA。
  • Content-Type :默认 application/x-www-form-urlencoded,文件上传时为 multipart/form-data
  • TCP 窗口大小:默认配置固定为 65535,可作为辅助指纹。

2. 请求体特征

  • 固定 PHP 代码头 :URL 解码后,每个请求体几乎都以 @ini_set("display_errors","0");@set_time_limit(0); 开头,这是蚁剑连接 PHP 类 Webshell 的标志性片段。
  • 参数名特征 :使用默认/自定义编码器时,参数名常以 _0x 开头(如 _0x1234=加密数据),下划线可替换为其他字符,但 _0x[A-Fa-f0-9]+ 模式稳定可匹配。
  • 明文函数调用 :未启用编码器时,请求体直接出现 eval(assert( 函数调用;Base64 编码器下,参数值长度为 4 的倍数,末尾含 == 填充的概率超过 70%。
  • 分段 Base64 :payload 分段后分别 Base64 编码,常见 z0z1 参数携带编码数据。

3. 响应体特征

  • 返回数据被随机字符串包裹,格式为 随机数+结果+随机数(如 a1cc2fb143bd7ef08da + 真实输出 + 随机数),去除混淆后 Base64 解码可见明文。

4. Snort/Suricata 检测规则示例

bash 复制代码
alert http any any -> $HOME_NET any (msg:"AntSword Webshell Detected"; \
  flow:to_server,established; \
  content:"antSword/v"; http_header; \
  sid:1000002; rev:1;)

alert http any any -> $HOME_NET any (msg:"AntSword PHP Payload Pattern"; \
  flow:to_server,established; \
  content:"@ini_set|28|\"display_errors\"|2c|\"0\"|29|"; \
  content:"@set_time_limit"; distance:0; \
  sid:1000003; rev:1;)

alert http any any -> $HOME_NET any (msg:"AntSword Param Name Pattern"; \
  flow:to_server,established; \
  pcre:"/(_0x[0-9a-fA-F]{4,})=/"; \
  sid:1000004; rev:1;)

5. 版本差异

蚁剑 2.x 默认编码器明文特征明显;通过安装 encoder 插件可切换为 AES、ROT13、Chr 编码等,加密后 _0x 参数名仍为稳定特征。


二、冰蝎 Behinder 流量特征

1. 冰蝎 2.0

  • 动态密钥协商 :首次 GET 请求服务端生成 16 位随机密钥写入 $_SESSION 并返回,响应包 Content-Length: 16
  • Accept 头固定Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2(Java HttpURLConnection 默认值,合法但少见)。
  • AES 加密:客户端用密钥对二进制 payload AES 加密后 POST 发送,服务端 Session 取密钥解密执行。

2. 冰蝎 3.0

  • 固定预共享密钥 :取消动态密钥协商,密钥为 md5("rebeyond")[0:16] = e45e329feb5d925b,全程硬编码不变,拿到即可解密全部历史流量。
  • AES-CBC 模式 :IV 硬编码为 \x00*16,密文开头出现固定模式。
  • Content-Type :JSP shell 首次请求几乎必为 application/octet-stream,正常表单/上传不会使用该值。
  • UA 轮换 :内置 10+ 个老旧 UA(如 Mozilla/4.0),同一 IP 在 3-5 秒内相邻请求切换 UA,正常浏览器不会如此。
  • 包体长度规律:命令执行类包体长度常落在 5720/5740 字节附近,无随机填充。
  • 长连接Connection: keep-alive 全程保持。

3. 冰蝎 4.0

  • 固定请求字节头dFAXQV1LORcHRQtLRlwMAhwFTAg/M(硬编码,不管选什么加密算法都出现)。
  • 固定响应字节头TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
  • 加密算法 :改为 RC4(默认 default_xor_base64 协议),仍保留默认密钥 e45e329feb5d925b
  • 源端口递增:本地 TCP 源端口从 49700 左右顺序递增,每次新会话 +1,可做时序关联。
  • PHP webshell 固定代码$post=Decrypt(file_get_contents("php://input"));eval($post);
  • 协议自定义:4.0 支持传输协议自定义功能,用户可自定义加解密算法,实现流量去中心化,默认特征可被魔改规避。

4. 检测规则示例

bash 复制代码
alert http any any -> $HOME_NET any (msg:"Behinder v4 Fixed Request Header"; \
  flow:to_server,established; \
  content:"dFAXQV1LORcHRQtLRlwMAhwFTAg/M"; \
  sid:1000010; rev:1;)

alert http any any -> $HOME_NET any (msg:"Behinder v3 Default Key in Payload"; \
  flow:to_server,established; \
  content:"e45e329feb5d925b"; \
  sid:1000011; rev:1;)

alert http any any -> $HOME_NET any (msg:"Behinder v3 application/octet-stream"; \
  flow:to_server,established; \
  content:"application/octet-stream"; http_header; \
  content:"Accept|3a| text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2"; http_header; \
  sid:1000012; rev:1;)

5. 强弱特征区分

强特征 (难绕过):固定密钥 e45e329feb5d925b、4.0 固定字节头、JSP 首次请求 application/octet-stream、源端口 49700 递增。

弱特征 (可绕过):UA 轮换、Accept: text/html, image/gif...Connection: Keep-Alive、包体长度规律。


三、哥斯拉 Godzilla 流量特征

1. 请求头特征

  • User-Agent :不修改时为 Java/1.8.0_121(具体版本取决于 JDK 环境),直接暴露 Java 客户端身份;可自定义伪装为 Chrome、Firefox 甚至 Baiduspider。
  • Cookie 末尾分号 :请求包 Cookie 字段最后一个值带分号 ;,而标准 HTTP 请求中最后一个 Cookie 值不应出现 ;,这是哥斯拉的致命强特征
  • Content-Type :默认 application/x-www-form-urlencoded

2. 请求体特征

  • pass= 起始 :请求体以 pass=(密码参数名)起始,参数名固定为连接密码(默认 pass)。
  • 加密方式
    • PHP_XOR_BASE64:密钥 = md5("key")[0:16] = 3c6e0b8a9c15224a,payload 经 URL 解码 + Base64 解码后与密钥按位异或还原明文。
    • PHP_AES_BASE64 等其他加密器:AES 密钥同样由 md5(key) 前16位派生。
  • 首次连接三包 :默认发送三个数据包建立连接,第一个请求的响应包设置 PHPSESSID;第一次请求把 PHP 函数定义代码发送到服务器存入 session,后续操作只发函数名+参数。
  • 请求包较长、响应为空:建立连接测试时请求包较大但响应包为 0。

3. 响应体特征(强特征)

  • MD5 分段结构 :整个响应包结构为 MD5前16位 + Base64数据 + MD5后16位,其中 MD5 = md5(pass+key)
    • PHP 版本为小写 MD5,Java 版本为大写 MD5。
    • 示例:72a9c691ccdaab98 + fL1tMGI4YTljMv79NDQm7r9PZzBiOA== + b4c4e1f6ddd2a
  • 解密时先剥离前后 16 位 MD5,再 Base64 解码,最后与密钥异或还原明文。

4. 静态特征

  • JSP shell:含 xcpass 字符,Java 反射代码(ClassLoadergetClass().getClassLoader()Class.forName)。
  • PHP/ASP/ASPX:为一句话木马,payload 以 godzilla 开头(部分版本)。
  • C# shell:含 System.Reflection.AssemblySystem.Security.Cryptography

5. 检测规则示例

bash 复制代码
alert http any any -> $HOME_NET any (msg:"Godzilla Cookie Trailing Semicolon"; \
  flow:to_server,established; \
  pcre:"/Cookie\x3a[^\r\n]*\x3b\s*[\r\n]/Hi"; \
  sid:1000020; rev:1;)

alert http any any -> $HOME_NET any (msg:"Godzilla Response MD5 Envelope"; \
  flow:to_client,established; \
  pcre:"/[a-f0-9]{16}[A-Za-z0-9+\/=]+[a-f0-9]{16}/"; \
  sid:1000021; rev:1;)

alert http any any -> $HOME_NET any (msg:"Godzilla Java UA Default"; \
  flow:to_server,established; \
  content:"Java/1."; http_header; \
  sid:1000022; rev:1;)

6. 加密器变体

哥斯拉内置 PHP_XOR_BASE64、PHP_AES_BASE64、JSP_AES_BASE64、CSHARP_BASE64 等 6 种加密器,AES-GCM 模式在实战中最稳;所有加密器均采用动态密钥协商机制,每次连接生成不同密钥,但响应体 MD5 分段结构在所有变体中保持一致。


检测建议与误报规避

多特征组合检测是降低误报的关键,单一特征均存在被绕过或误报风险:

  1. 蚁剑_0x 参数名 + @ini_set 代码头 + Base64 长度对齐三者组合,误报率极低;UA 单独匹配易被篡改规避。
  2. 冰蝎 :固定密钥 e45e329feb5d925b + 4.0 固定字节头为强特征,单独命中即可告警;application/octet-stream + UA 轮换 + 源端口递增组合用于 3.0 检测。
  3. 哥斯拉 :Cookie 末尾分号 + 响应体 MD5 分段结构是双重强特征,两者同时命中可高置信度告警;Java/1.x UA 单独匹配误报较高,需结合 pass= 请求体起始判断。

通用辅助特征:单一脚本文件高频 POST 请求、长连接保持、响应体熵值偏高(加密数据)、非常规端口访问等行为特征,可作为正则匹配之外的行为分析维度。对于魔改版本(魔改冰蝎打乱字节头、魔改哥斯拉修改通信协议),正则特征可能失效,需依赖行为分析与加密流量检测(如观成 ENS 类商业产品)识别。

实际护网/蓝队研判中,建议优先匹配强特征(冰蝎固定字节头、哥斯拉 Cookie 分号+MD5 响应结构、蚁剑 _0x 参数名),弱特征(UA、Content-Type、Accept)仅作为辅助加权项,避免单独触发告警造成误报。

相关推荐
小陈的进阶之路1 小时前
爬虫三大解析库:lxml, jsonpath, bs4
开发语言·笔记·python
xieliyu.2 小时前
Java 文件IO :File 文件类、字节流、字符流讲解
java·ide·笔记·javaee
天天爱吃肉82182 小时前
行业笔记|高压连接器瞬态接触退化通用检测方法论
人工智能·笔记·python·功能测试·学习·汽车
FENRON2 小时前
艺术涂料品牌怎么选?从五个维度拆解筛选逻辑
经验分享·笔记·其他
九硕智慧建筑一体化厂家2 小时前
无线动能开关|楼道电梯厅智能照明改造方案
运维·笔记·智慧城市
今儿敲了吗2 小时前
CO——指令系统
笔记
Ztt6666666663 小时前
荷口花瓶从瓶口开出一朵花
笔记·其他·百度·微信公众平台·微信开放平台
星轨初途3 小时前
LeetCode 热题 100——day7 接雨水
数据结构·c++·笔记·算法·leetcode·职场和发展
wangjialelele3 小时前
Spring Cloud 全体系学习笔记(REST、Nacos、Feign、Gateway)
java·spring boot·笔记·学习·spring·spring cloud·gateway