Web渗透测试之SQL注入:Level9--时间盲注
前言
在上一篇我们提到了传统上盲注可由判断注入情况的表征不同可划分为布尔盲注和时间盲注,本篇将围绕时间盲注进行讲解。
题目分析
题目首页如下:
加上单引号结果:
相比于上次(Level8),这次加上单引号后既没有打印报错信息,也没有出现异常页面,猜测做了过滤。继续输入双引号:
结果同单引号,难道不存在漏洞?无奈只能拿SQLMap扫描确认了。扫描结果如下:
确实存在注入漏洞且闭合符为单引号,接下来尝试采用时间盲注进行渗透测试。那什么是时间盲注呢?
时间盲注
上篇的布尔盲注依据页面返回true和fault判断注入语句执行的情况,而在时间盲注中利用的则是时间差。在设定好时间延迟的情况下,如果页面立即返回则等价于布尔盲注中的fault,如果页面按照设定时间延迟返回则等价于布尔盲注中的true。
时间盲注常用函数
时间盲注常用的函数在布尔盲注常用函数的的基础上加上sleep函数即可。
sleep():按照指定时间休眠后再次启动,参数单位为秒。
示例
依旧以获取数据库名为例。先确定库名长度,语句如下:
'and (if((length(database()))<10,sleep(5),null)) - -+
该语句的含义为如果库名长度小于10,则执行sleep(5),否则什么也不做。
结果如下:
无论是视觉感受还是查看控制台,都可以确定页面返回时延迟了5秒,因此库名应小于10。之后的操作与布尔盲注一致。
总结
在时间盲注中依据是否存在时间延迟来判断语句的执行情况,存在延迟则相当于布尔盲注中的true,不存在延迟则相当于fault。时间盲注在核心思想上与布尔盲注并无区别,只不过二者用来判断语句执行情况的表征不同罢了。
以上就是本篇的全部内容,我们下篇见。