web漏洞-数据篡改安全问题
字数 1212 2025-08-09 13:33:35

Web漏洞之数据篡改安全问题详解

一、基本原理

1. 商品的一般购买流程

  1. 选择商品和数量
  2. 选择支付方式及配送方式
  3. 生成订单编号
  4. 订单支付选择
  5. 完成支付(支付宝、微信、银行卡等)

2. 常见的易篡改参数

  • 商品编号ID
  • 购买价格
  • 购买数量
  • 支付方式
  • 订单号
  • 支付状态

3. 常见的数据篡改方法

  • 替换支付:修改支付接口或支付参数
  • 重复支付:利用同一订单多次支付
  • 最小额支付:将金额修改为系统允许的最小值
  • 负数支付:将数量或价格改为负数
  • 优惠券支付:非法修改优惠券使用条件

二、检测与危害分析

演示案例一:某商城系统商品支付购买数量、订单编号测试

1. 修改购买数量漏洞

  1. 登录系统后选择商品
  2. 设置商品交易配置与物流配送
  3. 选择77件商品(便于识别)
  4. 使用Burp Suite抓包,发现num=77参数
  5. 验证num参数确实控制购买数量
  6. num改为负数,成功实现0元支付

2. 修改订单编号漏洞

  1. 完成商品购买流程至提交订单
  2. 抓取包含订单编号的数据包
  3. 将数据包发送到Repeater保存
  4. 重新下一个订单
  5. 用前一个订单编号替换新订单编号
  6. 成功实现低价购买高价商品(如用1000元购买价值2000元的商品)

漏洞原因:系统缺乏订单编号验证机制

3. 修改支付接口漏洞(理论说明)

  • 当系统提供多种支付方式时
  • 将支付接口修改为不存在的接口
  • 如果系统未正确处理不存在的支付接口
  • 可能导致支付被绕过而显示成功

演示案例二:某系统商品订单数量、支付价格测试

1. 修改订单数量

  1. 选择商品并点击立即购买
  2. 抓包发现qty=1参数
  3. 修改为qty=2并发送
  4. 成功修改商品数量

2. 修改订单价格

  1. 在数据包中发现价格参数
  2. 将价格修改为1并发送
  3. 成功修改订单价格

3. 商品替换攻击

  1. 选择两个不同价格的商品(5400元和6000元)
  2. 比较数据包发现idname参数不同
  3. 抓取5400元商品的数据包
  4. idname替换为6000元商品的对应值
  5. 成功用5400元购买价值6000元的商品

三、修复方案

  1. 数据签名验证

    • 对交易金额和订单进行数字签名
    • 确保数据完整性
  2. 数值有效性检查

    • 服务端验证金额是否为正数
    • 验证数量、单价等数值的合理性
  3. 动态密钥验证

    • 支付过程中加入服务器生成的key
    • 用于校验参数是否被篡改
  4. 安全过滤与判断

    • 对金额、数量、单价、快递费等关键数值
    • 进行严格的安全过滤与逻辑判断
  5. 数据库一致性验证

    • 提交订单时后台验证单价是否与数据库记录一致
    • 防止价格被篡改
  6. 服务端参数校验

    • 严格控制用户从GET、POST、Cookies等提交的参数
    • 支付加密算法应在服务端完成
    • 避免直接读取客户端提供的值
  7. 订单编号保护

    • 实现订单编号生成和验证机制
    • 防止订单编号被篡改或替换
  8. 支付接口验证

    • 严格验证支付接口的有效性
    • 对不存在的支付接口进行正确处理

通过以上措施,可以有效防止数据篡改类安全漏洞,确保电子商务系统的交易安全。

Web漏洞之数据篡改安全问题详解 一、基本原理 1. 商品的一般购买流程 选择商品和数量 选择支付方式及配送方式 生成订单编号 订单支付选择 完成支付(支付宝、微信、银行卡等) 2. 常见的易篡改参数 商品编号ID 购买价格 购买数量 支付方式 订单号 支付状态 3. 常见的数据篡改方法 替换支付 :修改支付接口或支付参数 重复支付 :利用同一订单多次支付 最小额支付 :将金额修改为系统允许的最小值 负数支付 :将数量或价格改为负数 优惠券支付 :非法修改优惠券使用条件 二、检测与危害分析 演示案例一:某商城系统商品支付购买数量、订单编号测试 1. 修改购买数量漏洞 登录系统后选择商品 设置商品交易配置与物流配送 选择77件商品(便于识别) 使用Burp Suite抓包,发现 num=77 参数 验证 num 参数确实控制购买数量 将 num 改为负数,成功实现0元支付 2. 修改订单编号漏洞 完成商品购买流程至提交订单 抓取包含订单编号的数据包 将数据包发送到Repeater保存 重新下一个订单 用前一个订单编号替换新订单编号 成功实现低价购买高价商品(如用1000元购买价值2000元的商品) 漏洞原因 :系统缺乏订单编号验证机制 3. 修改支付接口漏洞(理论说明) 当系统提供多种支付方式时 将支付接口修改为不存在的接口 如果系统未正确处理不存在的支付接口 可能导致支付被绕过而显示成功 演示案例二:某系统商品订单数量、支付价格测试 1. 修改订单数量 选择商品并点击立即购买 抓包发现 qty=1 参数 修改为 qty=2 并发送 成功修改商品数量 2. 修改订单价格 在数据包中发现价格参数 将价格修改为1并发送 成功修改订单价格 3. 商品替换攻击 选择两个不同价格的商品(5400元和6000元) 比较数据包发现 id 和 name 参数不同 抓取5400元商品的数据包 将 id 和 name 替换为6000元商品的对应值 成功用5400元购买价值6000元的商品 三、修复方案 数据签名验证 对交易金额和订单进行数字签名 确保数据完整性 数值有效性检查 服务端验证金额是否为正数 验证数量、单价等数值的合理性 动态密钥验证 支付过程中加入服务器生成的key 用于校验参数是否被篡改 安全过滤与判断 对金额、数量、单价、快递费等关键数值 进行严格的安全过滤与逻辑判断 数据库一致性验证 提交订单时后台验证单价是否与数据库记录一致 防止价格被篡改 服务端参数校验 严格控制用户从GET、POST、Cookies等提交的参数 支付加密算法应在服务端完成 避免直接读取客户端提供的值 订单编号保护 实现订单编号生成和验证机制 防止订单编号被篡改或替换 支付接口验证 严格验证支付接口的有效性 对不存在的支付接口进行正确处理 通过以上措施,可以有效防止数据篡改类安全漏洞,确保电子商务系统的交易安全。