php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))

优采云 发布时间: 2022-01-20 16:03

  php curl抓取网页(利用和报告子域错误配置创建一个总体指南(组图))

  HackerOne 的 Hacktivity 提要 - 公开披露报告的精选提要 - 看到了相当一部分关于子域收购的报告。自从 Detectify 关于子域接管的优秀系列 文章 以来,漏洞赏金行业一直在迅速收到有关此类问题的报告。

  子域接管的基本前提是主机指向当前未使用的特定服务,攻击者可以通过在第三方服务上建立帐户来使用该服务在易受攻击的子域上提供内容。作为一名黑客和安全分析师,我每天都在处理这类问题。

  我今天的目标是为理解、查找、利用和报告子域错误配置创建一个通用指南。本文假设读者对域名系统 (DNS) 有基本的了解,并且知道如何设置子域。

  子域接管简介

  如果您以前从未执行过子域接管,或者想要新的介绍,我设计了一个示例场景来帮助您解释基础知识。对于这种情况,我们假设

  是目标,并且运行团队有一个错误赏金计划。在枚举属于所有子域时,我们偶然发现

  在此过程中,黑客偶然发现了一个指向 GitHub Pages 的子域。我们可以通过查看子域的 DNS 记录来确定这一点;在这个例子中,有多个 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.

  去的时候,发现如下404错误页面。

  

  在这一点上,大多数黑客的头脑都开始麻木了。这个 404 页面表明顶级目录下没有可用的内容,我们应该尝试将此子域添加到我们的个人 GitHub 存储库。请注意,这并不意味着可以在所有应用程序上进行接管。某些应用程序类型要求您检查 HTTP 和 HTTPS 响应以进行接管,而其他应用程序类型可能根本没有漏洞。

  

  将自定义子域添加到我们的 GitHub 项目后,我们可以看到存储库的内容已被提供——我们已经成功声明了子域。出于演示目的,索引页面现在显示青蛙的图片。

  

  二阶子域接管

  二阶子域接管,我想称之为“断开链接劫持”,是易受攻击的子域,不一定属于目标,但用于在目标 网站 上提供内容。

  这意味着,例如,资源是通过 JavaScript 块导入到目标页面上的,黑客可以声明要从中导入资源的子域。劫持在页面某处使用的主机最终会导致存储跨站点脚本,因为攻击者可以在目标页面上加载任意客户端代码。

  我想在本指南中列出这个问题的原因是为了强调一个事实,作为一名黑客,我不想将自己限制在目标主机上的子域中。您可以通过检查源代码并映射目标所依赖的所有主机来轻松扩展范围。

  

  这也是为什么如果您要劫持子域,值得花时间查看是否有任何页面从子域导入资产。

  子域枚举和发现

  既然我们对在配置错误的子域上提供内容所需的内容有了一个高级概述,下一步是掌握用于查找易受攻击的子域的各种技术、技巧和工具。

  在继续之前,我们必须首先区分抓取和强制,因为这两个过程都可以帮助您发现子域,但结果不同。爬网是一种被动侦察技术,可以使用外部服务和资源来采集属于特定主机的子域。

  一些服务,例如 DNS Dumpster 和 VirusTotal,会索引过去爬过的子域,让您可以轻松快速采集和排序结果。

  

  属于 DNS Dumpster 上的子域的结果。

  爬取不仅涉及使用索引页面,还记得检查目标的 GIT 存储库、内容安全策略标头、源代码、问题跟踪器等。源列表是无穷无尽的,我不断寻找新的方法来增加我的结果。

  通常,您发现自己的技术越独特,您就越有可能最终发现其他人遇到的情况。因此,请根据漏洞披露计划发挥创意并在实践中测试您的想法。

  Ahmed Aboul-Ela 的 Sublist3r 可以说是最容易想到的子域抓取工具。这个轻量级 Python 脚本从众多搜索引擎、SSL 证书和 网站(如 DNS Dumpster)采集子域。我的个人电脑上的设置过程非常简单:

  

  当暴力破解子域时,黑客会遍历单词列表并根据响应确定主机是否有效。请注意,始终检查目标是否启用了通配符非常重要,否则您会得到很多误报结果。

  通配符只是意味着所有子域都将返回响应,从而扭曲结果。您可以通过请求目标可能未设置的看似随机的主机名来轻松检测通配符。

  nbsp;host randomifje8z193hf8jafvh7g4q79gh274.example.com

  为了在强制使用子域时获得最佳效果,我建议使用您过去遇到过的或通常与您感兴趣的服务相关联的术语来创建您自己的个人术语列表。例如,我经常发现自己在寻找主机关键字“jira”和“git”收录以下内容,因为有时我会发现易受攻击的 Atlassian Jira 和 GIT 实例。

  如果您计划使用暴力破解子域,我强烈建议您查看 Jason Haddix 的单词列表。Jason 无法将子域发现工具中的列表合并为一个扩展列表。

  指纹识别

  为了增加查找子域的结果,无论您是抓取还是蛮力,您都可以使用一种称为指纹的技术。指纹识别允许您为目标创建自定义词表,并且可以揭示属于使用通用词表无法找到的目标的资产。

  著名工具

  有许多用于子域接管的工具。本节收录一些迄今为止尚未提及的重要内容。

  替代域名

  对于递归子域,请查看 Shubham Shah 的 Altdns 脚本。在通过 Altdns 对目标进行指纹识别后运行自定义词表可能非常有益。我喜欢使用 Altdns 生成单词列表,然后通过其他工具运行。

  普通话

  Shubham 的另一个工具 Commonspeak 是一种使用 Google 的 BigQuery 生成单词列表的工具。目标是生成反映当前趋势的单词列表,这在当今技术不断变化的时代尤为重要。如果您想更好地了解此工具的工作原理以及在哪里采集关键字,则值得一读。

  子查找器

  SubFinder 是抓取和蛮力的完美结合。我发现自己现在使用 SubFinder 作为通用子域发现工具比 Sublist3r 更多。为了获得更好的结果,请确保收录 SubFinder 为查找子域而抓取的各种服务的 API 密钥。

  大数据

  Massdns 是一个快速的子域枚举工具。使用某些工具可能需要一刻钟,Massdns 可以在一分钟内完成。请注意,如果您计划运行 Massdns,请确保为其提供有效解析器的列表。看一看,尝试解析器,看看哪个解析器返回最好的结果。如果你不更新解析器列表,你最终会得到很多误报。

  $ ./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”的文件中。echo "$subdomain" >> live.txt fi

  结束

  因此,如果我们将到目前为止的所有内容放在一起,我们将得到以下工作流程。

  

  特殊情况

  我们需要注意一种特殊情况,Frans Rosén 在他的演讲“云提供商的 DNS 劫持 - 无需验证”中强调了一种情况。每当您遇到无效的 DNS 记录时,不要只是假设您无法劫持子域。正如 Frans 所指出的,host 命令可能会返回错误,但运行 dig 会显示过时的记录。

  发展

  是的,现在您控制了属于目标的子域,下一步是什么?在确定配置错误的子域的合理攻击场景时,了解该子域如何与基本名称和目标的核心服务交互至关重要。

  饼干

  范围内的cookies是可以修改的。记住这一点很重要,因为这可能允许您劫持受害者的​​基于基本名称的会话。

  

  从,我们可以为 .

  如果基本名称容易受到会话固定的影响,并且使用 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 都支持 header 中的 ALLOW-FROM 指令 X-Frame-Options,这意味着如果您的子域被列入白名单,您可以将目标页面框架为一个点击劫持攻击。

  密码管理器

  这不一定要收录在报告中,但值得注意的是,一些密码管理器会自动填写属于主应用程序的子域的登录表单。

  

  阻止电子邮件

  Rojan Rijal 演示了如何通过在 SendGrid 上声明您所属的子域来拦截电子邮件。

  

  报告子域接管

  在尝试报告子域接管之前,请确保您实际上能够在子域上提供内容。但无论你做什么,都不要在索引页面上发布任何内容,即使是前面显示的青蛙的无害图片。最佳做法是在收录 HTML 注释中的秘密消息的隐藏路径中提供 HTML 文件。

  当您最初与您的发现联系该程序时,足以证明问题的合理性。只有在团队授予您许可后,您才能尝试升级问题并实际展示此漏洞的整体影响。但是,在大多数情况下,团队应该已经意识到影响,并且您的报告应该收录有关子域接管的可利用性的信息。

  花点时间写一份关于子域接管的报告,因为这种类型的问题可能非常有益,而且没有人指望你能击败报告,因为你(希望)是唯一控制子域的人。

  作者注:我只目睹了一份关于子域接管的重复报告,因此尽管仍有可能,但这种情况不太可能发生。

  我们已经到了本指南的结尾,我期待着在 HackerOne 上对您的子域接管报告进行分类。在寻找子域接管时,请记住练习并应用此 文章 中概述的技术。

  关于最后一点,我要感谢 Frans Rosen、FileDescriptor、Mongo 和 Tom Hudson 就子域获取交换了意见。他们的研究是我在整个旅程中发现的许多事情的基础。

  

  文章3810字,约12分钟阅读

  翻译自:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线