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时不报错
    • 其他用户名提示"用户名不存在"
  • 参数污染测试:

    1. 初始尝试: username=administrator&x=y
    • 结果: 提示不支持该参数(可能服务器拦截)
    1. 使用URL编码字符:
    • 尝试#(%23编码)
    • 结果: 提示未指定field参数
    1. 添加field参数爆破:
    • 发现email参数合法(响应200)
    • 成功获取相关数据

2.2 密码重置令牌获取

  • 发现过程:

    • 分析历史HTTP报文发现JS文件
    • JS中揭示密码重置URL格式: /forgot-password?reset_token=${token}
  • 攻击步骤:

    1. 查询获取resetToken
    2. 将token拼接到重置URL
    3. 成功重置目标用户密码

3. 未使用的API端点利用

3.1 商品价格修改

  • 正常端点: /api-testing/products/1/price

    • 方法: GET
    • 响应: 返回商品价格
  • 攻击过程:

    1. 发送OPTIONS请求发现支持PATCH方法
    2. 改为PATCH请求
    3. 添加头部: Content-Type: application/json
    4. 在body中添加: {"price": 0}
    5. 结果: 成功将商品价格修改为0

4. 批量赋值漏洞利用

4.1 订单折扣篡改

  • 正常请求分析:

    • 提交订单时发送特定请求包
  • 攻击方式:

    1. 修改请求body
    2. 添加参数: chosen_discount(值自定义)
    3. 结果: 成功以篡改后的折扣价格购买商品

关键安全启示

  1. API端点安全性:

    • 不应暴露未文档化的API端点
    • 所有端点应进行严格的权限验证
  2. HTTP方法控制:

    • 严格限制各端点允许的HTTP方法
    • 禁用不必要的OPTIONS方法信息泄露
  3. 参数处理:

    • 实施严格的参数白名单机制
    • 防范参数污染攻击
  4. 业务逻辑安全:

    • 关键操作(如密码重置)需要多重验证
    • 价格等敏感字段修改需严格权限控制
  5. 客户端安全:

    • 避免在客户端代码中暴露敏感信息(如API端点、令牌格式)

这些攻击技术展示了API安全中的常见漏洞,开发人员应针对每类问题实施相应的防护措施。

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安全中的常见漏洞,开发人员应针对每类问题实施相应的防护措施。