SQL注入过滤绕过3种实战手法对比:以CTF题目ez_sql为例
SQL注入过滤绕过3种实战手法对比以CTF题目ez_sql为例在Web安全领域SQL注入始终是最常见且危害巨大的漏洞类型之一。随着防御技术的进步各种过滤机制层出不穷但攻击者的绕过手法也在不断进化。本文将以SWPUCTF-2022的ez_sql题目为例深入剖析三种主流过滤绕过技术双写绕过、注释符绕过和大小写/编码绕过通过原理分析、实战对比和决策树构建帮助安全研究者建立系统化的绕过思维。1. SQL注入过滤机制与绕过基础现代Web应用通常会部署多种SQL注入防御措施常见过滤包括关键词过滤拦截union、select、information_schema等敏感词特殊字符过滤过滤空格、单引号、注释符等编码检测识别十六进制、URL编码等变形逻辑限制限制查询返回行数、禁用堆叠查询等以ez_sql题目为例其过滤规则如下表所示过滤类型具体规则常见防御原理关键词过滤or,union,information_schema字符串匹配或正则表达式空格过滤所有空格字符防止参数分割和语法构造注释符部分过滤#被过滤但/**/可用不完全的注释符号检测双写绕过的核心思路是利用开发人员简单的字符串替换逻辑缺陷。当过滤规则只是简单地将union替换为空字符串时构造ununionion在被过滤后仍会保留完整的union。-- 原始payload ununionion select 1,2,3 -- 过滤后实际执行 union select 1,2,32. 双写绕过技术深度解析双写绕过在ez_sql中的应用体现在多个关键环节2.1 基础绕过实现对于被过滤的information_schema使用双写变形infoorrmation_schema → information_schema实际题目中的payload构造nss-1/**/ununionion/**/select/**/1,group_concat(table_name),database()/**/from/**/infoorrmation_schema.tables/**/where/**/table_schemadatabase()/**/limit/**/1,1%232.2 技术优劣分析优势绕过简单字符串替换类过滤效果显著不需要复杂编码知识兼容大多数SQL语法环境劣势对正则表达式类过滤无效如/union/i显著增加payload长度无法绕过语法树分析类WAF2.3 实战变形技巧当基础双写被拦截时可尝试以下变体三重写unununionionion非对称双写uniounionn结合注释符un/**/ion-- 三重写示例 unununionionion select 1,2,3 -- 非对称双写 uniounionn select 1,2,3 -- 注释符结合 un/**/ion select 1,2,33. 注释符绕过技术详解注释符绕过是处理空格过滤的有效方案MySQL支持多种注释形式注释类型示例特点行内注释/*注释内容*/可插入SQL语句任意位置行尾注释--或#需URL编码为%23内联注释/*!50001特殊语法*/版本条件执行3.1 ez_sql中的注释应用题目中/**/替代空格的典型payloadnss-1/**/oorrder/**/by/**/4#等效于nss-1 order by 4#3.2 高级注释技巧版本特性利用/*!50000select*/ 1,2,3 -- MySQL 5.0.0以上执行注释嵌套/*/*!select*/*/ 1,2,3 -- 绕过简单过滤非常规注释nss-1%0aorder%0aby%0a4%23 -- 使用换行符替代空格4. 大小写与编码绕过方案当常规绕过失效时字符变形技术往往能出奇制胜。4.1 大小写变异MySQL在Windows环境下默认不区分大小写UnIoN SeLeCt 1,2,34.2 编码变形技术十六进制编码SELECT * FROM users WHERE username0x61646D696E -- 等效于 WHERE usernameadminURL编码union%20select → union select双重编码%2520 → %20 → 空格4.3 ez_sql中的编码实践虽然题目未强制要求编码绕过但实战中可以组合使用nss-1%0bUnIoN%0bSeLeCt%0b1,2,3%235. 防御与绕过决策树根据过滤类型选择最优绕过策略开始 │ ├─ 关键词过滤? │ ├─ 是 → 尝试双写绕过 │ │ ├─ 成功 → 继续注入 │ │ └─ 失败 → 尝试大小写变异 │ └─ 否 → 下一步 │ ├─ 空格过滤? │ ├─ 是 → 使用/**/或%0a绕过 │ └─ 否 → 下一步 │ ├─ 特殊字符过滤? │ ├─ 是 → 尝试编码变形 │ └─ 否 → 常规注入 │ └─ 复杂WAF? ├─ 是 → 结合内联注释和非常规语法 └─ 否 → 标准联合查询6. 实战对比与工具化思路三种技术的对比如下维度双写绕过注释符绕过大小写/编码绕过适用场景关键词过滤空格过滤复杂WAF攻击复杂度低中高检测难度易被正则捕获中等难Payload长度显著增加中等增加视编码而定工具化支持sqlmap的tamper需自定义脚本内置编码模块自动化实现建议def bypass_filter(payload, filter_rules): if union in filter_rules: payload payload.replace(union, ununionion) if in filter_rules: payload payload.replace( , /**/) if information_schema in filter_rules: payload payload.replace(information_schema, infoorrmation_schema) return payload7. 防御措施建议针对本文介绍的绕过技术推荐分层防御策略预处理机制使用参数化查询预编译语句(PreparedStatement)过滤强化递归式关键词过滤多次检测双写语法分析而非简单模式匹配纵深防御最小权限原则错误信息模糊化WAF规则定期更新在CTF竞赛和真实攻防演练中SQL注入绕过是永无止境的猫鼠游戏。理解底层原理比记忆特定payload更重要建议研究者通过搭建测试环境修改过滤规则来验证各种绕过技术的有效性从而形成肌肉记忆级的绕过思维。