SQL注入如何绕过WAF防护?
Web 安全攻防实战:SQL 注入从入门到精通
WAF就像网络安全的前门保安,但总有些"不速之客"能找到后门。2024年OWASP报告显示,超过60%的Web应用部署了WAF,但成功绕过的攻击案例反而同比增长了23%。这个数字背后,是攻防双方持续升级的技术较量。
编码变形的艺术
WAF规则库通常基于正则表达式匹配恶意字符串,但编码技术能让攻击载荷"改头换面"。攻击者会使用URL编码、Unicode编码甚至双重编码来混淆关键字。比如简单的UNION SELECT可以变成%55%4e%49%4f%4e %53%45%4c%45%43%54,这种十六进制表示往往能骗过基础规则。
更狡猾的是,攻击者会混合使用多种编码方式。某个真实案例中,攻击者将SELECT拆分成SEL+ECT,中间插入注释/**/,再对每个片段进行URL编码,最终形成%53%45%4c/**/%45%43%54。这种"分片编码"技术让基于完整关键词匹配的WAF完全失效。
语法重写的诡计
SQL语言的灵活性为攻击者提供了丰富的改写空间。同样的查询意图可以通过多种语法实现,而WAF很难覆盖所有变体。
- 注释符滥用:
UNION/**/SELECT、UNI/*xxx*/ON SELECT - 空白符替代:使用制表符
t、换行符n替代空格 - 大小写混合:
UnIoN SeLeCt这种随机大小写组合 - 字符串拼接:
CONCAT('sel','ect')替代直接的关键字
去年某金融系统被攻破的案例就很典型。攻击者使用UNION(SELECT(1),2)这种括号语法替代传统的UNION SELECT 1,2,成功绕过了该WAF的135条相关规则。
时间延迟的潜行
当直接回显被阻断时,时间盲注成为穿透WAF的利器。攻击者通过SLEEP()、BENCHMARK()等函数构造条件延迟,根据响应时间差异推断数据内容。
现代攻击已经发展到多级延迟的精细操作。比如先通过IF(ASCII(SUBSTRING(database(),1,1))>100,SLEEP(3),0)判断数据库首字母的ASCII码,再逐步缩小范围。这种"二分法盲注"虽然速度较慢,但几乎无法被传统WAF检测,因为每个请求看起来都像是正常的业务查询。
协议层面的伪装
真正的高手会在HTTP协议层面做文章。分块传输编码(Chunked Transfer Encoding)允许攻击者将恶意载荷拆分成多个数据块发送,WAF可能因为无法重组完整数据而放行。
还有更隐蔽的Multipart/form-data攻击,将SQL注入载荷隐藏在文件上传字段中。某个电商平台就曾中招,攻击者通过商品图片上传功能,在文件名参数中注入SQL代码,因为该字段通常不受WAF严格审查。
攻防博弈永远不会停止。WAF厂商在更新规则,攻击者在寻找新漏洞。真正的安全不能依赖单一防护,必须建立纵深防御体系。参数化查询、最小权限原则、输入验证这些基础措施,反而比昂贵的WAF更能从根本上解决问题。

参与讨论
这不就是猫捉老鼠的游戏嘛,防不住也正常🤔