Burp Collaborator 是 Burp Suite 用来帮助发现多种漏洞的网络服务。例如:
- 一些基于注入的漏洞可以使用在成功注入时触发与外部系统交互的有效负载来检测。例如,某些SQL 盲注漏洞不能导致应用程序响应的内容或时间发生任何差异,但可以使用在注入 SQL 查询时导致外部交互的有效负载来检测它们。
- 通过向目标应用程序提交针对这些服务的有效负载,并分析与该服务的协作实例进行交互的详细信息,可以检测到某些特定于服务的漏洞。例如,可以通过这种方式检测邮件头注入。
- 当可以诱导应用程序从外部系统检索内容并以某种方式对其进行处理时,就会出现一些漏洞。例如,应用程序可能会检索所提供 URL 的内容并将其包含在其自己的响应中。
当使用 Burp Collaborator 时,Burp 向被审计的应用程序发送负载,这些负载旨在在发生某些漏洞或行为时与 Collaborator 服务器进行交互。Burp 定期轮询 Collaborator 服务器以确定其任何有效负载是否触发了交互:
Burp Collaborator 由Burp Scanner和手动 Burp Collaborator 客户端使用,也可以由Burp Extender API 使用。
Burp Collaborator 的工作原理
Burp Collaborator 作为单个服务器运行,提供各种网络服务的自定义实现:
- 它使用自己的专用域名,并将服务器注册为该域的权威 DNS 服务器。
- 它提供了一项 DNS 服务,可以使用自己的 IP 地址回答对其注册域(或子域)的任何查询。
- 它提供 HTTP/HTTPS 服务,并为其域名使用有效的、CA 签名的通配符 TLS 证书。
- 它提供 SMTP/SMTPS 服务。
下面是一些可以通过 Burp Collaborator 检测到的问题示例。
检测外部服务交互
一个典型的外部服务交互问题可以检测如下:
- Burp 向包含使用协作者域的随机子域的 URL 的应用程序发送负载,例如:
param=http://f294gchg2la...r9gf.burpcollaborator.net/
- 由于其编程行为(有意或无意),应用程序获取 URL 的内容。为此,它将首先在随机子域上执行 DNS 查找,然后执行 HTTP 请求。
- DNS 查找和 HTTP 请求由 Collaborator 服务器接收。两种交互都包含 Burp 放入协作者子域的随机数据。
- Burp 轮询 Collaborator 服务器并询问:“你收到我的有效载荷的任何交互了吗?”,Collaborator 返回交互细节。
- Burp 向 Burp 用户报告外部服务交互,包括 Collaborator 服务器捕获的完整交互消息。
检测带外资源负载
当可以诱导应用程序从任意外部源加载内容并将其包含在其自己的响应中时,就会发生带外资源加载。Burp Suite 可以通过诱导 Collaborator 服务器在其对外部交互的响应中返回特定数据并分析应用程序对相同数据的带内响应来检测此问题:
检测SQL盲注入
Burp 可以提交基于注入的有效载荷,旨在在注入成功时触发外部交互,从而能够检测完全盲注入漏洞。以下示例使用 Oracle 特定的 API 在我们成功注入 SQL 语句时触发交互:
检测盲目的跨站脚本
Collaborator 服务器可以通知 Burp 在向目标提交相关的带内负载后异步发生的延迟交互。这使得检测各种存储漏洞成为可能,例如二阶 SQL 注入和盲 XSS。在下面的示例中,Burp Suite 提交了一个存储的 XSS有效负载,旨在在向用户呈现时触发协作者交互。稍后,管理员用户查看有效负载,他们的浏览器执行交互。稍后,Burp Suite 轮询 Collaborator 服务器,接收交互的详细信息,并报告存储的 XSS漏洞:
协作者数据的安全性
用户可能对 Collaborator 服务器处理的数据的安全性有合理的担忧,并且该功能的设计非常重视这些数据的安全性。
Collaborator 服务器存储哪些数据?
在大多数情况下,当发现漏洞时,协作服务器将不会收到足够的信息来识别漏洞。它没有看到从 Burp 发送到目标应用程序的 HTTP 请求。在典型的情况下,它会记录从某处接收到的交互,包括由 Burp 生成的随机标识符。有时,Collaborator 服务器会收到一些特定于应用程序的数据:例如,通过用户注册表单生成的电子邮件内容。
如何控制对 Collaborator 数据的检索?
Collaborator 功能的设计使得只有生成给定负载的 Burp 实例才能检索由该负载产生的任何交互的详细信息。该要求的实施如下:
- Burp 的每个实例都会生成一个安全的随机秘密。
- Burp 发送到目标应用程序的每个与协作者相关的有效负载都包含一个随机标识符,该标识符源自秘密的单向哈希(加密校验和)。
- 与合作者的任何最终交互都将在传输的数据中包含此标识符(例如,在 DNS 查找的子域中,或 HTTP 请求的主机标头中)。
- 秘密只由 Burp 发送到 Collaborator 服务器,以轮询产生的交互的详细信息。这是使用 HTTPS 完成的,除非在 Burp 的选项中被覆盖。
- 当 Collaborator 服务器收到轮询请求时,它会执行提交的密钥的单向散列,并检索包含从该散列派生的标识符的任何记录交互的详细信息。
- 因此,只有生成秘密的 Burp 实例才能检索由其有效负载触发的任何交互的详细信息。
除此机制外,协作服务器中还实施了以下预防措施,以防止对其数据进行未经授权的访问:
- 交互的详细信息仅存储在临时进程内存中。
- 不会以任何持久形式记录任何类型的数据:例如,数据库或日志文件。
- 交互的细节通常在发生后不久被 Burp 检索,然后被服务器丢弃。
- Burp 未检索到的旧交互的详细信息在固定时间间隔后被丢弃。
- 没有查看交互细节的管理功能,只有已经描述过的检索机制。
- Collaborator 服务器在设计上不会接收任何可用于识别任何个人 Burp 用户的数据(例如帐户名或许可证密钥)。
基于协作者的电子邮件地址
如果您使用的是公共 Collaborator 服务器,我们不建议使用基于 Collaborator 的电子邮件地址注册网站。
如果 Collaborator 服务器从两个客户端收到一条包含标识符的消息,则该消息对两个客户端都可用。这意味着,如果您使用公共 Collaborator 服务器上的电子邮件地址在网站上注册,并且该网站将攻击者控制的数据放入发送给您的电子邮件中,则攻击者可能能够通过他们自己的客户端检索该电子邮件。
请注意,您可以通过使用带有安全轮询接口的私有 Collaborator 服务器来完全防止这种情况发生。
使用 Burp Collaborator 的选项
Burp 用户可以在以下三个选项中选择使用 Burp Collaborator:
- 公共协作服务器——这是一个由 PortSwigger 提供的服务器,在所有使用它的 Burp 用户之间共享。如果公共 Collaborator 服务器出现任何服务中断或降级,那么 Burp 中 Collaborator 相关功能的功效可能会受到影响。因此,PortSwigger 对该服务器的可用性或性能不作任何保证。
- 私有 Collaborator 服务器- 任何拥有Burp Suite Professional许可证的人都可以运行自己的 Collaborator 服务器实例。要完全有效地执行此操作,您将需要一个主机服务器、一个专用域名和一个有效的 CA 签名通配符 TLS 证书。没有合适的域名或 TLS 证书的私有 Collaborator 服务器将能够支持 Burp 中与 Collaborator 相关的部分功能,但不是全部。您可以在网络层保护您的私有 Collaborator 实例:您可以配置不同的网络接口来接收交互和回答轮询请求,并且您可以根据目标和测试人员的位置应用您想要的任何 IP 限制。使用私有 Collaborator 服务器的选项可能会吸引渗透测试公司和内部安全团队。它还可以让个人测试人员在没有 Internet 访问的私有封闭网络上进行测试时部署 Collaborator 实例。有关更多详细信息,请参阅有关部署私有 Collaborator 服务器的文档。
- No Collaborator server - 你可以配置 Burp 不使用任何 Collaborator 服务器。使用此选项,Burp 中所有与 Collaborator 相关的功能都将不可用。