实战分享 | 从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端点进行未授权操作。
实验步骤
-
正常登录流程:
- 使用提供的凭证(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错误
- 发送GET请求到
-
深入测试:
- 发现需要修改Content-Type为
application/json - 分析请求路径,发现与夹克价格相关
- 构造JSON数据将价格修改为0:
{ "price": 0 } - 刷新界面后直接以0元购买目标商品
- 发现需要修改Content-Type为
技术要点
- HTTP方法枚举(PATCH/OPTIONS等)可发现隐藏功能
- Content-Type修改是绕过API限制的常见技术
- 直接操作API可能绕过前端验证逻辑
Lab3: 利用批量分配漏洞
实验目标
通过批量分配漏洞提升用户权限。
实验步骤
-
分析正常用户对象:
- 查看普通用户返回的JSON数据结构
- 识别可能的权限字段(如"isAdmin")
-
构造恶意请求:
- 在更新用户信息时添加
"isAdmin": true - 发送修改后的请求:
{ "email": "attacker@example.com", "isAdmin": true }
- 在更新用户信息时添加
-
验证权限提升:
- 重新登录验证管理员权限
- 访问管理员功能确认漏洞利用成功
技术要点
- 批量分配漏洞源于API接受过多客户端控制参数
- 关键在识别服务器接受但前端不显示的字段
- 权限字段通常有固定命名模式(isAdmin, role等)
Lab4: 测试查询字符串中的服务器端参数污染
实验目标
通过查询字符串参数污染绕过API限制。
实验步骤
-
识别过滤参数:
- 发现API使用参数如
category进行过滤 - 正常请求:
/api/products?category=electronics
- 发现API使用参数如
-
参数污染测试:
- 尝试重复参数:
/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安全的核心原则是最小权限、输入验证和深度防御。