基础系列只提了一句绕过,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 的绕过策略
用雷池旧版本复现,策略三条:
- 找解析差异而非规则漏洞:WAF 与后端对同一 payload 解码不一致(URL 二次编码、分块传输、参数污染
?id=1&id=2)才是高价值点; - 盯检测引擎的资源模型:正则引擎有回溯上限、静态引擎靠关键词匹配;
- 绕不开就走别的口:拦 GET 就转 POST,主站拦就找无防护的子域/内部系统(实战案例的”主站 412 拦截→换突破面”)。
0x04 常见追问
- 绕过深度是被试探的点:答基础五类=知道,答回溯/解析差异=打过;
- “SSL 绕过”是伪命题:TLS 算法本身不可破,能绕的只是实现层校验;
- 先问清拦的是哪一层(网络层 WAF?应用层正则?主机 HIDS?)再给方案。