本文是一篇翻译文章,原链接为:https://captmeelo.com/bugbounty/2019/09/02/asset-enumeration.html

介绍

当我对一个很大范围的资产做漏洞赏金活动时(例如,CIDR,子域名,一个公司的所有资产等)。我一直对搜集信息以扩大我的供给面这件事很有压力。就像是一个更大的资产范围=一个更大攻击面=更多机会利用漏洞。但是增大供给面这件事本身对我来说就很有挑战。

在这篇文章中,我将会描述我在测试时如何扩大目标站点或公司的攻击面。需要注意的是,这个技术仅限于罗列关于木站点的子域名和找到新域名。

资产发现

针对一个目标域,有两种方法扩展它的攻击面:

  1. 找到更多和目标站点享有同个一级域名的站点,这个叫做子域名罗列。
  2. 确认所有和目标站点有关系的域名。

下图可以帮助区分这两个方法:

现在我们来看一下我用来进行子域名罗列和找到有关系域名的方法。

子域名罗列

这步的关键就是找到尽可能多的目标域的子域名站点。理想的情况下,我们希望越挖越深。我的意思是指我并不想单单只罗列目标域的子域名,还要挖掘这些子域名的子域名。例如,我们还想挖掘another.subdomain.doamin.com,而不仅仅是sudomain.domain.com。

有很多工具可以进行子域名罗列,但是他们并不能给出一个不错的结果。个人来说,我更加喜欢使用可以综合所有罗列工具的结果的工具,并且拥有很多我需要的选项和功能,像是递归暴力猜解和字符替换。

针对子域名罗列,我一直是用Amass这个工具作为起步,使用它的passive选项。

amass enum -passive -d <DOMAIN> -o <OUT_FILE>

然后是针对目标域的子域名使用暴力猜解,猜解字典为all.txt(https://github.com/OWASP/Amass/blob/master/wordlists/all.txt )和commonspeak2(https://github.com/assetnote/commonspeak2-wordlists/blob/master/subdomains/subdomains.txt )。

amass enum -brute -w <WORDLIST> -d <DOMAIN> -o <OUT_FILE>

如果你想加快工具的扫描速度,你就要使用noalts选项和norecursive选项,以及max-dns-quries选项。但是不要惊讶结果的输出,因为这样会得到很少的信息。

通过上面方法得到的子域名中,不是所有都可以正常解析IP地址。筛选出可以正常解析IP地址的域名,我推荐使用Massdns。

./bin/massdns -r lists/resolvers.txt -o S <LIST_OF_SUBDOMAINS> | grep -e ' A ' |  cut -d 'A' -f 1 | rev | cut -d "." -f1 --complement | rev | sort | uniq > <OUT_FILE>

相关域名罗列

通过获取和融合,有时候可能不是同一家公司的域名但是他们之间有联系。例如,Facebook同时拥有Instagram和Whatsapp,也就是说instagram.com和whatsapp.com都和facebook.com有关系。

我们从下面的whois输出信息可以发现,facebook.com,instagram.com和whatsapp.com都由邮箱地址domain@fb.com 注册。

为了搜集有关联的域名,我们可以获取whois信息中的Registrant Email这个字段,然后做一个反向whois查询。这个操作可以在viewdns.info和whoisxmlapi.com这个两个站点上完成。

通过Registrant Email和Registrant Organization记录进行反向查询很容易出现重复结果,所以需要多加操作进行结果去重。

需要留神的是大多数使用反向whois查询是免费的,但是你如果想要得到更多的结果或者完整的结果往往是需要你付费的。

填充空白区域

现在我们已经通过纵横交错的方法完成了域名收集,现在是否可以开始进行攻击测试了?答案是不。

如果我们可以填充下图中的空白区域,那么是不是能更加扩展我们的攻击面呢?

我们可以针对我们子域名罗列发现的域名都进行关联域名发现。但是这意味着我们需要花更长的时间进行子域名罗列,但是谁关心时间更长呢?记住,一个更大攻击面=更多机会攻下站点。

但是在这之前,先把可以解析的关联域名筛选出来:

./bin/massdns -r lists/resolvers.txt -o S <LIST_OF_ASSOCIATED_DOMAINS> | grep -e ' A ' |  cut -d 'A' -f 1 | rev | cut -d "." -f1 --complement | rev | sort | uniq > <OUT_FILE>

然后通过如下命令进行子域名罗列:

amass enum -passive -df <LIST_OF_RESOLVED_ASSOCIATED_DOMAINS> -o <OUT_FILE>

或者进行暴力猜解:

amass enum -brute -w <WORDLIST> -df <LIST_OF_RESOLVED_ASSOCIATED_DOMAINS> -o <OUT_FILE>

如果你有个给劲的机器,你可以使用GNU Parallel(https://www.gnu.org/software/parallel/ )或Xargs(http://man7.org/linux/man-pages/man1/xargs.1.html )进行多进程工作来加快速度。例如:

cat <LIST_OF_RESOLVED_ASSOCIATED_DOMAINS> | parallel -j <NO_OF_CONCURRENT_JOBS> "amass enum -passive -d {} -o {}.out"

我更倾向于使用GNU Parallel,所以这里不会有Xargs的命令。

一旦你罗列出所有关联域名的子域名,接下来使用Massdns进行dns解析来筛选可解析的域名。

接下来?

做完如上的操作后,最后一步就是去重。

  • 使用这些得到的域名和主机,你可以做如下的操作:
  • 检查子域名是否可以被接管
  • 端口扫描并确认运行的服务
  • 记录运行web服务的主机
  • 进行目录暴力猜解
  • 等等

结论

如上的方法就是我在进行漏洞赏金活动时做的操作,我不能保证它也同样适用于你,也不能保证你遵循如上操作就会找到漏洞。这篇文章的目的在于共享我的方法给那些苦于不知如何拓展自己攻击面的安全人员。

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖