信息泄露
什么是信息披露?
信息披露,也称为信息泄露,是指网站无意间向用户泄露敏感信息。根据上下文的不同,网站可能会将各种信息泄漏给潜在的攻击者,包括:
- 有关其他用户的数据,例如用户名或财务信息
- 敏感的商业或商业数据
- 有关网站及其基础架构的技术细节
泄露敏感的用户或业务数据的危险相当明显,但是泄露技术信息有时可能同样严重。尽管某些信息用途有限,但它可能是暴露其他攻击面的起点,其中可能包含其他有趣的漏洞。
有时,敏感信息可能会不慎泄露给仅以正常方式浏览网站的用户。但是,更常见的是,攻击者需要通过以意外或恶意的方式与网站进行交互来引发信息泄露。然后,他们将仔细研究网站的响应,以尝试找出有趣的行为。
信息公开的一些例子
- 通过robots.txt文件或目录列表显示 隐藏目录的名称,其结构及其内容
- 通过临时备份提供对源代码文件的访问
- 在错误消息中明确提及数据库表或列名
- 不必要地暴露高度敏感的信息,例如信用卡详细信息
- 在源代码中对API密钥,IP地址,数据库凭据等进行硬编码
- 通过应用程序行为的细微差别来提示是否存在资源,用户名等
信息泄露漏洞是如何产生的?
信息泄露漏洞可能以无数种不同的方式出现,但可以将它们大致归类为以下几种:
- 无法从公共内容中删除内部内容。例如,有时开发环境中的用户可以看到标记中的开发人员注释。
- 网站和相关技术的配置不安全。例如,未能禁用调试和诊断功能有时可以为攻击者提供有用的工具,以帮助他们获取敏感信息。默认配置还可能使网站容易受到攻击,例如,通过显示过于冗长的错误消息。
- 应用程序的缺陷设计和行为。例如,如果网站在发生不同的错误状态时返回不同的响应,这也可能使攻击者枚举敏感数据,例如有效的用户凭据。
信息披露的共同来源
网络爬虫文件
许多网站都在上提供文件/robots.txt或/sitemap.xml帮助抓取工具浏览其网站。其中,这些文件通常列出爬网程序应跳过的特定目录,例如,因为它们可能包含敏感信息。
由于通常不从网站内部链接这些文件,因此它们可能不会立即出现在Burp的站点地图中。但是,值得尝试导航/robots.txt或/sitemap.xml手动查看是否发现有用的东西
目录清单
可以将Web服务器配置为自动列出没有索引页的目录的内容。通过使攻击者能够快速识别给定路径上的资源,并直接进行分析和攻击,可以为攻击者提供帮助。它特别增加了目录中不希望用户访问的敏感文件(例如临时文件和故障转储)的暴露率。
目录列表本身不一定是安全漏洞。但是,如果网站也无法实施适当的访问控制,则以这种方式泄漏敏感资源的存在和位置显然是一个问题。
开发者评论
在开发过程中,有时会将行内HTML注释添加到标记中。在将更改部署到生产环境之前,通常会删除这些注释。但是,有时会因为某些人没有完全意识到安全隐患而故意忘记,遗漏甚至留下评论。尽管这些注释在呈现的页面上不可见,但是可以使用Burp甚至浏览器的内置开发人员工具轻松地访问它们。
有时,这些注释包含对攻击者有用的信息。例如,它们可能暗示隐藏目录的存在或提供有关应用程序逻辑的线索。
错误信息
信息泄露的最常见原因之一是冗长的错误消息。通常,您应密切注意审核期间遇到的所有错误消息。
错误消息的内容可以揭示有关从给定参数期望什么输入或数据类型的信息。通过识别可利用的参数,这可以帮助您缩小攻击范围。它甚至可能阻止您浪费时间尝试注入根本无法正常工作的有效负载。
详细的错误消息还可以提供有关网站使用的不同技术的信息。例如,他们可能会明确命名网站正在使用的模板引擎,数据库类型或服务器,以及其版本号。该信息很有用,因为您可以轻松地搜索该版本可能存在的任何已记录的利用。同样,您可以检查是否存在可以利用的常见配置错误或危险的默认设置。其中一些可能会在官方文档中突出显示。
您可能还会发现该网站正在使用某种开放源代码框架。在这种情况下,您可以研究可公开获得的源代码,这是构建自己的漏洞利用的宝贵资源。
错误消息之间的差异还可以揭示幕后发生的不同应用程序行为。观察错误消息中的差异是许多技术的关键方面,例如SQL注入,用户名枚举等。
调试数据
为了进行调试,许多网站都会生成自定义错误消息和日志,其中包含有关应用程序行为的大量信息。尽管此信息在开发过程中很有用,但如果在生产环境中泄漏,则对攻击者也非常有用。
调试消息有时可能包含用于发动攻击的重要信息,包括:
- 可以通过用户输入操作的关键会话变量的值
- 后端组件的主机名和凭据
- 服务器上的文件和目录名称
- 用于加密通过客户端传输的数据的密钥
调试信息有时可能会记录在单独的文件中。如果攻击者能够访问此文件,则它可以用作了解应用程序运行时状态的有用参考。它还可以提供一些线索,说明它们如何提供精心设计的输入以操纵应用程序状态并控制接收到的信息。
通过备份文件公开源代码
获得源代码访问权限使攻击者更容易理解应用程序的行为并构造高严重性攻击。敏感数据有时甚至被硬编码在源代码中。典型的示例包括API密钥和用于访问后端组件的凭据。
如果您可以确定正在使用特定的开源技术,则可以轻松访问有限数量的源代码。
有时,甚至有可能导致该网站公开其自身的源代码。在映射网站时,您可能会发现某些源代码文件被明确引用。不幸的是,请求它们通常不会透露代码本身。当服务器处理带有特定扩展名(例如)的文件时.php,它通常会执行代码,而不是简单地将其作为文本发送给客户端。但是,在某些情况下,您可以诱使网站返回文件内容。例如,文本编辑器经常在编辑原始文件时生成临时备份文件。这些临时文件通常以某种方式表示,例如通过添加波浪号(~)添加到文件名或添加其他文件扩展名。使用备份文件扩展名请求代码文件有时可以使您读取响应中文件的内容。
由于配置不安全而导致的信息泄露
由于配置不当,网站有时容易受到攻击。由于第三方技术的广泛使用,这种情况尤为普遍,第三方技术的广泛配置选项并不一定被实施它们的人员所理解。
在其他情况下,开发人员可能会忘记在生产环境中禁用各种调试选项。例如,HTTPTRACE方法被设计用于诊断目的。如果启用,Web服务器将TRACE通过在响应中回显收到的确切请求来响应使用该方法的请求。此行为通常是无害的,但有时会导致信息泄露,例如内部身份验证标头的名称,该名称可能由反向代理附加到请求中。
信息泄露漏洞的影响是什么?
信息泄露漏洞可能同时具有直接和间接影响,具体取决于网站的目的以及因此攻击者能够获取的信息。在某些情况下,仅披露敏感信息的行为会对受影响的各方产生重大影响。例如,一家网上商店泄露其客户的信用卡详细信息可能会造成严重后果。
另一方面,泄漏技术信息(例如目录结构或使用的是第三方框架)可能几乎没有影响,甚至没有直接影响。但是,如果使用不当,这可能是构造任何其他漏洞利用程序所需的关键信息。在这种情况下,严重性取决于攻击者对该信息的处理能力。
如何防止信息泄露漏洞
由于发生信息的方式多种多样,因此完全防止信息泄露是很棘手的。但是,我们可以遵循一些一般的最佳做法,以最大程度地减少此类漏洞蔓延到您自己的网站中的风险。
- 确保参与网站制作的每个人都充分了解哪些信息被视为敏感信息。有时看似无害的信息对攻击者可能比人们意识到的有用得多。突出显示这些危险可以帮助确保组织通常更安全地处理敏感信息。
- 在质量检查或构建过程中,审核任何代码以发现潜在的信息泄漏。自动执行某些相关任务(例如剥离开发人员注释)应该相对容易。
- 尽可能使用一般错误消息。不要向攻击者不必要地提供有关应用程序行为的线索。
- 仔细检查生产环境中是否禁用了任何调试或诊断功能。
- 确保完全了解所实现的任何第三方技术的配置设置和安全隐患。花时间研究和禁用您实际上不需要的任何功能和设置。