DNS域传送漏洞

本文主要介绍:

1)什么是DNS?

2)使用Nslookup命令探测DNS域传送漏洞

3)使用nmap扫描DNS域传送漏洞

4)使用dig命令检测

5)使用python + Dig批量扫描漏洞主机

6)使用python实现AXFR查询

1)什么是DNS?

DNS(Domain Name System,域名管理系统)是万维网WWW的重要基础。它建立在一个分布式数据库基础之上,在这个数据库里,保存了IP地址和域名的相互映射关系。

正因为DNS的存在,我们才不需要记住大量无规则的IP地址, 而只需要知道对方计算机的名称,就可以访问对应服务。比如,笔者的博客是www.lijiejie.com,当用户在浏览器地址栏输入上述域名,浏览器就将向DNS服务器发送查询,得到目标主机的IP地址,再与对应的主机建立一个HTTP连接,请求网页。相对于记住106.187.34.156这个IP地址,域名www.lijiejie.com自然更有意义、更加清晰明了。

DNS服务器使用的TCP/UDP端口号是53。

最常用的DNS记录有以下几类:

作为重要的互联网基础设施,难免成为黑客的重点攻击目标,服务的稳定性尤为重要。DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。

若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间。

大的互联网厂商通常将内部网络与外部互联网隔离开,一个重要的手段是使用Private DNS。如果内部DNS泄露,将造成极大的安全风险。风险控制不当甚至造成整个内部网络沦陷。

 

2) nslookup命令 

笔者首先介绍DNS查询工具nslookup命令的使用。仅使用该命令,就可完成DNS域传送的测试。在windows命令提示符中输入“nslookup ?”,得到如下简略的用法说明:

Nslookup命令以两种方式运行:非交互式和交互式。本 文第一次提到“交互式”的概念,简单说明:交互式系统是指执行过程中允许用户输入数据和命令的系统。而非交互式系统,是指一旦开始运行,不需要人干预就可以自行结束的系统。因此,nslookup以非交互式方式运行,就是指运行后自行结束。而交互式,是指开始运行后,会要求使用者进一步输入数据和命令。

非交互式下命令的语法是是:

nslookup [-option] [hostname] [server]


Option是可选的参数,不带参数执行nslookup命令,可进入交互式shell,在shell中输入help,可查阅参数说明,如下例所示:

上面是笔者精简后的输出,注意两点:1) 使用type参数可以设置记录类型。 2) 使用ls命令,可以列出一个域下面所有的域名。

Hostname选项指定需要查询的主机名,比如www.lijiejie.com。Server选项指定DNS服务器。为了查询结果的准确,可选用几个常用的公共DNS服务器:8.8.8.8是Google提供的DNS服务,114.114.114.144和114.114.115.115是114DNS提供的免费DNS服务。

下面的例子通过114.114.114.114查询域名www.lijiejie.com的IP地址:

可以看到,www.lijiejie.com对应的IP主机是106.187.34.156。

下面的例子查询jd.com使用的DNS服务器名称:

上述结果显示,京东商城的外部主DNS服务器有6个。下面的例子展示如何查询taobao.com的邮件交换记录:

从上表可看出,淘宝的邮件交换服务器是mx1.alibaba-inc.com。

下例反向查询一个IP地址对应的域名:

可以得到8.8.8.8对应的域名是google-public-dns-a.google.com。

笔者继续介绍在交互式shell中发现一个DNS服务器的域传送漏洞的过程:

操作基本的步骤是:

1) 输入nslookup命令进入交互式shell

2) Server 命令参数设定查询将要使用的DNS服务器

3) Ls命令列出某个域中的所有域名

4) Exit命令退出程序

 

攻击者能获取的敏感主要包括:

1)网络的拓扑结构,服务器集中的IP地址段

2)数据库服务器的IP地址,例如上述nwpudb2.nwpu.edu.cn

3)测试服务器的IP地址,例如test.nwpu.edu.cn

4)VPN服务器地址泄露

5)其他敏感服务器

以上示例了存在漏洞的DNS服务器,若是不存在漏洞的主机,则可能提示错误Query Refused:

以上是在交互式shell中测试DNS服务器是否存在域传送漏洞。为了能够非交互式运行,笔者编写以下批处理文件ls.bat:

echo ls %1 | nslookup – %2

为了测试dns.nwpu.edu.cn服务器,可以执行ls.bat nwpu.edu.cn dns.nwpu.edu.cn。 批处理中:

1) %1代表第一个参数,也即nwpu.edu.cn

2) %2代表第二个参数,即dns.nwpu.edu.cn

3) Echo是回声命令,原文输出传入的参数内容

4) “|”是管道符号,作用是把前一个命令执行的结果传给后一个命令。因此:执行ls.bat nwpu.edu.cn dns.nwpu.edu.cn,等价于执行echo ls nwpu.edu.cn | nslookup – dns.nwpu.edu.cn。

5) nslookup -dns.nwpu.edu.cn是指定DNS服务器为dns.nwpu.edu.cn

 

到此,nslookup命令介绍结束。读者朋友可反复练习以熟悉它的用法。

本篇将介绍使用nmap扫描器和dig来得到DNS Zone Transfer记录。

3)使用nmap扫描DNS域传送泄露漏洞

使用nmap扫描器附带的脚本,可以扫描DNS服务器是否存在域传送漏洞。语法为:

对上述命令命令说明如下:

  1. nmap –script dns-zone-transfer表示加载nmap文件夹下的脚本文件dns-zone-transfer.nse,扩展名.nse可省略
  2. –script-args dns-zone-transfer.domain=zonetransfer.me向脚本传递参数,设置列出记录的域是nwpu.edu.cn
  3. -p 53设置扫描53端口
  4. -Pn设置通过Ping发现主机是否存活

在虚拟机中执行结果如下图所示:

nmap-dns-transfer
图中dns-zone-transfer后面的部分列出了域中所有的记录。nmap是跨平台的扫描工具,在Linux下照常工作。若使用Ubuntu Linux,可使用apt-get install nmap安装。

4)Dig命令

在Linux下除了使用nmap扫描器,还可以用dig来测试DNS服务器是否存在域传送泄露。Dig是一个非常强大的DNS查询工具,输入“dig -h”查看它的使用说明。鉴于参数较多,以下是经过笔者精简的说明,只留下最常用的几个参数:

一个最简单的例子,查询www.lijiejie.com的A记录:

@8.8.8.8.8指定DNS服务器,如果使用系统默认DNS,可不提供。参数q-type指定查询类型,默认值为A记录,也可不提供。

上述查询结果非常详尽,分作多个区块,为了让初次接触dig的读者不至于陷入迷糊,分别说明:

1) 3到5行是cmd区块,通过添加+nocmd参数,可以不显示

2) 6到8行是comments区域,通过+nocomments参数控制不显示

3) 10到11行是question区域,通过+noquestion参数控制不显示

4) 13到14行是answer区域,通过+noanwser参数控制不显示

5) 16到19行是stats区域,通过+nostats参数控制不显示

如果不想查看详细结果,那么可以使用+short参数只查看answer区域的精简结果。下面的例子查询A记录,就只显示一个IP地址:

若查询MX邮件交换记录,将q-type参数设定为mx:

若通过IP反查域名,则提供-x参数,像下面的例子这样:

其他ns、txt记录依次类推。若要一次性查询所有的类型,直接使用any即可:

因为使用了+short参数,所以读者朋友需要注意结果中都代表了什么:

1) 第1行是MX记录

2) 第2行是TXT记录

3) 第3行是SOA记录

4) 第4到9行是NS记录

5) 第10到11行是A记录

前面介绍了dig的使用,若将查询类型设定为axfr,就能得到域传送数据。这也是我们要用来测试DNS域传送泄露的命令:

请注意,参数axfr后跟需要列出的域的名称。上面的例子是nwpu.edu.cn。只要命令输出中存在“XFR size”即代表该服务器存在漏洞。

posted @ 2018-06-14 14:55  dajjjj  阅读(633)  评论(0)    收藏  举报