H1的子域接管漏洞挖掘指南
子域名接管漏洞挖掘,转自H1
HackerOne的Hacktivity提要-公开披露的报告的精选提要-看到了相当一部分子域接管报告。自从Detectify 关于子域接管的精彩系列文章以来,bug赏金行业已迅速收到有关此类问题的报告。
子域接管的基本前提是主机,该主机指向当前未使用的特定服务,对手可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和一名安全分析师,我每天都会处理此类问题。
我今天的目标是为理解,发现,利用和报告子域错误配置创建一个总体指南。本文假定读者对域名系统(DNS)有基本的了解,并且知道如何设置子域。
子域接管简介如果您之前从未执行过子域接管,或者想进行全新的介绍,那么我设计了一个示例方案来帮助您解释基础知识。对于这种情况,让我们假设这
example.com是目标,并且运行团队example.com具有错误赏金计划。在枚举属于所有子域的同时example.com,我们偶然发现了
subdomain.example.com一个过程,黑客偶然发现了一个指向GitHub页面的子域。我们可以通过查看子域的DNS记录来确定这一点;在此示例中,subdomain.example.com有多个A记录指向GitHub 自定义页面的专用IP地址。
$ host subdomain.example.comsubdomain.example.com has address 192.30.252.153subdomain.example.com has address 192.30.252.154$ whois 192.30.252.153 | grep "OrgName"OrgName: GitHub, Inc.
转到时subdomain.example.com,我们发现以下404错误页面。
在这一点上,大多数黑客的意识开始发麻。该404页面指示顶级目录下未提供任何内容,我们应尝试将此子域添加到我们的个人GitHub存储库中。请注意,这并不表示可以在所有应用程序上进行接管。某些应用程序类型要求您同时检查HTTP和HTTPS响应以进行接管,而其他应用程序类型可能根本不容易受到攻击。
一旦将自定义子域添加到我们的GitHub项目中,我们就可以看到存储库的内容已被提供subdomain.example.com-我们已成功声明了该子域。为了演示起见,索引页面现在显示青蛙的图片。
二阶子域接管二阶子域接管,我想称为“ 断开的链接劫持 ”,是易受攻击的子域,它们不一定属于目标,但用于在目标网站上提供内容。
这意味着,例如,通过JavaScript块将资源导入到目标页面上,并且黑客可以声明要从中导入资源的子域。劫持页面上某处使用的主机最终可能导致存储的跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。
我之所以想在本指南中列出此问题,是为了强调一个事实,作为一名黑客,我不想仅将自己限制在目标主机上的子域。您可以通过检查源代码并映射目标依赖的所有主机来轻松扩展范围。
这也是为什么如果要劫持子域,值得花时间看看是否有任何页面从子域导入资产的原因。
子域枚举和发现现在,我们已对在配置错误的子域上提供内容所需的内容进行了高级概述,下一步是掌握用于查找易受攻击的子域的各种技术,技巧和工具。
在继续学习之前,我们必须首先区分抓取和强制使用,因为这两个过程都可以帮助您发现子域,但结果却有所不同。爬取是一种被动的侦察技术,通过该技术,人们可以使用外部服务和源来收集属于特定主机的子域。
某些服务(例如DNS Dumpster和VirusTotal)对过去已爬网的子域进行索引,使您无需费力即可快速收集和排序结果。
属于reddit.comDNS Dumpster上的子域的结果。
爬取不仅包括使用索引页,还记得检查目标的GIT存储库,内容安全策略标头,源代码,问题跟踪器等。源列表无穷无尽,并且我不断发现增加结果的新方法。
通常,您会发现自己的技术越独特,最终发现其他人所遇到的事情的可能性就越大。因此要有创造力,并根据漏洞披露计划在实践中测试您的想法。
Ahmed Aboul-Ela的Sublist3r可以说是想到的最简单的子域抓取工具。这个轻量级的Python脚本从众多搜索引擎,SSL证书和诸如DNS Dumpster之类的网站中收集子域。我的个人计算机上的设置过程非常简单:
在强行强制子域时,黑客会通过单词列表进行迭代,并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您将得到很多错误的肯定结果。
通配符仅表示所有子域都将返回响应,从而使结果偏斜。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。
$hostrandomifje8z193hf8jafvh7g4q79gh274.example.com
为了在强行强制子域时获得最佳结果,我建议使用您过去遇到的术语或通常与您感兴趣的服务链接的术语来创建自己的个人字词列表。例如,我经常发现自己正在寻找包含以下内容的主机关键字“ jira”和“ git”,因为有时我会发现易受攻击的Atlassian Jira和GIT实例。
如果您打算使用暴力破解子域,我强烈建议您看看Jason Haddix的单词列表。Jason麻烦将列表从子域发现工具合并到一个广泛的列表中。
指纹识别为了增加查找子域的结果,无论您是在抓取还是在强行使用,都可以使用一种称为指纹识别的技术。指纹允许您为目标创建自定义单词列表,并可以揭示使用通用单词列表找不到的属于目标的资产。
著名的工具有很多用于子域接管的工具。本节包含一些到目前为止尚未提及的重要内容。
Altdns为了递归子域,请看一下Shubham Shah的Altdns脚本。通过Altdns对目标进行指纹识别后运行自定义单词列表可能会非常有益。我喜欢使用Altdns生成单词列表,然后通过其他工具运行。
普通话Shubham的另一个工具Commonspeak是使用Google的BigQuery生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术日新月异的时代尤其重要。如果您想更好地了解此工具的工作方式以及从何处收集关键字,则值得阅读https://pentester.io/commonspeak-bigquery-wordlists/。
子查找器SubFinder是将刮擦和蛮力完美结合的工具。我发现自己现在比Sublist3r更使用SubFinder作为通用子域发现工具。为了获得更好的结果,请确保包括SubFinder刮擦以查找子域的各种服务的API密钥。
MassdnsMassdns是一种快速的子域枚举工具。使用某些工具可能需要一刻钟才能完成,Massdns可以在一分钟内完成。请注意,如果您打算运行Massdns,请确保为其提供有效解析器列表。看一看https://public-dns.info/nameservers.txt,试用解析器,看看哪个解析器返回最佳结果。如果不更新解析器列表,最终会导致很多错误的肯定。
$ ./scripts/subbrute.py lists/names.txt example.com | ./bin/massdns -r lists/resolvers.txt -t A -o S -w results.txt
自动化您的工作流程
寻找子域接管时,自动化是关键。排名靠前的漏洞赏金猎人会不断监控目标的变化,并持续关注他们可以找到的每个子域。对于本指南,我认为没有必要专注于监视设置。相反,我想坚持一些简单的技巧,这些技巧可以节省您的时间并且可以轻松地实现自动化。
我喜欢自动化的第一个任务是从主机列表中过滤掉实时子域。抓取子域时,某些结果将过时并且不再可用;因此,我们需要确定哪些主机处于活动状态。
请记住,正如稍后将要看到的,仅仅是因为主机无法解析,并不一定意味着它不能被劫持。使用host命令可以轻松完成此任务-不再活动的子域将返回错误。
而读取子域;如果主机“ $ subdomain”> / dev / null,该怎么办;然后#如果主机处于活动状态,则将其打印到#名为“ live.txt”的文件中。回声“ $ subdomain” >> live.txt fi
完成<subdomain-list.txt
因此,如果将到目前为止的所有内容放在一起,我们将得到以下工作流程。
特别案例我们需要注意一种特殊情况,弗朗斯·罗森(FransRosén)在他的演讲“ 使用云提供商进行DNS劫持-无需验证 ”中强调了一种特殊情况。每当遇到无效的DNS记录时,不要仅仅假设您无法劫持该子域。正如Frans指出的那样,该host命令可能会返回错误,但是运行dig将揭露失效的记录。
开发对,现在您控制一个属于目标的子域,下一步该怎么做?在确定配置错误的子域的合理攻击场景时,至关重要的是要了解该子域如何与基本名称和目标的核心服务交互。
饼干subdomain.example.com可以修改范围为的Cookie example.com。要记住这一点很重要,因为这有可能使您劫持受害人基于基本名称的会话。
从output.jsbin.com,我们可以为jsbin.com设置cookie。
如果基本名称容易受到会话固定的限制,并使用HTTPOnly cookie,则可以设置一个cookie,然后在用户重新启动其浏览器时,您的恶意cookie会优先于新生成的cookie,因为cookie是按年龄排序的。
跨域资源共享跨域资源共享(CORS)是一种允许主机共享页面跨域内容的技术。应用程序使用一组规则创建一个范围,该规则允许主机提取包括已验证数据的数据。某些应用程序允许子域在假设子域是受信任实体的情况下发出跨域HTTP请求。当您劫持子域时,请查找CORS标头(Burp Suite Pro的扫描仪通常会选择它们),然后查看应用程序是否将子域列入白名单。这可能使您可以从主应用程序上的经过身份验证的用户窃取数据。
Oauth白名单与跨域资源共享类似,Oauth流也具有白名单机制,通过该机制,开发人员可以指定应接受的回调URI。这里的危险再次是子域被列入白名单时,因此您可以在Oauth流期间将用户重定向到您的子域,从而可能泄漏其Oauth令牌。
内容安全政策该内容安全策略(CSP)是主机的另一个列表,应用程序信任,但这里的目标是要限制哪些主机可以在应用程序的上下文中执行客户端代码。如果希望最小化跨站点脚本的影响,则此头特别有用。如果您的子域包含在白名单中,则可以使用子域绕过策略并在应用程序上执行恶意的客户端代码。
$ curl -sI https://hackerone.com | grep -i "content-security-policy"content-security-policy: default-src 'none'; base-uri 'self'; block-all-mixed-content; child-src www.youtube-nocookie.com; connect-src 'self' www.google-analytics.com errors.hackerone.net; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; media-src 'self' hackerone-us-west-2-production-attachments.s3-us-west-2.amazonaws.com; script-src 'self' www.google-analytics.com;style-src 'self' 'unsafe-inline'; report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598
点击劫持
如“ Cure53浏览器安全性白皮书 ”中所述,Internet Explorer,Edge和Safari支持标头中的ALLOW-FROM指令X-Frame-Options,这意味着如果您的子域被列入白名单,则可以对目标页面进行陷害,从而进行点击劫持攻击。
密码管理员这不一定是要包含在报告中的一种,但是值得注意的是,某些密码管理器会自动在属于主应用程序的子域上填写登录表单。
拦截电子邮件Rojan Rijal 演示了如何通过在SendGrid上声明属于uber.com的子域来拦截电子邮件。
在尝试报告子域接管之前,请确保您确实能够在子域上提供内容。但是,无论您做什么,都不要在索引页上发布任何内容,即使它是前面所展示的青蛙的无害图片。最佳实践是在隐藏路径中提供HTML文件,该隐藏路径在HTML注释中包含秘密消息。
最初就与您的发现联系程序时,足以证明该问题。只有在团队授予您许可后,您才可以尝试升级问题并实际证明此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,您的报告应包含有关子域接管可利用性的信息。
花时间编写有关子域接管的报告,因为这种类型的问题可能会非常有益,而且没人希望您击败该报告,因为您(希望)是唯一可以控制子域的报告。
作者注:我只目睹过一份重复的报告,说明子域收购,因此尽管仍有可能,但发生这种情况的可能性很小。
我们已经到了本指南的结尾,我期待在HackerOne上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用本篇文章中列出的技巧。
关于最后一点,我想感谢弗兰斯·罗森,文件描述符,蒙戈,和汤姆·哈德森交换有关的子域收购的想法。他们的研究一直是我在整个旅程中发现的许多东西的基础。
文章3810字,阅读完大约需要12分钟
翻译自:https://www.hackerone.com/blog/Guide-Subdomain-Takeovers
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved