挖洞经验 | 通过购物车参数篡改实现低价免费购买商品
字数 1236 2025-08-18 11:38:56

参数篡改漏洞(Parameter Tampering)实战教学文档

漏洞概述

参数篡改(Parameter Tampering)是一种通过修改Web应用交互中传输的参数数据来实现攻击的技术。攻击者可以操纵cookies、请求参数、隐藏表单字段或URL查询字符串中的数据,如用户凭证、权限、产品价格、数量等,从而非法获取利益或深入攻击系统。

漏洞原理

在电子商务网站中,常见的参数篡改漏洞表现为:

  1. 服务器未对客户端提交的参数进行充分验证
  2. 业务逻辑存在缺陷,允许异常值通过
  3. 仅在前端进行验证而缺乏后端校验

案例详细分析

漏洞发现过程

  1. 目标网站:某流行电子商务购物网站(redacted.com)
  2. 测试范围:购物车和支付系统
  3. 关键发现
    • 网站对购物车商品数量设置了上限(10件)
    • 但未设置数量下限,允许输入负值

漏洞利用步骤

  1. 添加正常商品:选择一件商品(如单价599₹的T恤)加入购物车
  2. 拦截请求:使用代理工具(如Burp Suite)拦截添加购物车的请求
  3. 参数篡改:将商品数量参数修改为负数(如-10)
    • 计算:-10 * 599₹ = -5990₹
  4. 添加平衡商品
    • 添加7双单价399₹的鞋子:7*399₹ = 2793₹
    • 添加8条单价399₹的牛仔裤:8*399₹ = 3192₹
  5. 总金额计算
    • -5990₹ + 2793₹ + 3192₹ = -5₹
  6. 绕过最低支付限制
    • 由于消费税(GST)要求最低支付350₹
    • 添加1件单价599₹的T恤:594₹
    • 加上GST 329₹,总计923₹
  7. 完成支付:使用信用卡成功支付

实际获利

本应支付:7399₹ + 8399₹ + 599₹ = 6584₹
实际支付:923₹
节省:5661₹ (约86%折扣)

防御措施

  1. 输入验证

    • 对所有用户输入进行严格验证
    • 设置合理的上下限(如商品数量必须为正整数)
    • 验证数据类型和范围
  2. 业务逻辑校验

    • 在服务器端重新计算订单总金额
    • 比较客户端提交金额与服务器计算金额
    • 使用哈希校验防止篡改(如MD5)
  3. 安全设计

    • 不要信任客户端提交的任何数据
    • 关键参数(如价格)应从服务器获取,而非客户端提交
    • 实现双重验证机制
  4. 审计与监控

    • 记录异常订单(如负数量、异常折扣)
    • 设置交易金额异常警报
    • 定期进行安全审计

测试方法论

  1. 边界测试

    • 尝试超出正常范围的输入值
    • 测试负数、零、极大值等特殊情况
  2. 数据类型测试

    • 尝试非数字字符、浮点数等
    • 测试特殊字符和编码
  3. 流程完整性测试

    • 检查每个业务步骤的验证机制
    • 验证前后端一致性
  4. 敏感操作审计

    • 检查关键操作(如支付)的日志记录
    • 验证是否有防篡改机制

总结

参数篡改漏洞利用电子商务网站业务逻辑缺陷,通过操纵交易参数获取非法利益。防御此类漏洞需要:

  • 全面的输入验证
  • 严格的业务逻辑控制
  • 不信任任何客户端数据
  • 完善的监控审计机制

开发人员应始终遵循"不信任客户端"原则,对所有关键操作实施服务器端验证,确保系统安全。

参数篡改漏洞(Parameter Tampering)实战教学文档 漏洞概述 参数篡改(Parameter Tampering)是一种通过修改Web应用交互中传输的参数数据来实现攻击的技术。攻击者可以操纵cookies、请求参数、隐藏表单字段或URL查询字符串中的数据,如用户凭证、权限、产品价格、数量等,从而非法获取利益或深入攻击系统。 漏洞原理 在电子商务网站中,常见的参数篡改漏洞表现为: 服务器未对客户端提交的参数进行充分验证 业务逻辑存在缺陷,允许异常值通过 仅在前端进行验证而缺乏后端校验 案例详细分析 漏洞发现过程 目标网站 :某流行电子商务购物网站(redacted.com) 测试范围 :购物车和支付系统 关键发现 : 网站对购物车商品数量设置了上限(10件) 但未设置数量下限,允许输入负值 漏洞利用步骤 添加正常商品 :选择一件商品(如单价599₹的T恤)加入购物车 拦截请求 :使用代理工具(如Burp Suite)拦截添加购物车的请求 参数篡改 :将商品数量参数修改为负数(如-10) 计算:-10 * 599₹ = -5990₹ 添加平衡商品 : 添加7双单价399₹的鞋子:7* 399₹ = 2793₹ 添加8条单价399₹的牛仔裤:8* 399₹ = 3192₹ 总金额计算 : -5990₹ + 2793₹ + 3192₹ = -5₹ 绕过最低支付限制 : 由于消费税(GST)要求最低支付350₹ 添加1件单价599₹的T恤:594₹ 加上GST 329₹,总计923₹ 完成支付 :使用信用卡成功支付 实际获利 本应支付:7 399₹ + 8 399₹ + 599₹ = 6584₹ 实际支付:923₹ 节省:5661₹ (约86%折扣) 防御措施 输入验证 : 对所有用户输入进行严格验证 设置合理的上下限(如商品数量必须为正整数) 验证数据类型和范围 业务逻辑校验 : 在服务器端重新计算订单总金额 比较客户端提交金额与服务器计算金额 使用哈希校验防止篡改(如MD5) 安全设计 : 不要信任客户端提交的任何数据 关键参数(如价格)应从服务器获取,而非客户端提交 实现双重验证机制 审计与监控 : 记录异常订单(如负数量、异常折扣) 设置交易金额异常警报 定期进行安全审计 测试方法论 边界测试 : 尝试超出正常范围的输入值 测试负数、零、极大值等特殊情况 数据类型测试 : 尝试非数字字符、浮点数等 测试特殊字符和编码 流程完整性测试 : 检查每个业务步骤的验证机制 验证前后端一致性 敏感操作审计 : 检查关键操作(如支付)的日志记录 验证是否有防篡改机制 总结 参数篡改漏洞利用电子商务网站业务逻辑缺陷,通过操纵交易参数获取非法利益。防御此类漏洞需要: 全面的输入验证 严格的业务逻辑控制 不信任任何客户端数据 完善的监控审计机制 开发人员应始终遵循"不信任客户端"原则,对所有关键操作实施服务器端验证,确保系统安全。