写在前面:合法学习边界
本文从蓝队/检测视角分析 WebShell 工具流量特征。掌握特征用于防守与授权测试,禁止用于入侵真实系统。
一、为什么看流量
WebShell 上线后,管理工具会持续与服务器通信。无论流量加密与否,都会留下可识别的指纹。蓝队通过流量特征能在工具连接阶段就发现 Webshell,而不是等文件扫描。
二、菜刀(CaiDao)特征
老一代工具,明文传输,特征最明显:
1
2
3
4
| 请求体含 eval / assert / base64_decode / create_function
固定一句话结构:@$_POST['密码']
明文 base64 编码的命令与结果
Content-Length 较固定、UA 常为默认浏览器 UA
|
检测要点:
1
2
| 抓包找 base64 + eval/assert 组合
特征字符串:@eval、@assert、@$_POST、base64_decode
|
三、蚁剑(AntSword)特征
新一代,流量做了混淆,但仍有特征:
1
2
3
4
| 默认 UA 含 antSword(可改)
请求体常见 @ini_set("display_errors","0") 开头
固定结构:@ini_set 系列 + eval/assert 执行
PHP 版本响应含 phpinfo/函数特征
|
检测要点:
1
2
3
| UA 命中 antSword
请求体出现 @ini_set("display_errors" ... 固定载荷
配合 eval/assert 关键字组合命中
|
四、冰蝎(Behinder)特征
AES 加密流量,但加密前有固定结构:
1
2
3
4
5
| 默认密钥 3cb8b8f1e0f9d4c9... 可被识别
请求为固定 AES 密文(base64)
Content-Length 相对固定
UA 常用 Mozilla/5.0 默认、连接特征稳定
服务端脚本固定:@session_start + 解密执行
|
检测要点:
1
2
3
| 流量解密(用默认密钥)后还原命令
密文长度/固定 base64 特征
尝试用默认密钥字典解 rememberMe/密文
|
五、哥斯拉(Godzilla)特征
Java 编写,多语言,加密但结构固定:
1
2
3
4
| payload 固定特征字符串(如特定密钥串/开头)
握手与响应密文长度固定
默认密钥在生成时写入脚本
请求带固定参数结构与固定密文
|
检测要点:
1
2
3
| 特征字符串扫描(流量 + 文件)
密文长度/结构指纹
解密验证(默认密钥)
|
六、通用检测方法
1
2
3
4
5
| 1. 特征库:UA、固定载荷、关键字(eval/assert/base64_decode/@ini_set)
2. 加密流量:用默认密钥解密还原
3. 行为分析:异常高频请求、固定间隔回连
4. 文件侧:扫描特征脚本与内存马
5. 日志侧:可疑上传 + 持续访问单个脚本
|
七、检测与防御(落地)
1
2
3
4
| 部署 WAF/流量审计,加载四类工具特征规则
对上传目录重点监控
EDR 检测内存马与进程行为
定期解密流量样本复核
|
八、小结
四类工具从“明文(菜刀)”到“加密(冰蝎/哥斯拉)”,趋势是越来越隐蔽,但默认特征始终存在。蓝队的核心是把特征库 + 解密 + 行为分析结合起来,才能在不同加密程度下都识别 Webshell。