Skip to content
Kurisu
Go back

SQL 注入绕过手册:从空格逗号到雷池 WAF

基础系列只提了一句绕过,WAF 绕过笔记是防守方视角。这篇按绕过分类学讲。

0x01 五类基础绕过速查(多数实战已失效)

被过滤等价替换
空格/**/ 注释、%0a %0b %09(换行/制表)、括号包裹
引号十六进制字面量(0x61646D696E 代替 'admin')
逗号JOIN 替代 UNION SELECT;substr(str FROM 1 FOR 1) 替代 substr(str,1,1);LIMIT 1 OFFSET 0 替代 LIMIT 0,1
大小写Or/oR/And 变形;关系运算符 > < = 替代 AND/OR 逻辑
函数名substr → MID/LEFT/RIGHT;同类功能函数替换

双写绕过针对 replace 删除式过滤:过滤 and 时输入 anandd,删中间 and 后剩 and;过滤 on 时 iinformationn_schema 同理。前提是单轮 replace 无循环。

现代 WAF 面前这五类基本全失效(Fly Lab 21-30 关练完就该放下),但仍有人用,因为它们考察”过滤发生在哪一层”。

0x02 还活着的手法

内联注释与正则回溯

MySQL 方言 /*!50000and*/ 在部分规则下可过;更通用的是正则回溯(反序列化篇的机制):WAF 用 preg_match 检测时垫百万级字符耗尽 pcre.backtrack_limit,返回 false 被当成”未匹配”——真实案例正是这样过拦截拿到管理员数据的。

十六进制子查询

引号被拦时,子查询结果以十六进制传递再 unhex 还原,绕开对引号内容的检测。

为什么”塞垃圾字符撑爆长度限制”不现实

前垫几万字符指望长度限制放行后半段:专业 WAF 处理几万字符无压力;对自己写的简陋脚本(strlen 判断)有时能过。

0x03 雷池与长亭系 WAF 的绕过策略

用雷池旧版本复现,策略三条:

  1. 找解析差异而非规则漏洞:WAF 与后端对同一 payload 解码不一致(URL 二次编码、分块传输、参数污染 ?id=1&id=2)才是高价值点;
  2. 盯检测引擎的资源模型:正则引擎有回溯上限、静态引擎靠关键词匹配;
  3. 绕不开就走别的口:拦 GET 就转 POST,主站拦就找无防护的子域/内部系统(实战案例的”主站 412 拦截→换突破面”)。

0x04 常见追问

相关旧文


Share this post:

Previous Post
PHP 反序列化进阶:Session 不一致与 phar
Next Post
无字母数字 RCE:16 字符限制下的命令执行