利用DNS协议进行信息获取

Dns协议简述

DNS协议是什么无需赘述,对于域名的访问需要先通过DNS协议,在DNS服务器上获得相关的信息。

要通过dns协议获得信息,首先需要了解的是信息的在dns服务器上的组织方式。

信息在服务器上被组织成条目的形式,按记录类型分类。比较主要的有A,MX,SOA,NS等类型,具体可查看域名服务器记录类型列表

A

IP地址记录,即我们最常使用的域名->ip映射。

MX

邮件交换地址, 说明某个后缀(@后面的部分)代表的邮件该查询的服务器(以域名表示)。同时会附带其优先级.

NS

名称记录服务器,它将某一个DNS zone(域名的某个特定子集,往往是特定后缀,如*.abc.com)委托到了另一个权威服务器。大型的局域网为了与外部互联网隔离,往往会使用private DNS,可供内部域名使用。再对外注册后,便是对本DNS zone的权威服务器。

PTR

指针记录,通常用于反向DNS查询,当然不必对此抱有太高的期待,ip->域名的映射往往不是那么简单就能搞定的。

CNAME

某个域名的别名,类似于c++中的引用。将一个域名指向另外一个域名。

SOA

指定该DNS zone的权威信息,包含主NS,管理员的邮件地址,和一些其它信息。

dig 命令

与DNS有关的重要指令有dig和nslookup,个人认为dig的形式更优雅易用一些。

其形式为:dig [@DNS_Server] domain_to_query [-t RECORD_TYPE]

默认情况下会采用本地的/etc/resolv.conf文件中的dns服务器地址,可用@指定,如dig @8.8.8.8 baidu.com便是用google的dns服务器来解析baidu.com这个域名。当然,这个ip正常手段是访问不到的。

使用-t可以指定查询的类别,即上面所说的A,NS,PTR等等。

还有另外一些用于控制输出格式和内容的选项,可以在manpage当中找到。通常以+开头,如+short可以输出最简短的结果。

Dns域传送漏洞

所谓域传送漏洞, 指的是private dns配置不当的情况下,主服务器和备份服务器之间传送数据的协议可能被外部利用,使得入侵者可以轻松获得该dns zone的全部网络拓扑信息。

nslookup在linux发行版中(至少在我看过的kali和ubuntu两个版本当中)都像netcat一样,提供了一个去掉了危险功能的阉割版。查看manpage可以看到大段的not implemented.这也是选择dig的一个重要原因。

dig当中用-t指定axfr便可进行域传送漏洞的检测,如果存在的话会刷出一大堆DNS记录。

dig @dns.nwpu.edu.cn -t axfr nwpu.edu.cn

上面给出了一个到现在为止都能成功的例子,这个网站的域传送漏洞在乌云上已经能找到三条记录了。

Dns暴力枚举

暴力枚举不是一个很有美感的行为……但往往是很有效的行为。

kali上提供了好几个可以进行枚举的工具,在使用它们之前要记住,效果如何很大程度上取决于能提供一本多大的字典:

dnsenum

感觉这个是最强大的了,输出格式漂亮,把一大票的功能整合到了一起,一键收割,包括之前说到的域传送。

dnsmap

简单朴素的暴力枚举子域名。不过似乎没有多线程

dnsdict6

很奇怪的名字,相当于多线程版本的dnsmap

当然还有别的,不过没用过。

IP反查

通过初始域名->域传送->暴力枚举这样的步骤,应当已经获得了一大批的域名和对应的ip了。接下来的环节是:通过已经获得的ip找到更多的ip。

概况来讲,就是根据已经有的ip获得c段子网地址,再遍历子网中每一个ip,对其进行ip反查,试图获得有价值的隐藏域名。

反查是最关键的一步。上面有说到可以通过PTR记录反查,不过这样的反查成功率不高。实测比较好的一个方案是通过bing搜索引擎的ip:a.b.c.d功能。比较拙计的是,这个功能对于大陆查询者来说是禁止使用的,只能挂代理。如果不想挂代理,也可以使用aizhan,不过它的准确率似乎比较低。