您的位置:首页 > 数据库

SQL Inject漏洞手动测试:基于union联合查询的信息获取

2019-03-27 23:23 330 查看

union联合查询,简单来说就是可以通过联合查询来查询指定的数据
用法举例:

select username,password from user where id=1 **union** select 字段1,字段2 form 表名

注意,联合查询的字段数需要和主查询一致!如果字段数不一样的话会报错。
先讲一下union的原理

这是一条正常的查询
之后我们这样输入,

select id,eamil from member where username='kobe' union select username ,pw from member where id=1;

这一整条语句的意思就是,先执行前面正常的语句,同时,会把后面的句子联合一起查询出来
显示结果

上面一行就是正常查询的结果,下面一行就是后面句子查询的记录
我们在数据库中输入一些select参数可以得到数据库的名称,用户地址,数据库对应的版本
那么如果我们想通过sql注入来获取这些信息,我们可以在pikachu上试一下

以字符型注入为例,其他的都是一个原理,只不过闭合可能会有所区别

我们还是按照闭合原理,进行union的输入,但这时候我们发现我们不知道后台的字段有几个,我们只能猜测主查询有几个字段,只有把字段数猜出来,我们才能正确的去拼接union,那么我们如何来猜字段数呢?
可以用order by,order by在sql中为排序表达式,用于指定排序的依据,它可以是字段名也可以是字段别名,我们可以不对order做其他的命令,只是指定它的排序对象,来实现对字段数的猜测
order by 一般默认 数字1到9,字母a到z来排序,我们先输入order by 1

显示正常 没有报错 ,再输入order by 2

发现他还是显示正常的,此时是指定第二列来进行排序,这说明第二列是存在的,再来试试order by 3

发现SQL报出了错误,因为其实我们在前面已经select了两个字段,所以字段就是两个,没有第三个字段,这时指定第三个字段来进行排序,那肯定是要报错的,黑客就会依据order by 的查询功能来猜测出,这里的字段是两个。
我们来回到pikachu,首先要做的事情就是对字段进行猜测,运用刚才的原理,先猜测,可能有5个字段。

点击查询后,发现页面报出了错误。。第五列不存在

那么我们可以仿照二分法的模式,再来试试order by 3

网页显示第三列不存在
再试试2

这回没有报错,也就意味着这个order by 已经正常执行了,3不存在,2存在,就意味着我们的主查询只有两个字段,用order by 猜到了主查询的字段数之后 我们就可以union进行拼接, 因为只有两个字段,我们就随意输入两个字段,比如查询 database()和user()

成功查出了数据库名称和当前用户的权限

我们还可以去查询别的东西,或者随意打印一个字符让他打印出来

我们可以用union来获取数据库的很多基础信息

MYSQL小知识补充:information_schema

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐