Portswigger Labs — Portswigger Labs — Api-testing-testing
字数 1088 2025-08-18 11:36:53
PortSwigger API 测试实验室攻击技术详解
1. API 端点直接操作
1.1 用户删除攻击
- 目标端点:
/api-testing - 方法: DELETE
- 参数:
user=carlos - 攻击方式: 直接在URL后拼接端点并发送DELETE请求
- 结果: 成功删除指定用户
2. 服务器参数污染攻击
2.1 密码重置功能利用
-
功能点分析:
- 仅提供忘记密码功能
- 当
username=administrator时不报错 - 其他用户名提示"用户名不存在"
-
参数污染测试:
- 初始尝试:
username=administrator&x=y
- 结果: 提示不支持该参数(可能服务器拦截)
- 使用URL编码字符:
- 尝试
#(%23编码) - 结果: 提示未指定field参数
- 添加field参数爆破:
- 发现
email参数合法(响应200) - 成功获取相关数据
- 初始尝试:
2.2 密码重置令牌获取
-
发现过程:
- 分析历史HTTP报文发现JS文件
- JS中揭示密码重置URL格式:
/forgot-password?reset_token=${token}
-
攻击步骤:
- 查询获取resetToken
- 将token拼接到重置URL
- 成功重置目标用户密码
3. 未使用的API端点利用
3.1 商品价格修改
-
正常端点:
/api-testing/products/1/price- 方法: GET
- 响应: 返回商品价格
-
攻击过程:
- 发送OPTIONS请求发现支持PATCH方法
- 改为PATCH请求
- 添加头部:
Content-Type: application/json - 在body中添加:
{"price": 0} - 结果: 成功将商品价格修改为0
4. 批量赋值漏洞利用
4.1 订单折扣篡改
-
正常请求分析:
- 提交订单时发送特定请求包
-
攻击方式:
- 修改请求body
- 添加参数:
chosen_discount(值自定义) - 结果: 成功以篡改后的折扣价格购买商品
关键安全启示
-
API端点安全性:
- 不应暴露未文档化的API端点
- 所有端点应进行严格的权限验证
-
HTTP方法控制:
- 严格限制各端点允许的HTTP方法
- 禁用不必要的OPTIONS方法信息泄露
-
参数处理:
- 实施严格的参数白名单机制
- 防范参数污染攻击
-
业务逻辑安全:
- 关键操作(如密码重置)需要多重验证
- 价格等敏感字段修改需严格权限控制
-
客户端安全:
- 避免在客户端代码中暴露敏感信息(如API端点、令牌格式)
这些攻击技术展示了API安全中的常见漏洞,开发人员应针对每类问题实施相应的防护措施。