实战分享 | 从Portswigger API Testing中入门 API 安全
字数 2536 2025-08-18 11:36:57

API安全实战:从PortSwigger API Testing入门

前言

API(应用程序编程接口)是现代软件系统和应用程序之间通信和共享数据的核心组件。API安全测试至关重要,因为API中的漏洞可能会破坏网站的机密性、完整性和可用性。本文将基于PortSwigger的API测试实验,详细介绍API安全测试的关键技术和方法。

实验环境

  • 实验平台: https://portswigger.net/web-security/api-testing/
  • 测试账号: wiener/peter
  • 实验目标: 学习并掌握API安全测试的核心技术

Lab1: 使用文档利用API端点

实验目标

通过API文档发现并利用API端点进行未授权操作。

实验步骤

  1. 正常登录流程:

    • 使用提供的凭证(wiener/peter)正常登录系统
    • 在更新邮箱功能处拦截请求
  2. API端点探测:

    • 尝试修改请求路径为/api/user → 返回错误
    • 尝试/api/ → 返回错误
    • 尝试/api → 302跳转
  3. 发现交互式API文档:

    • 通过上述探测发现系统提供交互式API文档
    • 在文档中查找可利用的API端点

技术要点

  • API端点枚举是API测试的第一步
  • 交互式API文档常包含未保护的关键信息
  • 302跳转可能指向API文档入口

Lab2: 查找并利用未使用的API端点

实验目标

发现隐藏的API端点并利用其购买"轻量级l33t皮夹克"。

实验步骤

  1. 基础探测:

    • 发送GET请求到/api/ → 404错误
    • 修改为OPTIONS方法请求 → 无有效响应
    • 修改为PATCH方法 → 400错误
  2. 深入测试:

    • 发现需要修改Content-Type为application/json
    • 分析请求路径,发现与夹克价格相关
    • 构造JSON数据将价格修改为0:
      {
        "price": 0
      }
      
    • 刷新界面后直接以0元购买目标商品

技术要点

  • HTTP方法枚举(PATCH/OPTIONS等)可发现隐藏功能
  • Content-Type修改是绕过API限制的常见技术
  • 直接操作API可能绕过前端验证逻辑

Lab3: 利用批量分配漏洞

实验目标

通过批量分配漏洞提升用户权限。

实验步骤

  1. 分析正常用户对象:

    • 查看普通用户返回的JSON数据结构
    • 识别可能的权限字段(如"isAdmin")
  2. 构造恶意请求:

    • 在更新用户信息时添加"isAdmin": true
    • 发送修改后的请求:
      {
        "email": "attacker@example.com",
        "isAdmin": true
      }
      
  3. 验证权限提升:

    • 重新登录验证管理员权限
    • 访问管理员功能确认漏洞利用成功

技术要点

  • 批量分配漏洞源于API接受过多客户端控制参数
  • 关键在识别服务器接受但前端不显示的字段
  • 权限字段通常有固定命名模式(isAdmin, role等)

Lab4: 测试查询字符串中的服务器端参数污染

实验目标

通过查询字符串参数污染绕过API限制。

实验步骤

  1. 识别过滤参数:

    • 发现API使用参数如category进行过滤
    • 正常请求: /api/products?category=electronics
  2. 参数污染测试:

    • 尝试重复参数: /api/products?category=electronics&category=accessories
    • 尝试数组形式: /api/products?category[]=electronics&category[]=accessories
    • 尝试不同分隔符: /api/products?category=electronics,accessories
  3. 绕过限制:

    • 发现服务器处理最后一个参数
    • 构造请求获取受限数据

技术要点

  • 参数解析差异导致的安全问题
  • 不同服务器对重复参数处理方式不同
  • 数组形式参数可能绕过某些过滤逻辑

Lab5: 测试REST路径中的服务器端参数污染

实验目标

通过REST路径参数污染访问受限资源。

实验步骤

  1. 分析正常API结构:

    • 正常用户信息路径: /api/users/wiener
  2. 路径遍历测试:

    • 尝试路径遍历: /api/users/../admin
    • 尝试编码字符: /api/users/%2e%2f%2e%2fadmin
    • 尝试多重路径: /api/users/wiener/../../admin
  3. 绕过访问控制:

    • 发现特定路径构造可访问管理员接口
    • 获取敏感信息或执行特权操作

技术要点

  • REST路径解析差异可导致授权绕过
  • 编码和多重路径是常见测试技术
  • 服务器规范化处理可能引入漏洞

API安全测试方法论

1. 信息收集阶段

  • 查找API文档(Swagger/OpenAPI等)
  • 分析JavaScript文件中的API端点
  • 使用OPTIONS方法发现可用端点

2. 端点测试技术

  • HTTP方法覆盖测试(GET/POST/PUT/DELETE等)
  • 参数模糊测试
  • 注入测试(SQLi/XSS/命令注入等)
  • 业务逻辑测试

3. 认证授权测试

  • Token安全性分析
  • JWT测试
  • OAuth流程测试
  • 权限提升测试

4. 数据验证测试

  • 输入验证绕过
  • 批量分配测试
  • 数据过滤测试

常见API漏洞类型

  1. 失效的对象级授权(BOLA)

    • 通过修改ID访问他人资源
    • 防护: 每次访问检查权限
  2. 失效的用户认证

    • Token安全问题
    • 防护: 安全Token处理
  3. 过度的数据暴露

    • 返回过多信息
    • 防护: 严格过滤响应
  4. 资源缺乏限制

    • 无速率限制
    • 防护: 实施API限流
  5. 失效的功能级授权

    • 未验证调用者权限
    • 防护: 统一授权机制

防御建议

  1. 实施严格的输入验证

    • 定义明确的API schema
    • 拒绝未知属性
  2. 完善的访问控制

    • 基于角色的访问控制
    • 记录所有访问尝试
  3. 安全的认证机制

    • 使用标准认证协议
    • Token安全措施
  4. 全面的日志记录

    • 记录所有API调用
    • 监控异常行为
  5. 定期安全测试

    • 自动化API扫描
    • 手动渗透测试

总结

API安全是现代Web应用安全的重要组成部分。通过PortSwigger的API测试实验,我们学习了API端点发现、未使用端点利用、批量分配漏洞、参数污染等关键技术。在实际安全测试中,需要结合自动化工具和手动测试,全面评估API安全性。记住,API安全的核心原则是最小权限、输入验证和深度防御。

API安全实战:从PortSwigger API Testing入门 前言 API(应用程序编程接口)是现代软件系统和应用程序之间通信和共享数据的核心组件。API安全测试至关重要,因为API中的漏洞可能会破坏网站的机密性、完整性和可用性。本文将基于PortSwigger的API测试实验,详细介绍API安全测试的关键技术和方法。 实验环境 实验平台 : https://portswigger.net/web-security/api-testing/ 测试账号 : wiener/peter 实验目标 : 学习并掌握API安全测试的核心技术 Lab1: 使用文档利用API端点 实验目标 通过API文档发现并利用API端点进行未授权操作。 实验步骤 正常登录流程 : 使用提供的凭证(wiener/peter)正常登录系统 在更新邮箱功能处拦截请求 API端点探测 : 尝试修改请求路径为 /api/user → 返回错误 尝试 /api/ → 返回错误 尝试 /api → 302跳转 发现交互式API文档 : 通过上述探测发现系统提供交互式API文档 在文档中查找可利用的API端点 技术要点 API端点枚举是API测试的第一步 交互式API文档常包含未保护的关键信息 302跳转可能指向API文档入口 Lab2: 查找并利用未使用的API端点 实验目标 发现隐藏的API端点并利用其购买"轻量级l33t皮夹克"。 实验步骤 基础探测 : 发送GET请求到 /api/ → 404错误 修改为OPTIONS方法请求 → 无有效响应 修改为PATCH方法 → 400错误 深入测试 : 发现需要修改Content-Type为 application/json 分析请求路径,发现与夹克价格相关 构造JSON数据将价格修改为0: 刷新界面后直接以0元购买目标商品 技术要点 HTTP方法枚举(PATCH/OPTIONS等)可发现隐藏功能 Content-Type修改是绕过API限制的常见技术 直接操作API可能绕过前端验证逻辑 Lab3: 利用批量分配漏洞 实验目标 通过批量分配漏洞提升用户权限。 实验步骤 分析正常用户对象 : 查看普通用户返回的JSON数据结构 识别可能的权限字段(如"isAdmin") 构造恶意请求 : 在更新用户信息时添加 "isAdmin": true 发送修改后的请求: 验证权限提升 : 重新登录验证管理员权限 访问管理员功能确认漏洞利用成功 技术要点 批量分配漏洞源于API接受过多客户端控制参数 关键在识别服务器接受但前端不显示的字段 权限字段通常有固定命名模式(isAdmin, role等) Lab4: 测试查询字符串中的服务器端参数污染 实验目标 通过查询字符串参数污染绕过API限制。 实验步骤 识别过滤参数 : 发现API使用参数如 category 进行过滤 正常请求: /api/products?category=electronics 参数污染测试 : 尝试重复参数: /api/products?category=electronics&category=accessories 尝试数组形式: /api/products?category[]=electronics&category[]=accessories 尝试不同分隔符: /api/products?category=electronics,accessories 绕过限制 : 发现服务器处理最后一个参数 构造请求获取受限数据 技术要点 参数解析差异导致的安全问题 不同服务器对重复参数处理方式不同 数组形式参数可能绕过某些过滤逻辑 Lab5: 测试REST路径中的服务器端参数污染 实验目标 通过REST路径参数污染访问受限资源。 实验步骤 分析正常API结构 : 正常用户信息路径: /api/users/wiener 路径遍历测试 : 尝试路径遍历: /api/users/../admin 尝试编码字符: /api/users/%2e%2f%2e%2fadmin 尝试多重路径: /api/users/wiener/../../admin 绕过访问控制 : 发现特定路径构造可访问管理员接口 获取敏感信息或执行特权操作 技术要点 REST路径解析差异可导致授权绕过 编码和多重路径是常见测试技术 服务器规范化处理可能引入漏洞 API安全测试方法论 1. 信息收集阶段 查找API文档(Swagger/OpenAPI等) 分析JavaScript文件中的API端点 使用OPTIONS方法发现可用端点 2. 端点测试技术 HTTP方法覆盖测试(GET/POST/PUT/DELETE等) 参数模糊测试 注入测试(SQLi/XSS/命令注入等) 业务逻辑测试 3. 认证授权测试 Token安全性分析 JWT测试 OAuth流程测试 权限提升测试 4. 数据验证测试 输入验证绕过 批量分配测试 数据过滤测试 常见API漏洞类型 失效的对象级授权(BOLA) 通过修改ID访问他人资源 防护: 每次访问检查权限 失效的用户认证 Token安全问题 防护: 安全Token处理 过度的数据暴露 返回过多信息 防护: 严格过滤响应 资源缺乏限制 无速率限制 防护: 实施API限流 失效的功能级授权 未验证调用者权限 防护: 统一授权机制 防御建议 实施严格的输入验证 定义明确的API schema 拒绝未知属性 完善的访问控制 基于角色的访问控制 记录所有访问尝试 安全的认证机制 使用标准认证协议 Token安全措施 全面的日志记录 记录所有API调用 监控异常行为 定期安全测试 自动化API扫描 手动渗透测试 总结 API安全是现代Web应用安全的重要组成部分。通过PortSwigger的API测试实验,我们学习了API端点发现、未使用端点利用、批量分配漏洞、参数污染等关键技术。在实际安全测试中,需要结合自动化工具和手动测试,全面评估API安全性。记住,API安全的核心原则是最小权限、输入验证和深度防御。