jason haddix的经典教程又更新了,翻译记录下。正好最近要刷刷src。
首先作者把挖洞分成两部分:信息收集和应用分析。这个演讲是关于信息收集的。
第一点是记录项目,把挖过的项目都进行整理和更新,作者用xmind这个工具。用excel或者notebook也一样,主要是记录自己的工作内容。以xmind为例,作者在左侧记录资产信息、whois信息等,右侧记录不同的域名。打开右侧的端点,一个端点对应一个域名,作者记录了该域名一些功能点,潜在的漏洞以及对应的检测方法,这样能对目标进行比较全面的梳理。比如内容发现一栏对应js分析和目录爆破。动态输入对应文件上传和可疑api。
介绍完记录工具,开始介绍正式内容。
信息收集
广泛的信息收集包括很多内容,如图。包括目标域、asn、whois、子域名、资产、端口等等。
收集根域名
首先需要确认目标域,也就是所谓的seeds/root。一般在src都会说明接受的域名范围。但有些src会接受所有公司的资产,有一些是没有列举出来的。以tesla为例,在https://www.crunchbase.com/textsearch?q=tesla进行搜索,可以搜索到公司拥有的资产,可能有一些src没有写出但也属于目标资产的域名,这样就可以扩大目标范围。
资产收集的另一个技巧是asn(autonomous system numbers),在https://bgp.he.net/可以查询目标机构的asn和ip等信息,用以确认资产是否属于目标。另外还可以用专门的工具,metabigor(https://github.com/j3ssie/metabigor)和asnlookup(https://github.com/yassineaboukir/Asnlookup)。ip反查asn还有个国内的工具https://tools.ipip.net/as.php
asn还可以用来发现根域名,使用amass(https://github.com/OWASP/Amass)可以通过asn获取根域名:
1 | amass intel -asn 46489 |
下一个技巧是whois查询,有很多在线工具,作者使用的是whoxy.com。通过查询whois发现目标机构过去的域名,可以扩大目标范围,但也有可能会有很多过期的域名。也有人写好了工具,domlink(https://github.com/vysecurity/DomLink)
下一个技巧是利用ad/analytics tracker code,可以在builtwith.com查询,在relationship profile一栏里可以找到使用相同code的域名,扩大目标范围。
下一个技巧是google,除了常规的搜索,可以搜索目标的版权、隐私之类的关键词,比如”© 2019 Twitch Interactive, Inc.” inurl:twitch
然后就是shodan,比较常规,直接搜域名就行。
收集子域名
收集子域名主要分三部分:链接、js泄露,枚举,爆破。
作者使用burp收集链接中的域名:关闭被动扫描,设置自动提交表单,设置target关键词(不是完整域名),访问网站并爬取所有域名。设置target过程如图:
这样不仅可以获取子域名,也可能获取到新的根域名,比如以twitch为关键字获取到twitchapp.net。之后在target一栏全选,右键engagement tools里面的analyze target保存即可。
这个过程也可以用自动化爬虫然后再正则提取,爬虫的话有Gospider(https://github.com/jaeles-project/gospider)和hakrawler(https://github.com/hakluke/hakrawler)
还有从js获取子域名的工具,比如subdomainizer(https://github.com/nsonaniya2010/SubDomainizer)和subscraper(https://github.com/Cillian-Collins/subscraper),国内大家可能用过jsfinder,差不多。
下一个环节是子域名枚举,有很多渠道可以进行子域名枚举,包括基础资源(censys、dnsdb)、搜索引擎、证书、安全资源。
这个过程中可以使用的工具有amass、subfinder(https://github.com/projectdiscovery/subfinder)。amass是作者最常用的工具,它有很多功能,比如枚举子域名时还会返回asn,这样就有可能再添加新的asn,扩大目标范围。
另一个工具是github search(https://github.com/gwen001/github-search),它利用github进行搜索,其中一个功能是搜索子域名。
类似的还有shosubgo(https://github.com/incogbyte/shosubgo),它从shodan收集子域名。
一个高手都在用的技术是通过aws、gcp、azure等云服务的证书搜索寻找子域名,大概原理是遍历并匹配。但是有一些经验文章,比如https://www.daehee.com/scan-aws-ip-ssl-certificates/、https://www.youtube.com/watch?v=1pqCqz3JzXE。这里给出一个工具
1 | curl 'https://tls.bufferover.run/dns?q=twitch.tv' 2>/dev/null |jq .Results |
下一个环节就是大家熟悉的子域名爆破了,作者一样使用了amass,可以自己定义dns服务器和字典。
1 | amass enum -brute -d twitch.tv -src |
其实有很多类似的工具,比如国内jiejie的和seay的子域名爆破工具,作者还提供了shuffledns(https://github.com/projectdiscovery/shuffledns)
爆破的结果其实取决于字典,作者使用的字典是把过去七年所有见过的子域名收集起来组成的,有15m。当然大字典会很慢,定制字典更有效率一些。Nahamsec也有一个关于字典的pre:https://www.youtube.com/watch?v=W4_QCSIujQ4
作者也给出了一个现成的字典https://github.com/assetnote/commonspeak2
获取到一些子域名后,可以寻找子域名命名的规律,利用altdns(https://github.com/infosec-au/altdns)可以发现一些没有爆破出来的符合命名规律的子域名。比如
1 | origin-sub.target.com |
这两个可能解析的是同一个网站,但有可能一个有waf一个没有,也是种绕过waf的手段。
最后就是端口扫描,可以先用masscan扫描打开的端口然后再用nmap确认具体端口信息,相比直接用nmap扫会快不少。因为masscan只接受ip作为参数,可以用dnmasscan(https://github.com/rastating/dnmasscan)自动把域名转换为ip再调用masscan。作者还给了个masscan的教程https://danielmiessler.com/study/masscan/
在masscan和nmap扫描得到结果之后,可以利用brutespray(https://github.com/x90skysn3k/brutespray)对ftp/ssh/mysql等认证服务进行弱口令爆破
子域名扫描的时候可以去github查找是否有信息泄露,也是利用前面说的github-search这个工具。Bugcrowd University有个教程:https://www.youtube.com/watch?v=l0YsEk_59fQ
因为已经有了非常多子域名,下一步可以用眼睛来看。比起一个一个点,用工具自动截图更方便。作者给出了几个工具,包括aquatone、HTTPscreenshot、eyewitness。作者用最后一个,但其实都差不多。不过这只是可选项,作者大部分时候也是一个一个点开,因为可能会有跳转之类的问题。
接下来要检测的是子域名接管,这是有域名就能测试的一个漏洞并且是个高危漏洞。原理在https://github.com/EdOverflow/can-i-take-over-xyz
作者给了两个子域名接管的工具,https://github.com/Ice3man543/SubOver和https://github.com/projectdiscovery/nuclei
最后就是框架部分。作者把信息收集框架分为几类。C类是简单的脚本,调用其他现有的工具。B类是自己写的模块,有图形界面或工作流。A类是自写模块,有图形界面,使用数据库迭代更新。S类就是再加上写自动提醒、机器学习之类的技术。作者给出了一些例子(oneforall瞩目)
不过S类的基本都是付费并且只面向公司的,据说intrigue.io核心部分是开源的。
总的来说都是些信息收集的姿势,有一些还算比较新颖,并且也给出了许多工具,可以试着更新下自己的工具集。下一篇具体挖洞的还要过阵子才有。