如何发现和利用信息泄露漏洞
翻译
原文:https://portswigger.net/web-security/information-disclosure/exploiting
- name: 翻译
desc: 原文:https://portswigger.net/web-security/information-disclosure/exploiting
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# 1如何发现和利用信息泄露漏洞
在本节中,我们将提供一些实用的技术和工具,你可以使用这些技术和工具,来帮助你识别各种环境中的信息泄露。我们还提供了几个实验室,以便你可以练习提取不同类型的信息,以用作进一步的攻击。
# 1.1如何测试信息泄露漏洞
一般来说,在测试过程中不要产生 “狭隘的视野” 是很重要的。换句话说,你应该避免过于狭隘地关注特定漏洞,因为敏感数据可能会在各种地方泄露,所以重要的是 不要错过任何可能有用的信息。在测试其他内容时,你经常会发现敏感数据。一个关键的技能 “能够 随时随地 识别有趣的信息” 。
下面是一些高级技术和工具的示例,可用于在测试期间 帮助识别信息泄露漏洞。
- 模糊测试(Fuzzing) (opens new window)
- 使用 Burp Scanner (opens new window)
- 使用 Burp 的辅助工具(engagement tools) (opens new window)
- 工程信息响应 (opens new window)
# 1.1.1模糊测试(Fuzzing)
如果发现了有趣的参数,可以尝试提交意外的数据类型 和 特制的模糊字符串,以查看其效果。密切关注响应,它们虽然有时会 显式公开有趣的信息,但它们也可以更巧妙地暗示应用程序的行为。例如,可能是处理请求所花费时间的略微差异。再者,即使错误消息的内容没有泄露任何信息,但有时 “遇到一个错误而不是另一个错误” 这一事实本身就是有用的信息。
你可以使用 Burp Intruder 等工具自动执行此过程的大部分工作量。这提供了几个益处。最值得注意的是,你可以:
- 为参数添加有效负载,并使用预先构建的模糊字符串列表,快速连续地测试大量不同的输入。
- 通过比较 HTTP 状态代码、响应时间、长度等,轻松识别响应的差异。
- 使用 Grep-Match 来创建匹配规则,以快速识别出现的关键字,例如
error
、invalid
、SELECT
、SQL
等。 - 应用 Grep-Extract 规则,以提取和比较响应中的相关项目内容。
你还可以使用Logger++ (opens new window)扩展,它可从 BApp 商店获得。除了记录来自 Burp 所有工具的请求和响应之外,它还允许自定义高级过滤器,以突出显示感兴趣的条目。这只是其中的 Burp 扩展之一,通过使用这些扩展,可以帮助你查找网站泄露的任何敏感数据。
# 1.1.2使用Burp Scanner (opens new window)
Burp Suite专业版 (opens new window)的用户可以使用 Burp Scanner 功能。
- 在你浏览和审核项目时,它可以提供实时扫描功能(被动扫描)
- 或者你可以设置自动扫描计划,自动对目标站点进行爬网和审核(主动扫描)
这两种方法都会自动为你标记许多信息泄露漏洞。例如,如果 Burp Scanner 在响应中找到敏感信息(私钥、电子邮件地址和信用卡号等),则它会标记并提醒你。同时,它还会识别任何备份文件、目录列表等。
# 1.1.3使用 Burp 的辅助工具(engagement tools)
Burp 提供了几种辅助工具,你可以使用它们 更轻松地在目标网站中找到有趣的信息。你可以从上下文菜单访问辅助工具 - 右键单击任意 “HTTP消息 / Burp Proxy条目 / sitemap项目”,然后选择 “Engagement tools” 。
(译者加:在 BurpSuite 里面随便找个数据包 “右键 --> Engagement tools”)
# Search(搜索)
使用此工具,可以在所选项目中查找任何表达式。你可以使用各种高级搜索选项(例如 正则表达式搜索或否定搜索)对结果进行微调。这对于快速查找感兴趣的特定关键字的出现(或缺失)非常有用。
# Find comments(查找注释)
使用此工具,可以快速提取在所选项目中找到的任何开发人员注释。它还提供了选项卡,用于即时访问 每个注释所在的 HTTP请求/响应 周期。
# Discover content(内容发现)
使用此工具,可以识别网站上 不可见的链接/功能/其他内容。某些目录和文件 不一定会自动显示在站点地图中,这对于查找这些内容非常有用。
# 1.1.4工程信息响应
当你进行正常的工作流程时,详细的错误消息有时会泄露一些有趣的信息。但是,你可以更进一步,通过输入不同的字段,然后研究错误消息变化的方式。在某些情况下,你将能够操纵网站,以便通过错误消息提取任意数据。
根据你遇到的特定场景,有许多方法可以实现此操作。一个常见的示例,尝试让 应用程序逻辑对特定数据项 执行无效操作。例如,通过提交无效的参数值,可能会导致响应中包含有趣信息的 堆栈跟踪或调试。有时,可能会导致错误消息在响应中泄露所需数据的值。
(译者加:综上所述,信息泄露的方法可以总结为 “模糊测试”、“漏洞扫描程序”、“各种辅助工具”、“应用程序产生的错误信息”)
# 1.2信息泄露的常见源头
信息泄露可能发生在网站内的各种环境中。下面是一些常见的示例,你可以在其中查看是否暴露了敏感信息。
# 1.2.1网络爬虫文件
许多网站在/robots.txt
和/sitemap.xml
中提供文件列表,以帮助爬虫浏览他们的网站。除此之外,这些文件通常会列出 爬网程序应该跳过的特定目录,因为这些目录可能包含敏感信息。
由于这些文件 通常不会出现在网站的内部链接当中,因此它们可能不会立即出现在 Burp 的网站地图中。但是,这值得一试,手动导航到/robots.txt
或/sitemap.xml
,然后看看是否找到任何有用的内容。
# 1.2.2目录列表
可以将 Web 服务器配置为 自动列出不存在索引页的目录内容。这可以帮助攻击者快速识别给定路径上的资源,并直接分析和攻击这些资源。目录中原本不打算给用户访问的敏感文件,将会极大增加暴露性,例如 临时/故障转储文件。
目录列表本身不一定是安全漏洞。但是,如果网站未能实施适当的访问控制,则 “以这种方式泄露敏感资源的存在和位置” 显然是一个问题。
# 1.2.3开发者注释
在开发过程中,内联 HTML 注释有时会被添加到标记中。在部署到生产环境之前,这些注释通常会被去除。但是,注释有时会被遗忘、遗漏,甚至故意留下,因为有的人完全没有意识到安全隐患。尽管这些注释在呈现的页面上不可见,但仍可以使用 Burp 甚至浏览器内置的开发人员工具轻松访问它们。
有时,这些注释包含对攻击者有用的信息。例如,它们可能会暗示隐藏目录的存在,或 提供有关应用程序逻辑的线索。
# 1.2.4错误消息
信息泄露的最常见原因之一,详细的错误消息。作为基本规则,你应该密切注意 在审核期间遇到的所有错误消息。
错误消息的内容,可以揭示有关给定参数的信息,例如 所期望的输入或数据类型。这可以帮助你识别可利用的参数,以此来缩小攻击范围,还可以防止你浪费时间。
详细的错误消息,还可以提供有关网站正在使用的技术信息。例如,他们可能会显式地命名网站正在使用的 模板引擎、数据库类型或服务器及其版本号。此类信息非常有用,因为你可以轻松搜索此版本可能存在的任何历史漏洞。同样,你可以检查是否存在任何可能被利用的 “常见配置错误或危险的默认设置”。其中一些例子可能会在官方文档中突出显示。
你可能还会发现,该网站正在使用某种开源框架。在这种情况下,你可以研究公开的源代码,这是构建私有漏洞的宝贵资源。
错误消息之间的差异,还可以揭示 幕后发生的不同应用程序行为。观察错误消息的差异是许多技术(如SQL注入 (opens new window)、用户名枚举 (opens new window)等)的关键方面。
- name: 实验室-学徒
desc: 错误消息中的信息泄露 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-in-error-messages
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 1.2.5Debug数据
出于调试目的,许多网站会生成自定义错误消息和日志,其中包含有关应用程序行为的大量信息。虽然这些信息在开发过程中非常有用,但如果在生产环境中泄露,则对攻击者也非常有用。(对双方都有用,双赢!)
调试消息有时可能包含发起攻击的重要信息,包括:
- 可通过用户输入来操作的 关键会话变量值
- 后端组件的主机名和凭据
- 服务器上的文件/目录名称
- 客户端传输过程中,用于加密数据的密钥
调试信息有时会记录在单独的文件中。如果攻击者能够访问此文件,则可以将其作为 了解应用程序运行时状态的有用参考。它有时还会提供一些说明文档,记录它们如何提供不同的输入,并用于操作应用程序状态 和 控制接收到的信息。
- name: 实验室-学徒
desc: Debug页面信息泄露 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-on-debug-page
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 1.2.6用户的账户页面
就其本质而言,用户的个人资料或帐户页面 通常包含有敏感信息,例如用户的电子邮件地址、电话号码、API 密钥等。由于用户通常只能访问自己的帐户页面,因此这本身并不代表漏洞。但是,某些网站包含逻辑缺陷,可能允许攻击者利用这些页面查看其他用户的数据。(越权)
例如,假设有一个网站,该网站根据user
参数来确定要加载哪个用户的帐户页面。
GET /user/personal-info?user=carlos
大多数网站都会采取措施,以防止攻击者简单地更改此参数,从而访问任意用户的帐户页面。但有时候,对于加载单个数据项的逻辑并不那么可靠。
攻击者可能无法完全加载另一个用户的帐户页面,但用于获取和呈现用户注册电子邮件地址的逻辑,可能无法检查user
参数是否与当前登录的用户匹配。在这种情况下,只需更改user
参数,攻击者就可以在自己的帐户页面上,显示任意用户的电子邮件地址。
(译者加:攻击者想获取某个用户的电子邮件地址,他不需要加载某个用户的整个账户页面,只需要加载 邮件信息栏 这一小块内容即可)
在后续介绍访问控制 (opens new window)和IDOR (opens new window)漏洞时,我们将更详细地研究这类漏洞。
# 1.2.7通过备份文件泄露源代码
获得源代码访问权限,将使攻击者更容易了解应用程序的行为,并构建高严重性攻击。有时,敏感数据甚至被硬编码在源代码中。这方面的典型示例包括 用于访问后端组件的 API 密钥和凭据。
如果你可以识别出 正在使用的特定开源技术,则可以轻松访问有限数量的源代码。
有时,甚至可能导致网站暴露自己的源代码。在映射网站时,你可能会发现某些源代码文件被显式引用,幸运的是,请求这些文件通常不会泄露代码本身。因为当服务器处理具有特定扩展名(如.php
)的文件时,它通常会执行代码,而不是简单地将其作为文本发送给客户端。
但是,在某些情况下,你可以诱骗网站返回文件的原始内容。例如,文本编辑器通常会在编辑原始文件时,生成临时备份文件。这些临时文件通常以某种方式表示,例如在文件名后附加波浪号(~
)或添加不同的文件扩展名。有时,使用备份文件扩展名请求代码文件,将允许你读取响应中的文件内容。
- name: 实验室-学徒
desc: 通过备份文件泄露源代码 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-via-backup-files
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
一旦攻击者能够访问源代码,这可能是朝着 “能够识别和利用其他漏洞” 迈出的一大步,否则这些漏洞几乎是不可能的。其中一个例子是不安全的反序列化 (opens new window)。我们将在稍后的专题中介绍此漏洞。
# 1.2.8配置不安全导致的信息泄露
由于配置不当,网站有时容易受到攻击。由于第三方技术的广泛使用,这种情况尤其常见,而对于实施它们的人来说,他们不一定了解这些技术的大量配置选项。
在其他情况下,开发人员可能会忘记 在生产环境中禁用各种 Debug 选项。例如,HTTP TRACE
方法专为诊断目的而设计。如果启用,Web 服务器将响应来自TRACE
方法的请求,并在响应中回显接收到的确切请求信息。这种行为通常是无害的,但偶尔会导致信息泄露,例如,反向代理的名称 可能被追加到请求的内部身份验证标头当中。
- name: 实验室-学徒
desc: 通过信息泄露绕过身份验证 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-authentication-bypass
bgColor: '#001350'
textColor: '#39d50c'
2
3
4
5
6
# 1.2.9版本控制历史记录
几乎所有的网站在内,都是使用某种形式的版本控制系统开发的,例如 Git。默认情况下,Git 项目将其所有版本控制数据存储在名为.git
的文件夹中。有时,网站会在生产环境中暴露此目录,在这种情况下,你可以通过浏览/.git
来访问它。
虽然 “手动浏览原始文件结构和内容” 通常是不切实际的,但有多种方法可以下载整个.git
目录。然后,你可以使用本地安装的 Git 打开它,以访问网站的版本控制历史记录。这可能包含 已提交的更改 和 其他有趣信息的日志。
这可能无法让你访问完整的源代码,但通过比较差异,将允许你阅读部分代码。与任何源代码一样,你可能会在某些更改的行中,发现硬编码的敏感数据。
- name: 实验室-从业者
desc: 版本控制历史中的信息泄露 >>
avatar: https://fastly.statically.io/gh/clincat/blog-imgs@main/vuepress/static/imgs/docs/burpsuite-learn/public/lab-logo.png
link: https://portswigger.net/web-security/information-disclosure/exploiting/lab-infoleak-in-version-control-history
bgColor: '#001350'
textColor: '#4cc1ff'
2
3
4
5
6