# 信息泄露漏洞

在本节中，我们将讲解信息泄露漏洞的基本知识，并介绍如何发现和利用它们。我们还将提供一些指南，以帮助你防范自己网站中的信息泄露漏洞。

![](https://2165487371-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FfahSMMYUzmqmE8SfCaax%2Fuploads%2Fgit-blob-b05cdda1c98101f3633cc2594932d17274aba302%2Finformation-disclosure.jpg?alt=media)

学习发现和利用信息泄露是任何测试人员的一项重要技能。你可能经常会遇到这种问题，一旦你知道如何有效地利用它，就可以提高你的测试效率，并使你找到更多的高危漏洞。

> **Labs**
>
> 如果你已经熟悉信息泄露漏洞背后的基本概念，并且只想在一些真实的、故意易受攻击的目标上练习利用它们，你可以从下面的链接中访问该主题中的所有实验。
>
> [查看所有信息泄露实验](https://portswigger.net/web-security/all-labs#information-disclosure)

## 什么是信息泄露？

信息泄露（Information disclosure，也被称为Information leakage），是指网站无意中向用户泄露敏感信息。根据具体情况，网站可能会向潜在的攻击者泄露各种信息，包括：

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

泄露敏感的用户或业务数据的危险相当明显，但泄露技术信息有时候也同样严重。尽管其中的一些信息用处有限，但它可能成为暴露额外攻击面的起点，这些攻击面可能包含其他有趣的漏洞。当你试图构造复杂、高危的攻击时，你所能收集的知识甚至可以提供所缺失的一部分。

有时，敏感信息可能会无意中泄露给只是正常浏览网站的用户。而更常见的是，攻击者通过以非预期或恶意的方式与网站进行交互来引发信息泄露。然后，他们会仔细研究网站的响应，以试图识别有趣的行为。

### 信息泄露示例

信息泄露的一些基本示例如下：

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

在本专题中，你将学习如何发现并利用这些示例以及更多。

> **阅读更多**
>
> [如何发现并利用信息泄露漏洞](https://web-sec.gitbook.io/wsa/server-side/information-disclosure/exploiting)

## 信息泄露漏洞是如何产生的？

信息泄露漏洞可以以无数不同的方式产生，但大致可分为以下几类：

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

## 信息泄露漏洞的影响是什么？

信息泄露漏洞会产生直接和间接的影响，这取决于网站的目的以及攻击者能够获取的信息。在某些情况下，仅仅披露敏感信息这一行为就会对受影响方造成很大的影响。例如，一个在线商店泄露其客户的信用卡详细信息可能会造成严重的后果。

另一方面，泄露技术信息，如目录结构或正在使用的第三方框架，可能没有直接的影响。然而，如果落入坏人之手，这些信息就可能成为构造其他攻击所需的关键信息。这种情况的严重性取决于攻击者能够利用这些信息做什么。

### 如何评估信息泄露漏洞的严重性

尽管最终的影响可能非常严重，但只有在特定情况下，信息泄露才是一个高危的问题。在测试过程中，特别是泄露技术信息，只有当你能够证明攻击者如何用它进行有害的操作时，它才会引起特别关注。

例如，如果一个网站使用的框架版本已完全打上了补丁，那么知道该版本的作用就很有限。然而，当网站使用一个包含已知漏洞的旧版本时，这一信息就变得非常重要。在这种情况下，实施破坏性攻击可能就像应用公开记录的攻击一样简单。

当你发现可能敏感的信息正在被泄露时，重要的是要行使常识。很可能在你测试的许多网站上，都可以通过多种方式发现一些次要的技术细节。因此，你的主要关注点应该是泄露信息的影响和可利用性，而不仅仅是信息泄露作为一个独立问题的存在。一个明显的例外是当泄露的信息非常敏感，以至于它本身就值得关注。

## 利用信息泄露

我们整理了一些更实用的建议，以帮助你识别和利用这类漏洞。你也可以使用我们的交互式实验来练习这些技术。

> **阅读更多**
>
> [如何发现并利用信息泄露漏洞](https://web-sec.gitbook.io/wsa/server-side/information-disclosure/exploiting)

## 如何防范信息泄露漏洞

由于信息泄露可能以各种方式发生，因此完全防止信息泄露是很难的。不过，你可以遵循一些通用的最佳实践，以最大限度地降低此类漏洞潜入你自己网站的风险。

* 确保参与网站制作的每个人都充分了解哪些信息被认为是敏感的。有时看似无害的信息对于攻击者来说，可能比人们意识到的要有用得多。强调这些危险有助于确保你的组织更安全地处理敏感信息。
* 作为QA或构建流程的一部分，审计任何代码是否存在潜在的信息泄露。一些相关任务的自动化应该相对容易，例如去除开发者的注释。
* 尽可能使用通用错误消息。不要向攻击者提供不必要的应用程序行为的线索。
* 仔细检查是否在生产环境中禁用了任何调试或诊断功能。
* 确保你完全了解你实现的任何第三方技术的配置设置和安全影响。花时间调查并禁用任何你实际上不需要的功能和设置。
