HW 中如何利用 WAF 缺陷进行绕过
字数 1680 2025-08-19 12:40:48
WAF绕过技术深度解析
1. 利用WAF性能缺陷的绕过技术
1.1 垃圾字符填充技术
- 原理:利用WAF对超大/超长数据包检测的性能限制
- 实现方法:
- 在恶意payload前后填充大量无意义字符
- 例如:
/index.php?id=1/**/union/**/select/**/1,2,3,4/**/from/**/admin+ 大量垃圾字符
- 适用场景:通用型软WAF,特别是资源有限的部署环境
1.2 高并发请求攻击
- 原理:利用WAF在高负载下可能放行部分请求的特性
- 实现方法:
- 使用多线程/多进程同时发送大量请求
- 结合延时技术增加成功率
- 注意事项:
- 需要控制请求频率避免触发DDoS防护
- 建议结合其他绕过技术使用
2. 利用WAF适配组件缺陷的绕过
2.1 IIS+ASP环境特性
- 关键特性:IIS+ASP会忽略无效的百分号编码
- 绕过示例:
xxx.asp?id=1 union se%lect 1,2,3,4 fro%m adm%in- WAF可能看到:包含%的异常语句
- 后端实际执行:
union select 1,2,3,4 from admin
2.2 Tomcat特性利用
2.2.1 空白字符插入
- 可用空白字符:
%20 %09 %0a %0b %0c %0d %1c %1d %1e %1f - 示例:
%20filename%0a="1.jsp"
2.2.2 编码转换绕过
- UTF-16编码:
- 将关键payload转换为UTF-16编码形式
- CP037编码:
- 示例:原始payload
' and (7=len(db_name())) and 'a' = 'a - 转换为CP037编码形式
- 示例:原始payload
2.2.3 JSON Unicode编码
- 实现方法:
- 将关键字符转换为
\uXXXX形式 - 例如:
select→\u0073\u0065\u006c\u0065\u0063\u0074
- 将关键字符转换为
3. 利用WAF协议适配缺陷的绕过
3.1 畸形HTTP请求
- 方法1:修改请求头为随机字符串
xxxxT / HTTP/1.1 - 方法2:请求方法后添加空字符
GET%09/ HTTP/1.1 - 方法3:GET请求携带POST体
- 需要服务端支持解析
3.2 分块传输技术
- 基本方法:
- 使用Transfer-Encoding: chunked
- 将payload分割为多个小块
- 高级技巧:
- 延时分块传输:在各chunk之间增加时间间隔
- 使用工具:chunked-coding-converter
3.3 非预期请求方式
- Content-Type切换:
application/x-www-form-urlencoded→multipart/form-data
- HTTP方法切换:
- GET ↔ POST切换尝试
- Header顺序调整:
- 改变标准Header顺序
4. 直接绕过WAF的访问技术
4.1 寻找真实IP绕过云WAF
- 技术方法:
- 证书查询:通过myssl.com等平台查询
- DNS历史记录:查询历史解析记录
- 子域名/C段扫描:
- 重点扫描未部署WAF的子域名
- 超级Ping:使用多地Ping服务
- 实施步骤:
- 获取真实IP后修改hosts文件直接访问
4.2 寻找未部署WAF的反代节点
- 操作流程:
- 识别服务器IP段
- 扫描同C段其他服务器
- 测试是否存在可用的反向代理节点
- 通过该节点访问目标服务
5. WAF白名单利用技术
5.1 IP白名单绕过
- 技术实现:
- 伪造X-Forwarded-For等头部
- 使用工具:burpFakeIP
- 常见伪造IP:
127.0.0.1- 内网IP段地址
5.2 爬虫User-Agent伪造
- 常见爬虫UA:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html) - 实施要点:
- 收集各大搜索引擎爬虫UA
- 根据目标业务特点选择合适的UA
6. 综合绕过策略建议
-
环境探测先行:
- 确定WAF类型和版本
- 识别后端服务组件和版本
-
组合技术使用:
- 例如:分块传输+编码转换+延时传输
-
自动化工具辅助:
- 使用WAF测试工具如WAFW00F识别WAF
- 利用自动化脚本测试多种绕过方式
-
流量分析验证:
- 对比拦截和放行的请求差异
- 分析WAF规则匹配模式
-
持续更新技术库:
- 跟踪最新WAF绕过技术
- 研究特定WAF产品的独有特性