子域名发现

在识别 IP 范围方面,我们通常可以从区域互联网注册管理机构这样的公共资源来查找某个公司。比如美洲互联网号码注册管理机构(American Registry for Internet Numbers,ARIN)管理北美和部分加勒比地区事务,网址为 https://www.arin.net/ 。我们可以查找 IP 地址的拥有者、某个公司的网络、组织的自治系统编号等等。如果我们要看北美以外的地区,我们可以通过 AFRINIC(非洲)、APNIC(亚洲)、LACNIC(拉丁美洲)和 RIPE NCC(欧洲)查找。这些都是公开可用的,并在其服务器上列出。

你可以通过许多可用的公共源查找任何主机名或 FQDN 以找到该域的所有者(我最喜欢的快速查找域名所有者的网站是 https://centralops.net/co/domaindossier.aspx )。但是子域名就很难搜集。因为子域名并不是在某些公开注册系统上集中注册的,而是存储在目标的 DNS 服务器上。你必须知道要怎样搜索才能找到有效的子域名。

为什么子域名对于你的攻击目标如此重要?有几个原因:

  • 一些子域可以表明它是什么类型的服务器(即 dev、vpn、mail、internal、test)。例如, mail.cyberspacekittens.com。
  • 一些网站服务器无法通过 IP 去访问,也就是多个服务器共享一个出口 IP 的情况。这些服务器可能位于共享的基础设施上(比如 virtual host),如果你要访问这些网站,就只能通过域名去访问。这样的情况在云基础架构中非常常见。这种情况下,如果你使用 nmap 扫描这个 IP,只能得到主机的端口开放信息,不能进一步获取更多的 Web 指纹,必须要使用对应的子域名来访问站点,然后使用类似于 WhatWeb 的工具来获得 Web 指纹。
  • 收集子域名可以获得目标在哪托管他们服务器的信息。这是通过找出目标全部子域名、针对子域名反向查询 IP 以及查询托管 IP 的地方来完成。一家公司可能会使用多个云服务提供商和数据中心来托管他们的服务器。

在上一本书(The hacker playbook第二版)中我们讲了很多用于子域名收集的工具,因此让我们回顾一些当前仍然可用的工具的和一些新工具,来更好的进行子域名收集。欢迎扫描 cyberspacekittens.com 域名!

Discover Scripts

上一本书里面谈论的 Discover Scripts 工具仍然是我最喜欢的子域名收集工具之一。因为它结合了Kali Linux 上的所有的子域名侦察工具,并定期进行维护更新。被动信息收集将利用下列所有的工具: Passive uses ARIN, dnsrecon, goofile, goog-mail, goohost, theHarvester, Metasploit, URLCrazy, Whois, multiple websites and recon-ng.

  1. git clone https://github.com/leebaird/discover /opt/discover/
  2. /cd /opt/discover/
  3. /./update.sh.
  4. /discover.sh
  5. Domain
  6. Passive
  7. [Company Name]
  8. [Domain Name]
  9. firefox /root/data/[Domain]/index.htm

Discover Scripts 最棒的地方在于,它基于已收集到的信息滚雪球式搜索。 例如,通过对公开的 PGP 仓库进行搜索,它可能会识别电子邮件,然后使用这些信息继续在 Have I Been Pwned 网站进行搜索(通过 Recon-NG 工具)。这将让我们知道是否可以通过公开发布的数据泄露危害找到一些泄露出的密码。

KNOCK

接下来,我们希望了解公司可能使用的所有服务器和域名。尽管没有存储子域的中心位置,但我们可以使用 Knock 等工具暴力破解不同的子域名,来识别哪些服务器或主机可以攻击。

Knockpy 是一个 python 工具,它通过一个 wordlist 来枚举目标域中的子域名。

Knock 是一个很好的子域名扫描工具,它生成一个子域名列表,并检查这些生成的子域名是否可以解析。因此,如果你想扫描 cyberspacekittens.com, Knock 将使用 此 wordlist,并查看 [subdomain].cyberspacekittens.com 是否有任何子域。在此要注意的一点是,更好的 wordlist 会增加找到子域名的机会。

我最喜欢的一个子域名字典是由 jhaddix 创建的(点此查看)。子域名字典是你应该持续收集的东西之一。其他一些好的子域名字典可以在你的 THP Kali 镜像的 /opt/SecLists 文件夹下找到或者在 这里 找到。

译者注:The Hacker Playbook Kali 镜像在本书的第一章的【本章总结】里面有介绍,是本书作者专门针对于本书中的实验创建的基于 Kali Linux 并且添加了所有工具的完整版虚拟机(点此获取)。

实验:
搜集 cyberspacekittens.com 的所有子域名。

  • cd /opt/knock/knockpy
  • python ./knockpy.py cyberspacekittens.com
  • 这将使用 Knock 中内置的基础子域名字典。尝试下载并使用更大的子域名字典。使用-u参数切换到 http://bit.ly/2qwxrxB 字典。即:
    1. python ./knockpy.py cyberspacekittens.com -w all.txt

你从 Discover Scripts 中发现了哪些类型的差异?什么类型的域将是你的第一个攻击目标,或与钓鱼式域攻击一起使用?去现实世界试试吧!去找一个 bug 赏金程序,并寻找丰富的子域。

Sublist3r

正如前面提到的,Knock 的问题是,它严重的依赖字典的质量。有些公司有非常独特的子域名,无法通过通用的子域名字典找到。下一个最好的资源是搜索引擎。当网站被爬虫爬行时,带有链接的文件会被分析并被收集到公开的资源,这意味着我们可以使用搜索引擎为我们做子域名收集的工作。

在这种情况下,我们可以借助 Sublist3r 这样的工具。注意,这种工具使用不同的 “google dork” 风格的查询语句进行搜索,容易被谷歌人机检查识别成机器人。这可能会使你暂时被列入黑名单,并要求你为每个请求填写验证码,这可能会限制扫描的结果。

运行 Sublist3r:

译者注:原书这里存在笔误,作者写成了 To run Sublister,但实际上应该是 To run Sublist3r.

  • cd /opt/Sublist3r
  • python sublist3r.py -d cyberspacekittens.com -o cyberspacekittens.com

看看 Sublist3r 跑出来的结果,跟用子域名暴力破解出的结果对比一下,是不是有一些之前没发现的?同样的,再次针对一个 bug 赏金项目尝试 Sublist3r 方法来收集子域名,对比感受暴力破解和使用搜索引擎之间的显著区别。

Sublist3r 有一个分支版本,这个分支版本包含额外的特性(特别是子域名劫持的检查): https://github.com/Plazmaz/Sublist3r

SubBrute

最后一个要介绍的子域名收集工具是 SubBrute。SubBrute 是一个社区项目,目标是创建最快、最准确的子域枚举工具。SubBrute 背后的神奇之处在于,它使用开放的解析器作为代理来绕过 DNS 速率限制( https://www.us-cert.gov/ncas/alerts/TA13-088A )。这种设计还提供了一层匿名性,因为 SubBrute 不直接向目标的域名服务器发送流量。

SubBrute 不仅速度非常快,它还执行 DNS 爬虫功能,爬取枚举的 DNS 记录。

运行 SubBrute:

  1. cd /opt/subbrute
  2. ./subbrute.py cyberspacekittens.com

我们还可以将 SubBrute 的性能提升一下,将其与 MassDNS 结合,以执行非常高性能的 DNS 解析。