一、原理:

DNSLOG算是外带的一种方式,为什么能够外带呢?网上大多数解释都是比较官方的,我这里给大家举一个例子比较容易懂。

假设我现在的域名是:creatapd.com

对于这个域名我可以有很多子域名,比如我现在博客的www.creatapd.com,和之前的tools.creatapd.com。

根据域名设置的不同,指向不同的服务器IP地址,获取不同的服务。那么现在问题来了,是谁提供的DNS->IP的映射工作呢?其实就是DNS服务器。DNS服务器能够接受域名并返回对应的IP地址。

接下来我们来看一个payload:

这个payload解析之后过来其实是

whoami在命令行中解析了,所以其实我们ping的是root.creatapd.com。当我们去请求这个域名的时候,就会被我们所设置的DNS服务器所捕获,也就能成功获取到命令执行后的结果了。

那到底怎么利用DNSLog进行注入呢?其实只要是能够发出请求的地方都可以用这种方式获取数据。

因为DNSLog注入的本质:依靠域名解析,把带有payload解析后的域名向DNS服务器请求,从而获取payload解析后的数据。

二、DNSLog利用平台

1、 http://www.dnslog.cn

2、 http://admin.dnslog.link

3、 http://ceye.io

4、burp collaborator

点击Copy to Clipboard获取一个标识
比如我这里获取到的就是s6z9p5lykbxh0m8wx3vy44qg278xwm.burpcollaborator.net
然后用这个外带就行了

5、自己搭建DNSLog服务器:https://github.com/BugScanTeam/DNSLog

三、MYSQL盲注回显

不管是布尔型还是时间型盲注,都需要频繁的跑请求才能够获取数据库中的值,在WAF的防护下,很可能导致IP被Ban。
盲注时,我们可以用load_file()完成DNSLOG。

原因:load_file()函数可以加载本地文件的同时,也能对\www.xxx.com\aa这样的URL发起请求。

1、load_file()函数有限制

①使用show variables like ‘secure_file_priv’;查看load_file()的范围

在my.ini中修改secure_file_priv=””

当secure_file_priv为null的时候,不允许。
当secure_file_priv为某个值的时候,表示只允许那个目录下。
当secure_file_priv为空时候,可以load_file任意磁盘的文件。

②其次,数据库用户必须有file_priv权限

2、同时DNSLOG注入的Web服务器必须是windows操作系统,因为UNC是windows特有的。

3、如果查询的数据中出现了非字母数字的特殊字符,需要进行转义,这里用16进制。
原因看看dns结果就能知道,如果出现如逗号,@符号等特殊符号,不能形成标准的dns域名,无法发出数据。

4、几个例子

a. 数据库中直接操作

b. 某个盲注场景取数据

取数据