渗透测试人员能够在目标的域名系统(DNS)中找到一个目标信息宝库。DNS是网络的关键组成部分,尽管它的设计目的是将域名解析为IP地址,但渗透测试人员仍可以利用它来收集目标信息。
DNS是负责将一个形如hackers-arise.com的域名解析为对应IP地址的服务。只有这样,系统才能明白如何抵达域名所指向的主机。如果没有DNS,我们就只能记下成千上万个感兴趣站点的IP地址——即使对一个专家而言,这个工作量也不轻松。
对于立志从事网络安全工作的人来说,最有用的命令之一就是dig,它为搜集目标域的DNS信息提供了一种方法。存储的DNS信息是攻击之前早期侦察需要获取的关键内容。这些信息可能包括了目标的命名服务器(即负责将目标名称解析成一个IP地址的服务器)IP地址、目标的邮件服务器,以及可能存在的任何子域及其IP地址。
例如,输入dig hackers-arise.com命令并加上ns选项(命名服务器的缩写)。hackers-arise.com的命名服务器将在代码清单3-3的ANSWER SECTION(回复区域)中显示。
代码清单3-3 利用dig命令及其ns选项来获取域命名服务器的相关信息
同时,dig命令查询到的ADDITIONAL SECTION(附加区域)部分的信息,揭示了为hackers-arise.com提供服务的DNS服务器的IP地址(216.239.32.100)。
你还可以利用带有mx选项(mx是邮件交换服务器的缩写)的dig命令,来获取与域相连的邮件服务器的相关信息。这方面的信息对于针对邮件系统开展攻击测试至关重要。例如,www.hackers-arise.com邮件服务器的相关信息将在代码清单3-4的AUTHORITY SECTION(授权区域)中显示。
代码清单3-4 利用dig命令及其mx选项来获取域邮件交换服务器的相关信息
Linux系统上最为流行的DNS服务器是伯克利互联网命名域(Berkeley Internet Name Domain, BIND)。在某些情况下,Linux系统用户会将BIND直接视为DNS,而不会产生困惑:DNS和BIND都能够将个人域名映射为IP地址。
在某些情况下,你可能会想要使用另一个DNS服务器。要完成这项工作,你需要对系统中一个名为/etc/resolv.conf的明文文件进行编辑。在一个文本编辑器中打开这个文件——我用的是Leafpad。然后,在命令行中输入准确的编辑器名称,后面接上文件路径及其名称。例如:
以上输入将在我所指定的图形化文本编辑器Leafpad中打开/etc目录中的resolv.conf文件。该文件如图3-1所示。
图3-1 在一个文本编辑器中打开的正常resolv.conf文件
如你在第3行所见,我的命名服务器被设置为一个本地DNS服务器,其IP地址为192.168.181.2。它工作状态良好,但是如果想要将DNS服务器添加或替换为其他类型,比如谷歌公司IP地址为8.8.8.8的公共DNS服务器,那么我可以在/etc/resolv.conf文件中添加如下内容来指定命名服务器:
然后我只需要保存该文件即可。然而,你也可以输入如下内容,从而完全通过命令行来实现同样的结果:
这条命令会回显字符串nameserver 8.8.8.8,并将其重定向(>)输出到文件/etc/resolv. conf中,从而代替现有的内容。现在,你的/etc/resolv.conf文件应该如图3-2所示。
图3-2 修改resolv.conf文件来指定谷歌公司的DNS服务器
现在如果打开/etc/resolv.conf文件,那么你会看到它将DNS请求指向了谷歌公司的DNS服务器,而不是你本地的DNS服务器。现在,你的系统将向外访问谷歌公司的公共DNS服务器,从而将域名解析为IP地址。这可能意味着,域名解析将耗费稍微长一点的时间(可能需要若干毫秒)。因此,要在继续使用一个公共服务器的同时保证速度,你可能需要在resolv.conf文件中保留一个本地DNS服务器,并在其后接上一个公共DNS服务器。操作系统会按照DNS服务器在/etc/resolv.conf中出现的顺序来对其进行依次查询,因此系统只会在域名无法于本地DNS服务器中找到的情况下查询公共DNS服务器。
注意
如果你正在使用的是一个DHCP地址,并且DHCP服务器提供了DNS设置,那么DHCP服务器将在更新DHCP地址时替换文件内容。
系统中一个名为hosts的特殊文件同样负责域名-IP地址之间的转换工作。hosts文件的位置是/etc/hosts,并且与DNS类似,你可以利用它来指定自己的IP地址-域名映射。换言之,当在浏览器中输入www.microsoft.com(或其他域名)时,你可以决定浏览器转向哪个IP地址,而不是让DNS服务器来决定。作为一名渗透测试人员,这项技能对于利用dnsspoof之类的工具劫持一次本地局域网中的TCP连接,从而将流量转到一个其他网络服务器来说,是非常有用的。
在命令行中,输入如下命令(你可以将leafpad替换为自己习惯的文本编辑器):
现在你将看到你的hosts文件,如图3-3所示。
图3-3 Kali Linux系统默认hosts文件
默认情况下,hosts文件只包含localhost和127.0.0.1之间的映射,以及系统主机名称(在本例中为Kali,映射为127.0.1.1)的相关映射。但是你可以随意添加任意IP地址到任何域的映射。作为用法示例,你可以将www.bankofamerica.com映射到IP地址为192.168.181.131的本地站点上。
一定要确保在IP地址和域关键字之间按下的是TAB键,而不是空格键。
随着你越来越多地参与网络安全相关活动并了解了诸如dnsspoof和Ettercap之类的工具,你将能够使用hosts文件来将局域网上任何访问www.bankofamerica.com的流量转到IP地址为192.168.181.131的Web服务器上。