菜单

API发现

相关源文件

API 发现是指在 Web 应用程序中识别和映射 API 端点以进行安全测试的过程。本文档介绍了 SecLists 中用于帮助安全专业人员通过系统枚举发现和测试 API 端点的 API 字典。有关通用 Web 内容发现的信息,请参阅Web 内容发现

API 字典结构

API 发现组件包含按两个主要类别组织的专业字典

来源:Discovery/Web-Content/api/actions-lowercase.txt Discovery/Web-Content/api/actions-uppercase.txt Discovery/Web-Content/api/actions.txt Discovery/Web-Content/api/objects-lowercase.txt Discovery/Web-Content/api/objects-uppercase.txt Discovery/Web-Content/api/objects.txt

操作(动词)

这些列表包含通过 API 执行的常见操作

文件描述示例
actions-lowercase.txt113 个小写动作动词get、create、update、delete
actions-uppercase.txt113 个大写动作动词GET、CREATE、UPDATE、DELETE
actions.txt包含大小写字母的组合列表get、GET、create、CREATE

动作动词表示的功能,例如

  • 标准 CRUD 操作:createreadupdatedelete
  • HTTP 方法名称:getpostput
  • 常见 API 操作:registeruploaddownload

来源:Discovery/Web-Content/api/actions-lowercase.txt Discovery/Web-Content/api/actions-uppercase.txt Discovery/Web-Content/api/actions.txt

对象(资源)

这些列表包含常见的 API 资源名称

文件描述示例
objects-lowercase.txt98 个常用小写资源user、account、token、profile
objects-uppercase.txt96 个常用大写资源USER、ACCOUNT、TOKEN、PROFILE
objects.txt2000+ 潜在资源名称user、admin、config、settings

对象名称表示的资源,例如

  • 实体类型:useraccountcustomer
  • 数据结构:tokenpasswordcredentials
  • 系统组件:settingsconfigstatus

来源:Discovery/Web-Content/api/objects-lowercase.txt Discovery/Web-Content/api/objects-uppercase.txt Discovery/Web-Content/api/objects.txt

API 端点形成模式

API 字典旨在组合以形成端点候选。以下是操作和对象通常如何组合形成 API 端点的方式

来源:Discovery/Web-Content/api/actions-lowercase.txt Discovery/Web-Content/api/objects-lowercase.txt

常见的 API 端点模式

模式示例描述
/action/object/get/user操作后跟对象
/object/action/user/create对象后跟操作
/actionObject/getUser驼峰式组合
/api/v1/object/api/v1/users带版本的 RESTful 模式
/object/{id}/action/user/123/update对特定资源的操作
/api/action/api/authenticate仅操作

API 发现工作流程

下图说明了使用这些字典进行 API 端点发现的过程

来源:Discovery/Web-Content/api/actions-lowercase.txt Discovery/Web-Content/api/objects-lowercase.txt Discovery/Web-Content/api/actions-uppercase.txt Discovery/Web-Content/api/objects-uppercase.txt

与测试工具集成

API 发现字典与常见的安全测试工具集成

命令行工具

使用 ffuf 进行 API 端点发现

ffuf -w actions-lowercase.txt:ACTION -w objects-lowercase.txt:OBJECT -u https://api.example.com/ACTION/OBJECT -mc 200,201,204,401,403

在循环中使用 curl

while read action; do
  while read object; do
    curl -s -o /dev/null -w "%{http_code} https://api.example.com/$action/$object\n" https://api.example.com/$action/$object
  done < objects-lowercase.txt
done < actions-lowercase.txt

Web 代理工具

Burp Suite Intruder

  1. 设置操作和对象的位置:https://api.example.com/§action§/§object§
  2. actions-lowercase.txt 作为第一个位置的有效载荷加载
  3. objects-lowercase.txt 作为第二个位置的有效载荷加载
  4. 配置集束炸弹攻击类型
  5. 过滤结果以识别有效端点

案例研究:API 发现示例

此示例演示了如何使用 API 字典在典型应用程序中发现端点

  1. 端点的初步发现:/api/getUser
  2. 识别模式:get(操作)+ User(对象),驼峰式命名格式
  3. 使用变体进行测试
    • 使用操作列表:/api/createUser/api/updateUser/api/deleteUser
    • 使用对象列表:/api/getAccount/api/getProfile/api/getSettings
  4. 发现 API 版本模式:/api/v1/user
  5. 扩展到 RESTful 模式测试
    • /api/v1/users(集合)
    • /api/v1/users/123(特定资源)
    • /api/v1/users/123/profile(嵌套资源)

API 发现列表来源

SecLists 中的 API 字典由 Chris Lockard (@chrislockard) 贡献,源自 api_wordlist 项目。这些列表作为 SecLists 仓库的一部分进行维护,并定期更新现代 Web 应用程序中发现的新 API 命名模式。

来源:CONTRIBUTORS.md32

与其他 SecLists 组件的连接

API 发现列表与其他 SecLists 组件协同工作

来源:Discovery/Web-Content/api/ Fuzzing/fuzz-Bo0oM.txt Fuzzing/extensions-Bo0oM.txt

API 发现的最佳实践

  1. 结合多种模式:测试操作和对象的不同组合
  2. 考虑大小写敏感性:尝试小写和大写变体
  3. 测试 API 版本:常见模式包括 /v1//v2/
  4. 寻找模式:当你找到一个端点时,测试相关模式
  5. 检查认证:有些端点可能需要认证,而有些则不需要
  6. 监控响应码:403 Forbidden 通常表示一个需要认证的有效端点
  7. 检查响应正文:即使是错误响应也可能揭示 API 信息
  8. 记录发现:保留发现端点的结构化清单

结论

SecLists 中的 API 发现列表提供了一种在安全测试期间识别 API 端点的系统方法。通过根据常见模式组合操作和对象,安全专业人员可以发现已文档化和未文档化的 API 端点,这为彻底的 API 安全测试奠定了基础。