AI 助教问 AI 助教
东方瑞通 · CISP-PTE

SQL 注入原理与 Union 注入

SQL 注入指攻击者通过在输入点拼接恶意 SQL 语句,改变原有查询逻辑,从而读取、篡改或删除数据库数据。

考点精讲

  1. 根本原因是用户输入未经过滤直接拼入 SQL 语句。Union 注入步骤:先用单引号、and 1=1 / and 1=2 探测是否存在注入;再用 order by 判断列数;接着用 union select 确定回显位;最后通过 information_schema 库依次查库名、表名、列名,读取数据。字符型注入还需先闭合引号。

记忆技巧

order by 判列数、union select 猜回显位
information_schema 是脱库的「目录」

常见误区

  • 以为注入只在数字型参数——字符型需先闭合引号
  • 忽略 order by 在判断列数时的作用
  • 以为 and 1=1 就是攻击——它其实是探测手段

真题思路

  • 【示例】 Union 注入的完整步骤,正确的先后顺序是() ① 用 order by 判断列数 ② 探测是否存在注入(单引号、and 1=1 / and 1=2) ③ 通过 union select 确定回显位 ④ 通过 information_schema 查库名、表名、列名并读取数据
    ①②③④ ②①③④ ③②①④ ①③②④
    答案:B
    解析:先探测注入点,再用 order by 判列数,接着 union select 确定回显位,最后借助 information_schema 查库、表、列并读取数据。正确顺序为 ②①③④。

常见问题

Q:SQL 注入产生的根本原因是什么?

A:根本原因是用户输入未经过滤或转义,直接拼接到 SQL 语句中执行,导致攻击者可控的恶意 SQL 改变了原有查询逻辑。

Q:order by 在注入中有什么用?

A:order by 用于判断查询结果的列数,通过 order by N 逐次试探,当报错时的 N-1 即为列数,为后续 union select 做准备。

Q:information_schema 库能查什么?

A:information_schema 是 MySQL 的系统库,存放库名、表名、列名等元数据,注入时可依次从中查出数据库名、表名、列名,再读取具体数据。

Q:字符型注入和数字型注入有什么区别?

A:数字型参数直接拼入 SQL,无需闭合;字符型参数用引号包裹,注入时需先闭合引号再拼接 payload。区别在于是否需要闭合引号。

相关知识

教材出处:第4章 Web 漏洞 SQL 注入原理与 Union 注入

AI 助教

让 AI 助教带你深入学习,把你卡住的地方直接问它

随时为您答疑解惑

开始答疑