【Academy】Information disclosure vulnerabilities 信息泄露漏洞

1. 什么是信息泄露?

信息泄露,是指网站无意中向用户泄露敏感信息。根据上下文,网站可能会向潜在的攻击者泄露各种信息,包括:

  • 有关其他用户的数据,如用户名或财务信息
  • 敏感的商业或业务数据
  • 关于网站及其基础设施的技术细节

泄露敏感的用户或业务数据的危险是相当明显的,但披露技术信息有时也同样严重。虽然其中一些信息的用途有限,但它可能是暴露其他攻击面的起点,这些攻击面可能包含其他有趣的漏洞。您能够收集的知识甚至可以在尝试构建复杂的高严重性攻击时提供拼图的缺失部分。
有时,敏感信息可能会不小心泄露给只是以正常方式浏览网站的用户。然而,更常见的是,攻击者需要通过以意外或恶意的方式与网站进行交互来引发信息泄露。然后,他们会仔细研究网站的反应,试图找出有趣的行为。
信息披露实例
信息披露的一些基本例子如下:

  • 通过robots.txt文件或目录列表显示隐藏目录的名称、结构和内容
  • 通过临时备份提供对源代码文件的访问
  • 在错误消息中明确提及数据库表名或列名
  • 不必要地暴露高度敏感的信息,如信用卡详细信息
  • 在源代码中硬编码API密钥、IP地址、数据库凭据等
  • 通过应用程序行为中的细微差异来暗示资源、用户名等的存在与否

2. 信息泄露是如何产生的?

信息泄露漏洞可能以无数不同的方式出现,但这些漏洞大致可分为以下几类:

  • 无法从公共内容中删除内部内容。例如,标记中的开发人员注释有时对生产环境中的用户可见。
  • 网站和相关技术的配置不安全。例如,未能禁用调试和诊断功能有时会为攻击者提供有用的工具,帮助他们获取敏感信息。默认配置也可能使网站易受攻击,例如,通过显示过于冗长的错误消息。
  • 应用程序的设计和行为存在缺陷。例如,如果一个网站在出现不同的错误状态时返回不同的响应,这也可能允许攻击者枚举敏感数据,如有效的用户凭据。

3. 信息泄露漏洞有何影响?

信息泄露漏洞可能会产生直接和间接影响,具体取决于网站的目的,以及攻击者能够获得的信息。在某些情况下,仅披露敏感信息的行为就可能对受影响方产生重大影响。例如,一家网上商店泄露了顾客的信用卡详细信息,可能会产生严重的后果。
另一方面,泄露技术信息,如目录结构或正在使用的第三方框架,可能几乎没有直接影响。然而,在错误使用的情况下,这可能是构建任何其他漏洞所需的关键信息。这种情况下的严重性取决于攻击者能够使用此信息做什么。

如何评估信息泄露漏洞的严重程度
虽然最终的影响可能非常严重,但只有在特定情况下,信息披露本身才是一个高度严重的问题。在测试过程中,只有当您能够演示攻击者如何使用技术信息进行有害操作时,才会对技术信息的披露感兴趣。
例如,如果一个网站正在使用一个特定的框架版本,如果这个版本被完全修补,那么这个知识的用处就有限了。但是,当网站使用包含已知漏洞的旧版本时,此信息变得非常重要。在这种情况下,执行破坏性攻击可能就像应用公开记录的漏洞一样简单。
当你发现潜在的敏感信息被泄露时,运用常识是很重要的。在您测试的许多网站上,可能会以多种方式发现次要的技术细节。因此,您的主要关注点应该是泄露信息的影响和可利用性,而不仅仅是将信息泄露作为一个独立的问题。一个明显的例外是,当泄露的信息是如此敏感,它本身就值得关注。

4. 测试信息泄露

4.1 如何测试信息泄露漏洞

一般来说,重要的是不要在测试过程中形成“狭隘的视野”。换句话说,你应该避免过于狭隘地关注某个特定的漏洞。敏感数据可能会在各种地方泄露,因此重要的是不要错过以后可能有用的任何东西。您经常会在测试其他内容时发现敏感数据。一个关键的技能是能够识别有趣的信息,无论何时何地。

Fuzzing

如果您发现了有趣的参数,可以尝试提交意外的数据类型和巧尽心思构建的模糊字符串,以查看其效果。密切注意;尽管响应有时会显式地公开感兴趣的信息,但它们也可以更微妙地暗示应用程序的行为。例如,这可能是处理请求所花费的时间的微小差异。即使错误消息的内容没有透露任何信息,有时遇到一个错误而不是另一个错误的事实本身就是有用的信息。

可以使用Intruder等工具执行此过程:

  • 将有效载荷位置添加到参数中,并使用预先构建的模糊字符串列表来快速连续测试大量不同的输入。
  • 通过比较HTTP状态代码、响应时间、长度等,轻松识别响应中的差异。
  • 使用grep匹配规则快速识别关键字的出现,例如errorinvalidSELECTSQL等。
  • 应用grep提取规则来提取和比较响应中感兴趣的项目的内容。

还可以使用Logger++扩展,除了记录所有工具的请求和响应之外,它还允许您定义高级过滤器来突出显示感兴趣的条目。

使用扫描器

可以使用Scanner,这为您浏览时审核项目提供了实时扫描功能,或者可以安排自动扫描以对目标站点进行爬网和审核。这两种方法都会自动标记许多信息泄露漏洞。例如,如果Scanner在响应中找到敏感信息(如私钥、电子邮件地址和信用卡号码),它会提醒。它还将标识任何备份文件、目录列表等。

使用engagement tools

可以从上下文菜单访问参与工具-只需右键单击任何HTTP消息,条目或站点地图中的项目,然后转到“engagement tools”。以下工具在这方面特别有用。
搜索

可以使用此工具在选定项中查找任何表达式。可以使用各种高级搜索选项(如regex搜索或否定搜索)对结果进行微调。这对于快速查找感兴趣的特定关键字的出现(或缺失)非常有用。
查找注释

可以使用此工具快速提取在选定项目中找到的任何开发人员注释。它还提供了选项卡来即时访问每个注释所在的HTTP请求/响应周期。
发现内容

可以使用此工具识别未从网站可见内容链接的其他内容和功能。这对于查找不一定会自动出现在站点地图中的其他目录和文件非常有用。

工程信息响应

当您进行正常的测试工作流时,详细的错误消息有时会泄露一些有趣的信息。但是,通过研究错误消息根据输入而变化的方式,您可以更进一步。在某些情况下,您将能够操纵网站,以便通过错误消息提取任意数据。

根据您遇到的特定情况,有许多方法可以做到这一点。一个常见的例子是使应用程序逻辑尝试对特定数据项执行无效操作。例如,提交一个无效的参数值可能会导致包含有趣细节的堆栈跟踪或调试响应。您有时可能会导致错误消息在响应中公开所需数据的值。

4.2 信息泄露的通常来源

信息泄露可以在网站内的各种环境中发生。以下是一些常见的示例,您可以查看这些位置是否暴露了敏感信息。

用于网络爬虫的文件

许多网站在/robots.txt/sitemap.xml提供文件,以帮助爬虫浏览他们的网站。除其他事项外,这些文件通常列出爬虫程序应该跳过的特定目录,例如,因为它们可能包含敏感信息。

由于这些文件通常不会从网站内部链接,所以,值得尝试手动导航到/robots.txt/sitemap.xml,看看是否找到有用的东西。

目录列表

Web服务器可以配置为自动列出没有索引页的目录的内容。这可以帮助攻击者快速识别给定路径上的资源,并直接分析和攻击这些资源。它尤其会增加目录中不打算让用户访问的敏感文件的暴露,例如临时文件和崩溃转储。

目录列表本身不一定是安全漏洞。但是,如果网站也未能实施适当的访问控制,以这种方式泄露敏感资源的存在和位置显然是一个问题。

开发者注释

在开发过程中,有时会向标记添加行内HTML注释。这些注释通常在将更改部署到生产环境之前被剥离。然而,注释有时会被遗忘、错过,甚至是故意留下,因为有人没有完全意识到安全问题。虽然这些注释在呈现的页面上不可见,但可以使用浏览器内置的开发人员工具轻松访问它们。

有时,这些注释包含对攻击者有用的信息。例如,它们可能暗示隐藏目录的存在或提供有关应用程序逻辑的线索。

错误消息

信息泄露的最常见原因之一是冗长的错误消息。作为一般规则,您应该密切注意在审核期间遇到的所有错误消息。

错误消息的内容可以揭示有关给定参数所期望的输入或数据类型的信息。这可以帮助您通过识别可利用的参数来缩小攻击范围。它甚至可以防止您浪费时间尝试注入根本无法工作的有效负载。

详细的错误消息还可以提供有关网站使用的不同技术的信息。例如,他们可能会显式地命名网站正在使用的模板引擎、数据库类型或服务器,以及其版本号沿着。此信息非常有用,因为您可以轻松搜索此版本可能存在的任何已记录的漏洞利用。同样,您可以检查是否有任何常见的配置错误或危险的默认设置,您可能能够利用。其中一些可能在正式文件中得到强调。

您可能还会发现该网站正在使用某种开源框架。在这种情况下,您可以研究公开的源代码,这是构建您自己的漏洞的宝贵资源。

错误消息之间的差异还可以揭示在幕后发生的不同应用程序行为。观察错误消息中的差异是许多技术(如SQL注入、用户名枚举等)的关键方面。

调试数据

出于调试目的,许多网站生成自定义错误消息和日志,其中包含有关应用程序行为的大量信息。虽然这些信息在开发过程中很有用,但如果在生产环境中泄露,对攻击者也非常有用。

调试信息有时可能包含准备攻击的重要信息,包括:

  • 可通过用户输入操作的关键会话变量的值
  • 后端组件的主机名和凭据
  • 服务器上的文件名和目录名
  • 用于加密通过客户端传输的数据的密钥

有时候,可能会在单独的文件中记录故障信息。如果攻击者能够访问此文件,则它可以作为了解应用程序运行时状态的有用参考。它还可以提供一些线索,说明它们如何提供精心编制的输入来操作应用程序状态和控制接收到的信息。

用户帐户

就其本质而言,用户的个人资料或帐户页面通常包含敏感信息,例如用户的电子邮件地址、电话号码、API密钥等。由于用户通常只能访问自己的帐户页面,因此这本身并不代表漏洞。但是,某些网站包含逻辑缺陷,可能允许攻击者利用这些页面查看其他用户的数据。

例如,考虑一个网站,它根据user参数确定要加载哪个用户的帐户页面。

GET /user/personal-info?user=carlos

大多数网站都会采取措施防止攻击者简单地更改此参数以访问任意用户的帐户页面。但是,有时加载单个数据项的逻辑并不那么健壮。

攻击者可能无法完全加载另一个用户的帐户页面,但用于获取和呈现用户注册电子邮件地址的逻辑可能无法检查user参数是否与当前登录的用户匹配。在这种情况下,只需更改user参数,攻击者就可以在用户自己的帐户页面上显示任意用户的电子邮件地址。

在访问控制和IDOR漏洞,将更详细地介绍这类漏洞。

通过备份文件泄露源代码

获得源代码访问权限使攻击者更容易理解应用程序的行为并构造严重性攻击。敏感数据有时甚至硬编码在源代码中。这方面的典型示例包括用于访问后端组件的API密钥和凭据。

如果您可以识别出正在使用的特定开源技术,则可以轻松访问有限数量的源代码。

有时,甚至可能导致网站公开自己的源代码。在规划网站时,您可能会发现某些源代码文件被显式引用。不幸的是,请求它们通常不会显示代码本身。当服务器处理具有特定扩展名的文件时,例如.php,它通常会执行代码,而不是简单地将其作为文本发送给客户端。但是,在某些情况下,您可以欺骗网站返回文件的内容。例如,文本编辑器经常在编辑原始文件时生成临时备份文件。这些临时文件通常以某种方式表示,例如在文件名后添加波浪号(~)或添加不同的文件扩展名。使用备份文件扩展名请求代码文件有时可以让您在响应中读取文件的内容。
一旦攻击者能够访问源代码,这可能是朝着能够识别和利用其他漏洞迈出的一大步,否则几乎不可能。一个这样的例子是不安全的反序列化。

配置不安全导致信息泄露

由于配置不当,网站有时容易受到攻击。由于第三方技术的广泛使用,这种情况尤其常见,这些技术的大量配置选项不一定被实现它们的人很好地理解。

在其他情况下,开发人员可能忘记禁用生产环境中的各种调试选项。例如,HTTPTRACE方法是为诊断目的而设计的。如果启用,Web服务器将通过在响应中回显接收到的确切请求来响应使用TRACE方法的请求。这种行为通常是无害的,但偶尔会导致信息泄露,例如可能被反向代理附加到请求中的内部身份验证标头的名称。

版本控制历史

几乎所有的网站都是使用某种形式的版本控制系统开发的,比如Git。默认情况下,Git项目将其所有版本控制数据存储在名为.git的文件夹中。有时,网站会在生产环境中公开此目录。在这种情况下,您可以通过简单地浏览到/.git来访问它。

虽然手动浏览原始文件结构和内容通常是不切实际的,但有各种方法可以下载整个.git目录。然后,您可以使用本地安装的Git打开它,以访问网站的版本控制历史记录。这可能包括包含提交的更改和其他感兴趣的信息的日志。

这可能无法让您访问完整的源代码,但比较diff将允许您阅读代码的小片段。与任何源代码一样,您也可能会在某些更改的行中发现硬编码的敏感数据。

5. 如何防范信息泄露漏洞

完全防止信息泄露是棘手的,因为它可能以各种各样的方式发生。但是,您可以遵循一些通用的最佳实践,以最大限度地降低此类漏洞侵入您自己网站的风险。

  • 确保参与制作网站的每个人都充分了解哪些信息被认为是敏感的。有时候,看似无害的信息对攻击者来说可能比人们意识到的更有用。突出显示这些危险有助于确保您的组织在一般情况下更安全地处理敏感信息。
  • 作为QA或构建过程的一部分,审计任何代码以防止潜在的信息泄露。自动化一些相关的任务应该相对容易,比如剥离开发人员注释。
  • 尽可能使用通用错误消息。不要向攻击者提供有关应用程序行为的不必要的线索。
  • 仔细检查是否在生产环境中禁用了任何调试或诊断功能。
  • 确保您完全了解您实施的任何第三方技术的配置设置和安全含义。花时间分析和禁用任何你实际上并不需要的功能和设置。
  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值