了解最新技术文章
Burp Scanner可以扫描基于 JSON 或 YAML 的 API 定义以查找漏洞。这使您能够发现应用程序中更大的潜在攻击面。
API 扫描的工作方式与网页扫描类似,但 Burp Scanner 不是对 Web 内容进行爬网,而是对公开的 API 端点进行爬网。然后,Burp Scanner 使用扫描网页时使用的相同配置和技术来审核这些端点。
默认情况下,Burp Scanner 会尝试扫描在常规爬网活动中遇到的任何 API 定义。您还可以在启动扫描时显式提供 API 定义的 URL。
Burp Scanner 需要能够解析 API 定义才能扫描它。
Burp Scanner 只能解析满足以下要求的定义:
API 定义的规范必须是 OpenAPI 版本 3.xx,并且基于 JSON 或 YAML。
API 定义不得包含任何外部引用。
抓取 API 定义时,Burp Scanner 会发送一系列请求来识别潜在端点及其支持的方法和参数。然后,Burp Scanner 可以根据它发现的端点派生新的位置进行爬网和审核。
根据 API 的设计,每个端点可能有大量潜在参数。例如,String
没有约束的开放参数将具有几乎无限数量的潜在有效输入。
在这些情况下,爬网程序不可能尝试所有参数组合。然而,爬虫仍然需要尝试合理数量的可能参数组合,以确保暴露所有可能的攻击面。
因此,Burp Scanner 按照以下规则发送请求:
Burp Scanner 将API 定义中 范围内服务器和路径方法(例如GET
和)的每个组合视为其自己的端点。POST
例如,如果定义具有三个服务器,每个服务器都有GET
和POST
方法,则 Burp Scanner 将识别六个端点。
如果端点具有可选参数,Burp Scanner 会向该端点发送至少两个请求:一个仅包含强制参数,另一个包含强制参数和可选参数。
如果端点使用枚举类型,Burp Scanner 会针对每个参数的允许值发送单独的请求。
如果端点使用数值,Burp Scanner 将使用指定的最大值和最小值。
如果 API 定义提供了示例参数集,Burp Scanner 将在其请求中使用最终提供的示例。
Burp Scanner 只能扫描满足特定条件的 API 端点。任何不符合这些标准的端点都会被排除在扫描之外:
Burp Scanner 无法处理在端点级别实现的任何身份验证。但是,它在扫描 API 时可以使用 Burp 的正常身份验证处理功能。
仅当服务器和路径参数属于枚举类型或定义中提供了示例值时,才支持它们。
Burp Scanner 不支持要求请求中存在以下任何内容的端点:
附加 HTTP 标头。
类型为 的查询或主体参数array
。支持此类型的 JSON 正文参数。
类型为 的查询或主体参数XML
。
具有嵌入混合类型的查询或主体参数。例如,主体JSON
中的参数application/x-www-form-urlencoded
。
查询参数类型JSON
。支持这种类型的主体参数。
主体参数类型multipart
。
Burp Scanner 可以完全抓取和审核GraphQL API 端点。GraphQL 爬行依赖于内省。这是一个内置的 GraphQL 功能,使用户能够查询 API 本身的结构。
如果启用了 GraphQL 扫描,Burp Scanner 在爬取时会使用以下过程:
作为常规爬网的一部分检查 GraphQL 端点。由于 GraphQL API 对所有操作使用相同的端点,因此爬网程序不需要像使用 REST API 那样找到多个端点来运行完整爬网。
如果初始爬网未找到 GraphQL 端点并且选择了测试常见 GraphQL 端点设置,爬网程序将尝试使用常见端点后缀列表来猜测 GraphQL 端点。
一旦找到 GraphQL 端点,Burp Scanner 就会发送一个内省查询,请求所有可用查询和突变的详细信息。
如果内省查询成功,Burp Scanner 会将请求发送到所有可用的查询和突变。它使用决定在爬网中发送哪些参数部分中解释的规则来识别每个请求中要发送的参数。如果需要,它会发送同一查询的多个排列。
爬网完成后,Burp Scanner 会审核发现的查询并显示发现的问题,就像处理任何其他目标一样。