信息泄露漏洞
翻译
原文:https://portswigger.net/web-security/information-disclosure
- name: 翻译
desc: 原文:https://portswigger.net/web-security/information-disclosure
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# 1信息泄露漏洞(信息披露漏洞)
在本节中,我们将解释信息泄露漏洞的基础知识,并描述如何查找和利用这些漏洞。我们还将提供一些指导,关于 “如何在自己的网站中防范信息泄露漏洞” 。

发现和利用信息泄露 是任何测试人员的一项重要技能。你可能会经常遇到它,一旦你知道如何有效地利用它,它将帮助你提高测试效率,并使你能够找到其他高严重性错误。
实验室
如果您已经熟悉 信息泄露漏洞 背后的基本概念,并且只想在一些实际的、易受攻击的目标上练习和利用它们,那么您可以从下面的链接访问本主题中的所有实验室。
# 1.1什么是信息泄露?
信息泄露,也称为信息披露,是指网站无意中向用户透露敏感信息。根据内容的不同,网站可能会向潜在的攻击者泄露各种信息,包括:
- 有关其他用户的数据,例如 用户名或财务信息
- 敏感的商业或业务数据
- 关于网站及其基础设施的技术细节
泄露 敏感的用户或业务数据 具有相当明显的危险性,但有时 披露站点技术信息 也可能同样严重。尽管其中一些信息的用途有限,但它可能是暴露其他攻击面的起点,其中可能包含其他有趣的漏洞。如果你能够收集足够的信息,甚至可以在尝试构建复杂的高严重性攻击时,为其提供拼图的缺失部分。
(译者加:例如,在进行 SQL 注入写 webshell 的操作时,需要知道目标系统的绝对路径,而 “系统路径泄露” 则是重要的拼图部分)
有时,一个以正常方式浏览网站的用户,可能会在不经意间 接触到泄露的敏感信息。然而,更常见的是,攻击者需要通过 意外或恶意的方式 与网站交互,从而引发信息泄露。然后,他们将会仔细研究网站的响应,并试图找出有趣的部分。
# 1.1.1信息泄露示例
信息披露的一些基本示例如下:
- 通过
robots.txt
文件或目录列表,显示隐藏目录的名称、结构和内容 - 临时备份的源代码文件
- 在错误消息中,明文显示数据库表名或列名
- 不必要地暴露高度敏感的信息,例如信用卡详细信息
- 在源代码中硬编码 API 密钥、IP 地址、数据库凭据等
- 通过应用程序行为的细微差异,暗示资源、用户名等的存在与否
在本主题中,你将学习如何查找和利用其中的一些示例以及更多知识。
# 1.2信息泄露漏洞是如何产生的?
信息泄露漏洞可能以无数种不同的方式出现,但这些漏洞大致可分为以下几类:
- 没有在公共内容中删除内部信息。例如,开发人员在源代码中标记的注释,有时会对生产环境中的用户可见。
- 网站和相关技术的配置不安全。例如,未禁用调试和诊断功能,这有时会为攻击者提供有效的工具,以帮助他们获取敏感信息。默认配置也可能使网站易受攻击,例如,显示过于详细的错误消息。
- 应用程序的设计和行为存在缺陷。例如,发生不同的错误状态时,如果网站返回不同的响应,则可以允许攻击者枚举敏感数据,例如有效的用户凭据。
(译者加:以上三类可以记为 “人员疏忽”、“配置不当”、“逻辑缺陷” 导致的信息泄露)
# 1.3信息泄露漏洞的影响是什么?
信息泄露漏洞可能会产生 直接和间接 的影响,具体取决于网站的行业特性,还取决于 攻击者能够获得哪些信息。
在某些情况下,仅仅是披露敏感信息的行为,就可能会对受牵连的各方产生很大影响。例如,一家在线商店泄露了客户的信用卡详细信息,这可能会对 商店和顾客双方 都产生严重后果。
另一方面,泄漏的网站技术信息(例如 目录结构或正在使用的第三方框架)可能没有直接影响。但是,在攻击者手中,这可能是构建任何其他漏洞的关键信息。这种情况的严重性取决于 攻击者能够使用此信息执行哪些操作。
(译者加:以上可记为 “人或计算机” 的信息泄露。“人”的信息泄露会产生直接影响,例如经济损失、信誉损失、个人信息外泄等。“计算机”的信息泄露会产生间接影响,可能会增加其他漏洞的攻击面)
# 1.4.1如何评估信息泄露漏洞的严重程度
尽管最终的影响可能非常严重,但只有在特定情况下,信息泄露本身 才可以算是一个高度严重的问题。在测试过程中,“网站技术信息的披露” 通常只有在你能够证明,证明攻击者如何使用它进行有害操作时才有意义。
例如,如果某个网站已完全修补当前框架版本,则网站 “正在使用特定框架版本的信息” 用途有限。但是,当网站使用包含已知漏洞的旧版本时,此信息将变得很重要。在这种情况下,执行破坏性攻击 可能就像 利用公开记录的漏洞一样简单。
当你发现潜在的敏感信息被泄露时,常识的运用 是非常重要的。在你测试的许多网站上,可能会以多种方式发现次要的技术细节。因此,你的主要关注点应该是 泄露信息的影响性和可利用性,而不仅仅是将信息泄露作为一个独立存在的问题。一个明显的例外是,当泄露的信息非常敏感,以至于它本身就值得关注时。
(以下为译者加:信息泄露可以分为 “直接泄露” 或 “间接泄露”)
- 直接泄露:程序直接返回了所有用户的身份证号码,泄露本身可以算作 “高危/严重” 。
- 间接泄露:程序返回了一个接口,通过这个接口可以查询所有用户的身份证号码。
- 在 “间接泄露” 的例子当中,你需要思考这个接口的可利用性,如果你成功以 接口+某种技术 获得了所有用户的身份证号码,则泄露的影响可以算作 “高危/严重” 。
- 但,如果你不能用这个接口获得任何身份证号码,则泄露的影响为零,泄露本身算作 “低危” 。
# 1.4利用信息泄露
我们汇总了一些更实用的建议,以帮助你识别和利用这些类型的漏洞。你还可以使用我们的 交互式实验室 来练习这些技术。
# 1.5如何防范信息泄露漏洞
完全防止信息泄露是很棘手的,因为它可能以各种各样的方式发生。但是,你可以遵循一些通用的最佳实践,以最大限度地降低 自身遇到此类漏洞的风险。
- 确保参与制作网站的每个人,都充分了解哪些信息被认为是敏感的。有时,看似无害的信息对攻击者来说,可能比人们意识到的要有用得多。突出显示这些危险,有助于确保组织更安全地处理敏感信息。
- 审核任何代码,将其作为 QA 或 程序构建过程 的一部分,以防止潜在的信息泄露。对一些相关任务 执行自动化操作,使其变得相对容易,例如 剥离开发人员注释。
- 尽可能使用统一的错误消息。不要多余地向攻击者提供有关应用程序行为的线索。
- 仔细检查生产环境中,是否禁用了任何调试或诊断功能。
- 确保你完全了解 所实施的任何第三方技术配置和安全隐患。花点时间调查,并禁用任何你实际上不需要的功能和设置。
(译者加:QA - 代码质量检测)
(以下为译者加:防范措施可总结为以下 5 条)
- 开发人员安全意识培训。
- 开发和安全 两者同步进行,通过 自动化 使其变得相对容易实施,例如现在流行的 DevSecOps。
- 统一错误消息。
- 生产环境禁用Debug。
- 注意 第三方技术/组件 的安全隐患,通用漏洞修了没?默认配置改了没?不需要的功能禁用了没?