DNS侦察对抗通配符域名
我最近对一家公司进行了测试,在总结会上他们问我如何枚举出这么多子域名,因为他们使用了通配符DNS设置,而之前的测试人员曾评论说这能阻止DNS枚举。当我向他们解释通配符只会掩盖有效域名时,他们对之前的测试人员说了些话,我觉得这可以写成一篇不错的博客文章。
场景设定
通配符DNS记录会在没有明确定义记录时匹配请求。通常定义为*.domain.com
,以下是一个使用示例:
|
|
这里,如果我请求www.domain.com
的IP,会得到1.2.3.4
;如果请求test.domain.com
,会得到1.2.3.5
;但如果请求mail.domain.com
,由于没有明确定义的记录,会得到通配符响应1.2.3.4
。
为什么这能阻止枚举?
大多数枚举的起点之一是对名称服务器进行暴力查找,寻找常见名称列表。有很多工具可以做到这一点,我偏好Carlos Perez的dnsrecon,但也有Jabra的Fierce和dnssenum。当对使用通配符记录的域名进行此类暴力查找时,每个请求都会返回成功,要么是真实结果,要么是默认记录。生成的数据量可能让之前的测试人员不堪重负,这就是为什么他认为通配符增加了安全性。
那么为什么这不是问题?
首先,通过请求一个永远不会存在的记录,例如fkrusfk9374Fs.domain.com
,我可以确定是否正在使用通配符。如果我得到结果,那么就是在使用,并且我知道通配符返回的默认IP。接下来,我只需过滤掉具有该IP的任何结果。如果我得到以下结果:
|
|
我可以将它们过滤为以下列表:
|
|
由于这些记录与通配符IP不匹配,它们必须是名称服务器上明确定义的记录。你会注意到我丢失了两个有效结果:www和hidden。由于大多数域名都会有www记录,我通常假设它存在。至于hidden,嗯,这是一个漏网之鱼,但我宁愿丢失一个记录,留下两个进行测试,而不是一看到使用通配符就完全放弃。
如何找到过滤中丢失的条目?
DNS枚举的下一步是查看Google对你的目标了解什么。我不会尝试记录这一点,而是指向Tim Tomes(lanmaster53)在今年Hack3rcon上的演讲和工具:Next Generation Web Reconnaissance。
祝你好运,希望下次你看到通配符记录时,能够透过表象找出它只是掩盖了的有价值信息。