API测试笔记
# API测试笔记
# 1API测试基本知识
# 1、什么是API?
答案
API(应用程序编程接口)使软件系统和应用程序能够通信和共享数据。所有的动态网站都是由 API 组成的,所以像 SQL 注入这样的经典 Web 漏洞可以归类为 API 测试。
API 中的漏洞可能会破坏网站机密性、完整性和可用性的核心方面。应该测试网站前端未完全使用的 API,重点是 RESTful 和 JSON API,以及可能影响内部 API 的服务端参数污染漏洞。
# 2、API侦察-步骤
答案
- 确定 API 端点,例如
GET /api/books
- 需要确定如何与这类 API 端点进行交互,构造有效的 HTTP 请求来测试 API:
- 该 API 所处理的输入数据,包括强制参数和可选参数。
- API 接受的请求类型,包括支持的 HTTP 方法和媒体格式。
- 速率限制和身份验证机制。
# 3、API侦察-文档
答案
API 通常会被记录下来,以便开发人员知道如何使用和集成它们。文档可以是人类可读和机器可读的形式。
- 人类可读的文档旨在让开发人员了解如何使用 API。它可能包括详细的解释,示例和使用场景。
- 机器可读的文档被设计为由软件处理,以自动执行 API 集成和验证等任务。它是以 JSON 或 XML 等结构化格式编写的。你还可以使用 BurpSuite 扩展 OpenAPI Parser (opens new window) 来自动解析 OpenAPI 文档。
API 文档通常是公开可用的,特别是如果这个 API 是为了提供给外部开发人员使用。如果是这种情况,请始终通过查看文档开始你的侦察。
# 4、发现API文档
答案
- (潜在路径搜寻)即使 API 文档不是公开的,你仍然可以通过浏览使用 API 的应用程序来访问它。尝试查找可能映射 API 文档的端点,例如:
/api
、/swagger/index.html
、/openapi.json
- (基本端点调查)如果你已经识别了一个端点
/api/swagger/v1/users/123
,则可以调查以下路径:/api/swagger/v1
、/api/swagger
、/api
- (路径暴破)一般的目录扫描 及 爬虫流程等。
- (从 JS 文件中提取 API 端点)JavaScript 文件中可能包含对 API 端点的引用,可以通过 BurpSuite 扩展 JS Link Finder (opens new window) 进行链接提取。
# 5、尝试更改API请求的内容类型
答案
API 端点通常需要特定格式的数据。因此,根据请求中提供的数据的内容类型,它们的行为可能会有所不同。更改内容类型可以使你:
- 触发错误,泄露有效信息。
- 绕过有缺陷的防御。
- 利用处理逻辑的差异。例如,API 在处理 JSON 数据时可能是安全的,但在处理 XML 时容易受到注入攻击。
要更改内容类型,请修改Content-Type
标头,然后相应地重新格式化请求主体。你可以使用 BApp 中的 Content Type Converter (opens new window) 扩展,自动将请求中提交的数据在 XML 和 JSON 之间转换。
# 2API测试
# 1、漏洞汇总
# 3批量赋值漏洞
# 1、什么是批量赋值漏洞?
答案
批量赋值(也称为自动绑定)可能会无意中创建隐藏参数。当软件框架自动将请求参数 绑定到 内部对象上的字段时,就会发生这种情况。因此,批量赋值可能会导致应用程序支持某些隐藏参数,即使开发人员从未打算处理这些参数。
# 2、如何自动识别隐藏参数?
答案
- 使用 Intruder 暴破参数名称
- 使用 BApp Param Miner (opens new window) 扩展,该扩展本是用于 Web 缓存投毒攻击中的非缓存键参数搜索
- 使用 BurpSuite 的内容发现 (opens new window)工具(右键数据包然后选择 “Engagement tools --> Discover content”)
# 3、手动识别隐藏参数
# 4服务端参数污染
# 1、什么是服务端参数污染?
# 2、服务端参数污染的别名?
答案
这种漏洞有时被称为 HTTP 参数污染。
除此之外,此术语也代指 Web 应用程序防火墙(WAF)绕过技术。
# 3、通过服务端参数污染漏洞来覆盖现有参数时,不同语言中的行为?
答案
例如传递/users/search?name=peter%26name=carlos
,则:
- PHP 只解析最后一个参数。这将导致用户搜索
carlos
。 - ASP.NET 结合了这两个参数。这将导致用户搜索
peter,carlos
,这可能会导致错误消息 “用户名无效”。 - Node.js 中的 express 框架仅解析第一个参数。这将导致用户搜索
peter
,给出不变的结果。
# 4、不同API结构中的参数污染?
# 5防范API中的漏洞
# 1、在设计API时,从一开始就考虑安全性
答案
- 如果你不希望公开访问 API,请保护你的文档。
- 确保你的文档保持最新状态,以便合法测试人员能够全面了解 API 的攻击面。
- 应用合法的 HTTP 方法白名单列表。
- 验证每个请求或响应的 内容类型 是否在预期之内。
- 设计通用错误消息,避免泄露可能对攻击者有用的信息。
- 对 API 的所有版本(而不仅仅是当前生产版本)使用保护措施。
# 2、防范批量赋值漏洞
答案
将用户可更新的属性列入白名单列表,并将用户不应更新的敏感属性列入黑名单。
# 3、防范服务端参数污染漏洞
答案
为了抵御服务器端参数污染,请:
- 使用白名单列表定义不需要编码的字符。
- 在将所有其他用户输入包含在服务端请求中之前,确保对这些输入进行编码(白名单中的字符除外)。
- 你还应该确保所有输入都符合预期的格式和结构。
编辑 (opens new window)