什么是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.111cn.net,当用户在浏览器地址栏输入上述域名,浏览器就将向DNS服务器发送查询,得到目标主机的IP地址,再与对应的主机建立一个HTTP连接,请求网页。相对于记住106.187.34.156这个IP地址,域名www.111cn.net自然更有意义、更加清晰明了。
DNS服务器使用的TCP/UDP端口号是53。
最常用的DNS记录有以下几类:
14
A记录 IP地址记录,记录一个域名对应的IP地址
AAAA记录 IPv6 地址记录,记录一个域名对应的IPv6地址
CNAME记录 别名记录,记录一个主机的别名
MX记录 电子邮件交换记录,记录一个邮件域名对应的IP地址,比如my[at]111cn.net
后面的部分111cn.net,邮件服务器对应的IP地址
NS记录 域名服务器记录 ,记录该域名由哪台域名服务器解析
PTR记录 反向记录,也即从IP地址到域名的一条记录
TXT记录 记录域名的相关文本信息
作为重要的互联网基础设施,难免成为黑客的重点攻击目标,服务的稳定性尤为重要。DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。
若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。造成整个网络的拓扑结构泄露给潜在的攻击者,包括一些安全性较低的内部主机,如测试服务器。凭借这份网络蓝图,攻击者可以节省很少的扫描时间。
大的互联网厂商通常将内部网络与外部互联网隔离开,一个重要的手段是使用Private DNS。如果内部DNS泄露,将造成极大的安全风险。风险控制不当甚至造成整个内部网络沦陷。
2) nslookup命令
笔者首先介绍DNS查询工具nslookup命令的使用。仅使用该命令,就可完成DNS域传送的测试。在windows命令提示符中输入“nslookup ?”,得到如下简略的用法说明:
d:nslookup ?
用法:
nslookup [-opt ...] # 使用默认服务器的交互模式
nslookup [-opt ...] - server # 使用 "server" 的交互模式
nslookup [-opt ...] host # 仅查找使用默认服务器的 "host"
nslookup [-opt ...] host server # 仅查找使用 "server" 的 "host"
Nslookup命令以两种方式运行:非交互式和交互式。本 文第一次提到“交互式”的概念,简单说明:交互式系统是指执行过程中允许用户输入数据和命令的系统。而非交互式系统,是指一旦开始运行,不需要人干预就可以自行结束的系统。因此,nslookup以非交互式方式运行,就是指运行后自行结束。而交互式,是指开始运行后,会要求使用者进一步输入数据和命令。
非交互式下命令的语法是是:
nslookup [-option] [hostname] [server]
Option是可选的参数,不带参数执行nslookup命令,可进入交互式shell,在shell中输入help,可查阅参数说明,如下例所示:
D:>nslookup
默认服务器: public1.114dns.com
Address: 114.114.114.114
> help
命令: (标识符以大写表示,[] 表示可选)
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命令,可以列出一个域下面所有的域名。
Hostname选项指定需要查询的主机名,比如www.111cn.net。Server选项指定DNS服务器。为了查询结果的准确,可选用几个常用的公共DNS服务器:8.8.8.8是Google提供的DNS服务,114.114.114.144和114.114.115.115是114DNS提供的免费DNS服务。
下面的例子通过114.114.114.114查询域名www.111cn.net的IP地址:
d:>nslookup www.111cn.net 114.114.114.114
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
名称: www.111cn.net
Address: 106.187.34.156
可以看到,www.111cn.net对应的IP主机是106.187.34.156。
下面的例子查询jd.com使用的DNS服务器名称:
D:>nslookup -type=ns jd.com
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
jd.com nameserver = ns1.jdcache.com
jd.com nameserver = ns4.jdcache.com
jd.com nameserver = ns1.jd.com
jd.com nameserver = ns2.jd.com
jd.com nameserver = ns3.jd.com
jd.com nameserver = ns2.jdcache.com
jd.com nameserver = ns4.jd.com
jd.com nameserver = ns3.jdcache.com
上述结果显示,京东商城的外部主DNS服务器有6个。下面的例子展示如何查询taobao.com的邮件交换记录:
D:>nslookup -type=mx taobao.com
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
taobao.com MX preference = 10, mail exchanger = mx1.alibaba-inc.com
从上表可看出,淘宝的邮件交换服务器是mx1.alibaba-inc.com。
下例反向查询一个IP地址对应的域名:
D:>nslookup -type=ptr 8.8.8.8
服务器: public1.114dns.com
Address: 114.114.114.114
非权威应答:
8.8.8.8.in-addr.arpa name = google-public-dns-a.google.com
可以得到8.8.8.8对应的域名是google-public-dns-a.google.com。
笔者继续介绍在交互式shell中发现一个DNS服务器的域传送漏洞的过程:
D:>nslookup
默认服务器: 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)其他敏感服务器
以上示例了存在漏洞的DNS服务器,若是不存在漏洞的主机,则可能提示错误Query Refused:
D:>nslookup
默认服务器: public1.114dns.com
Address: 114.114.114.114
> server ns.pku.edu.cn
默认服务器: ns.pku.edu.cn
Address: 202.112.7.13
> ls pku.edu.cn
[ns.pku.edu.cn]
*** 无法列出域 pku.edu.cn: Query refused
DNS 服务器拒绝将区域 pku.edu.cn 传送到您的计算机。如果这不正确,
请检查 IP 地址 202.112.7.13 的 DNS 服务器上 pku.edu.cn 的
区域传送安全设置。
以上是在交互式shell中测试DNS服务器是(www.111cn.net)否存在域传送漏洞。为了能够非交互式运行,笔者编写以下批处理文件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
使用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发现主机是否存活
在虚拟机中执行结果如下图所示:
图中dns-zone-transfer后面的部分列出了域中所有的记录。nmap是跨平台的扫描工具,在Linux下照常工作。若使用Ubuntu Linux,可使用apt-get install nmap安装。
4)Dig命令
在Linux下除了使用nmap扫描器,还可以用dig来测试DNS服务器是否存在域传送泄露。Dig是一个非常强大的DNS查询工具,输入“dig -h”查看它的使用说明。鉴于参数较多,以下是经过笔者精简的说明,只留下最常用的几个参数:
root@li377-156:~# dig -h
Usage: dig [@global-server] [domain] [q-type] [q-class] {q-opt}
{global-d-opt} host [@local-server] {local-d-opt}
[ host [@local-server] {local-d-opt} [...]]
Where: domain is in the Domain Name System
q-class is one of (in,hs,ch,...) [default: in]
q-type is one of (a,any,mx,ns,soa,hinfo,axfr,txt,...) [default:a]
(Use ixfr=version for type ixfr)
q-opt is one of:
-x dot-notation (shortcut for reverse lookups)
-t type (specify query type)
d-opt is of the form +keyword[=value], where keyword is:
+[no]cmd (Control display of command line)
+[no]comments (Control display of comment lines)
+[no]question (Control display of question)
+[no]answer (Control display of answer)
+[no]authority (Control display of authority)
+[no]additional (Control display of additional)
+[no]stats (Control display of statistics)
+[no]short (Disable everything except short
form of answer)
+[no]all (Set or clear all display flags)
global d-opts and servers (before host name) affect all queries.
local d-opts and servers (after host name) affect only that lookup.
-h (print help and exit)
-v (print version and exit)
一个最简单的例子,查询www.111cn.net的A记录:
root@li377-156:~# dig @8.8.8.8 www.111cn.net
; <<>> DiG 9.8.1-P1 <<>> @8.8.8.8 www.111cn.net
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28838
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.111cn.net. IN A
;; ANSWER SECTION:
www.111cn.net. 9 IN A 106.187.34.156
;; Query time: 199 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Apr 20 09:38:32 2014
;; MSG SIZE rcvd: 50
@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地址:
root@li377-156:~# dig www.111cn.net +short
106.187.34.156
若查询MX邮件交换记录,将q-type参数设定为mx:
root@li377-156:~# dig weibo.com mx +short
10 mx.weibo.com.
若通过IP反查域名,则提供-x参数,像下面的例子这样:
root@li377-156:~# dig -x 8.8.8.8 +short
google-public-dns-a.google.com.
其他ns、txt记录依次类推。若要一次性查询所有的类型,直接使用any即可:
root@li377-156:~# dig weibo.com any +short
10 mx.weibo.com.
"v=spf1 include:spf.weibo.com -all"
ns1.sina.com.cn. zhihao.staff.sina.com.cn. 1 28800 7200 604800 600
ns1.sina.com.cn.
ns3.sina.com.
ns4.sina.com.
ns3.sina.com.cn.
ns2.sina.com.cn.
ns4.sina.com.cn.
180.149.134.18
180.149.134.17
因为使用了+short参数,所以读者朋友需要注意结果中都代表了什么:
1) 第1行是MX记录
2) 第2行是TXT记录
3) 第3行是SOA记录
4) 第4到9行是NS记录
5) 第10到11行是A记录
前面介绍了dig的使用,若将查询类型设定为axfr,就能得到域传送数据。这也是我们要用来测试DNS域传送泄露的命令:
root@li377-156:~# dig @dns.nwpu.edu.cn axfr nwpu.edu.cn
; <<>> 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”即代表该服务器存在漏洞
from:http://www.111cn.net/sys/Windows/60866.htm