【51CTO.com快译】
一、使用MassDNS
唯一大量枚举跨域的工具。
TLDR
MassDNS可以在几秒钟内可靠地解析100K子域,可以使用AltDNS的功能,并为用户提供超过超乎想象的结果。可以使用它来连续暴力破解大量的域名。
译者注:AltDNS - 通过更改和排列进行子域发现,AltDNSs是一种DNS侦察工具,允许发现符合模式的子域名。AltDNS接受可能存在于域下的子域中的单词(例如测试,开发,分期),以及获取您知道的子域列表。工具传送门:https://github.com/infosec-au/altdns
二、灵感
进攻安全的第一步是侦察。获取目标的全部范围是侦查阶段的目标。主要是,这篇文章将重点放在如何有效地发现子域名,在大量的目标中使用MassDNS。此外,关于这个空白我已经研究了很长一段时间,并没有找到一个运行在许多目标上的比较好的工具。
三、工具
有很多脚本和程序可以处理子域名枚举。我将主要讨论以下工具(我基于他们的受欢迎程度来选择):
- Passive sources(https://github.com/rondilley/passivedns)
- Subbrute(https://github.com/TheRook/subbrute)
- Sublist3r(https://github.com/aboul3la/Sublist3r)
- Enumall(https://github.com/jhaddix/domain)
- Brutesubs(https://github.com/anshumanbh/brutesubs)
- DNS-Parallel-Prober(https://github.com/lorenzog/dns-parallel-prober)
1. Passive sources
我想手动处理被动源,因为我已经有一个自动化框架,很难将其集成到预构建的工具中。被动来源是可以的,但是他们永远不会暴力破解一样好。原因很简单:如果它是被动来源,它已经在别处找到并被索引了。然而,如果你是暴力破解的话,就有一定的几率导致一些被动渠道没有选择这些子域名。
在我看来,被动来源永远都是有益于,你得到你的子域,但不应该是主要来源,这使得我们使用其他工具。
2. Subbrute
许多人都知道如何利用一个经过很长时间测试的工具。在我看来,该工具的最大特点是内置的递归,检查子域中的子域。当我为每个公开范围漏洞奖励目标启动子域枚举时,我首先选择了这个工具。
当您有很多域要扫描时,时间和可靠性是一个工具拥有的最重要的功能。当我尝试将Subbrute整合到我的进程中时,我发现了一些事情:
- 运行很多次
- 脚本不会停止
- 递延延长运行时间
列出了大约100K子域名,使用超过15分钟才完成了单个域的扫描。由于完成扫描所需的时间,您的自动化忽略了其它域名,这里新的子域名可能刚刚出现。当Subbrute运行时,我有点想阻止这个运行在我的被动模块中。这样一来,当域被扫描时,我会从其它域名中获取被动DNS信息。
在漏洞奖励挖掘中,在其他人之前找到易受攻击的服务是非常重要的,而Subbrute完成任务所需的时间成本对我来说太高了(我的机器)。另外,当跑完我所有的目标时,Subbrute会偶尔挂起。这使得侦测的结束是一场噩梦,最终有太多的工作需要跟上,我开始寻找其他的工具。
3. Sublist3r
Sublist3r更侧重于被动来源信息收集。这些被动源通常提供一个API,使用户的搜索变得更加容易。然而,对他们往往有速率限制,使许多领域的自动化困扰。很多时候,源会阻止我的实例的IP地址,因为请求数量(可以理解)。
注意Sublist3r可以为您运行Subbrute,但由于上述原因我不会建议。此外,Sublist3r必须在目标上运行,然后依次运行Subbrute,从而增加每个域的运行时间。
因此,我创建了一个脚本来为域运行Sublist3r,然后单独为一个域运行Subbrute。这样,一旦其中一个进程完成,它就可以开始在另一个域上运行,从而提高了自动化的效率。这种方法在正确的轨道上,非常类似于我如何手动处理Subbrute和被动源。主要的缺点是完成扫描的时间。
4. Enumall
Enumall依靠Recon-NG(https://bitbucket.org/LaNMaSteR53/recon-ng)进行被动信息收集和暴力破解。Enumall是一个方便的小脚本,我认为它以聪明的一种方式利用多种其他工具来完成任务。通过使用Recon-NG来发现主机,它将自动将您列举的子域存储在其内置的表中。
但是,为了能在多个域中运行并且效率高,对我来说是不可能的。Recon-NG将按顺序运行每个测试,严重影响其性能。
另外,由于它将在工作空间中创建表,我遇到了内存问题($ 20在box中)。完成运行后,我必须删除域的每个工作区,然后为下一个域创建一个新的工作区。如果有一个大的域,它会导致我的实例耗尽内存。
由于这些原因,我无法使用枚举。
5. Brutesubs
另一个运行一些其他提及工具的工具。就个人而言,我没有玩的特别好,作为枚举子域名的简单方法而获得青睐。
6. DNS-Parallel-Prober
在这个时候,它是无限的,但可能是MassDNS的竞争对手。没有使用它,但可能值得研究,如果MassDNS导致你太多的麻烦。
工具地址:https://github.com/blechschmidt/massdns
四、绝望
在这一点上我没有希望。在有效性方面,我认为被动来源和Subbrute是最好的方法。但是,我不想创建处理容错程序的维护。正是在这一点上,我遇到了MassDNS,我的救世主 。
优点(你也可以认为我是一个“托”)
认真地运行MassDNS。如果我遇到这个工具,我将节省大量的时间,将其他子域暴力破解应用程序并入。
首先,可靠性和速度是无与伦比的。100K子域在10秒以内暴力破解。以前,如果我很幸运,许多子域名,仅仅需要5-10分钟。我连续运行2-3个月,在可靠性方面本身并没有遇到任何问题。
以前,我通过Subbrute收集子域名,并利用我的脚本来解析被动源。之后,我没有想到会发现很多子域名,但是运行MassDNS时使用大字典,它给了我太多子域来调查每个子域。(提示:有些人正在使用EyeWitness:https://github.com/ChrisTruncer/EyeWitness,我想知道为什么?)
此外,对我来说,似乎AltDNS被创建用于此工具(即使AltDNS包含一种解决域本身的方式)。AltDNS将创建一个字典,您可以将其添加到MassDNS中,以便为您解决问题。这是伟大的,因为当你有一个域下面有很多子域和一个大的前缀列表,排列列表是巨大的。到目前为止,我还没有找到比MassDNS更快的DNS解析器。
最后,解析输出效率。如果允许它输出,MassDNS绝对是啰嗦的。无论响应如何,您绝对不会缺少大多数记录的关键输出。这一点在下面的缺点中得到了扩展。
除此之外,我认为大多数(数据)赏金猎人都在使用MassDNS,但显然这不是我可以肯定的一点。
五、缺点
我还没有讨论MassDNS有一个主要的缺点:它是一个非常简单的工具,具有复杂的输出。
所讨论的其他许多工具都提供了一个方便使用的界面和易于理解的输出。不过,您只需要看看Frans Rosen在AppSec欧盟的演讲,在那里他解决了其他工具有,而MassDNS没有的问题(https://www.youtube.com/watch?v=FXCzdWm2qDg)。MassDNS不会保留其他工具所做的信息。例如,如果没有找到子域,许多工具将不会显示(因为它是NXDOMAIN)。但是,Frans显示,这里有一个CNAME没有一个子域的A记录。使用该host命令将返回NXDOMAIN,因为它找不到CNAME的地址。但是,如果有人注册了CNAME,则会有一个A地址。一些工具错过了这一点,所以接收被忽略了。但是,MassDNS不会隐藏信息(除非您提供标志)。
下一个缺点是解析器。
为了加快枚举,MassDNS会为每个主机联系多个解析器。这样一个DNS服务器不会减慢进程,您可以有效地扩展枚举(Subbrute也是这样)。但是,有时候还有错误的解析。
错误的解析器返回旧的和过期的记录(或只是错误的)。因为一些不存在的子域名信息,你会疼恨,这严重妨碍了您的枚举。
解决这个问题的一种方法是解析“找到”的子域,然后使用Google的DNS(8.8.8.8)来解析每个域。如果Google没有解决,我可以从解析器列表中删除返回该记录的原始DNS服务器。这样,我已经删除了大多数的坏解决方案,给我留下了好的结果。
然而这里CPU吃紧。每次我运行这个,我花$20没有做的盒子,每次运行都让我心灵很受伤!但是,结果非常好,所以我可以用它(并考虑一个更强大的盒子来支持它)。
最后,MassDNS 要求用户解析其输出。这意味着对于自动化系统,必须创建一个脚本来从输出中提取有意义的信息。需要基本的脚本/编程知识才能获得良好的自动化和覆盖。
最后的想法
总的来说,为了使用MassDNS提供的信息,您必须编写一个脚本来解析它,并与输出结果进行交互。在我看来,这是每个人使用MassDNS的最大障碍。有了这个说法,如果你具备足够的编程能力来解析输出并将其传递到自动化中,那么,你将有一个很好的子域枚举过程。尝试一下,与以前的枚举方法进行比较,考虑结果,可靠性和速度。
原文标题:Offensive Security by Automation
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】