笔记网易微专业-Web安全工程师-04.WEB安全实战-8.SQL盲注

Posted KPlayer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了笔记网易微专业-Web安全工程师-04.WEB安全实战-8.SQL盲注相关的知识,希望对你有一定的参考价值。

上一节我们在实战中介绍了SQL注入的原理和危害,这一节我们要实战SQL盲注,与普通的SQL注入相比,数据库返回的结果不会显示在页面上,只会返回成功/失败或者真/假,这无形中加大了我们注入的难度。

SQL盲注的一种思路:采用where语句“真and真=真”,“真and假=假”,把我们需要确定的条件放在and之后,当我们的猜测为真那么返回为真,猜测错误则返回为假。具体怎么应用呢?我们在实战中学习。

 

DVWA实战:

1. 打开phpStudy或xampp,运行Apach和mysql

2. 浏览器进入DVWA主界面,在左侧栏选择DVWA Security安全等级为Low,然后进入SQL Injection(blind);

技术分享图片

我们发现当我们输入ID后,只返回告诉我们该用户存不存在。如果我们输入1‘ and ‘1024‘=‘1024,提示存在,因为‘1024‘=‘1024‘为真,如果是1‘ and ‘1024‘=‘1025,则提示不存在。

利用上述的方法,我们可以尝试获得数据库名的长度,输入:

1‘ and length(database())=1 #  提示不存在

1‘ and length(database())=2 #  提示不存在

1‘ and length(database())=3 #  提示不存在

1‘ and length(database())=4 #  提示存在

这样我们就知道数据库名的长度为4,接下去就是一个个猜测数据库名,以第一个字符为例,输入:

1’ and ascii(substr(databse(),1,1))>97 # 第一个字符的ascii值大于97(即小写a)

提示存在,说明第一个字符ascii是大于a的,我们采用二分法逐一缩小范围,最终获得第一个字符为小写d,采用同样的方法,能把4个字符都试出来:dvwa

采用这样的思路,我们能像上一节一样获得字段名,表明,数据库名,用户,密码等信息,但是我们发现相比上一节,盲注需要的劳动力更大,更繁琐,因此sqlmap是解放劳动力的神器。

除了以上这种思路,我们还有另外一种方法,就是延迟注入,即当条件为真时,延时返回:

1’ and if(length(database())=4,sleep(5),1) #,报文延迟,说明if条件为真,数据库名的长度为4个字符;

3. 关于medium,high和impossible等级的SQL盲注,思路跟上一节差不多,这里就不再赘述了。

以上是关于笔记网易微专业-Web安全工程师-04.WEB安全实战-8.SQL盲注的主要内容,如果未能解决你的问题,请参考以下文章

笔记网易微专业-Web安全工程师-04.WEB安全实战-3.命令注入

笔记网易微专业-Web安全工程师-04.WEB安全实战-5.文件包含

笔记网易微专业-Web安全工程师-04.WEB安全实战-9.XSS

笔记网易微专业-Web安全工程师-04.WEB安全实战-4.CSRF

笔记网易微专业-Web安全工程师-04.WEB安全实战-7.SQL回显注入

笔记网易微专业-Web安全工程师-04.WEB安全实战-8.SQL盲注