首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >走进“乌云”教科书书里的漏洞(4)【充值舍入漏洞】

走进“乌云”教科书书里的漏洞(4)【充值舍入漏洞】

原创
作者头像
用户11796932
发布2025-08-25 11:52:33
发布2025-08-25 11:52:33
1110
举报

0x01 漏洞解析

舍入漏洞是财务、支付、电商等涉及金额计算的系统中,因对小数金额的舍入规则设计不当或计算逻辑不统一,导致实际金额与预期金额产生偏差,进而被攻击者利用获取非法利益的业务逻辑漏洞。其核心成因是不同系统模块(如订单计算、支付对账、退款结算)采用不一致的舍入方式,或未对舍入后的金额进行二次校验,形成金额差漏洞。

具体表现与危害:

  • 舍入方式不统一:例如,订单系统计算商品总价时采用 “四舍五入”(如 1.234 元舍入为 1.23 元),但支付系统对账时采用 “进一法”(如 1.234 元舍入为 1.24 元),或退款系统采用 “去尾法”(如 1.234 元舍入为 1.20 元),导致订单金额、支付金额、退款金额三者不一致。攻击者可利用这种差异,通过批量下单、拆分订单等方式积累小额差额(如每笔订单获利 0.01 元),积少成多造成平台经济损失。
  • 计算精度丢失:部分系统使用浮点数(如 float、double 类型)存储或计算金额,因浮点数本身存在精度误差(如 0.1+0.2≠0.3),叠加舍入规则后会放大偏差。例如,某商品单价 0.1 元,用户购买 3 件,正常总价应为 0.3 元,但浮点数计算可能得到 0.30000000000000004 元,若舍入时未处理该误差,可能导致订单金额异常。
  • 典型攻击场景:攻击者拆分大额订单为多笔小额订单(如将 100 元订单拆分为 100 笔 1 元订单),利用每笔订单舍入产生的 0.01 元差额,通过批量操作获取非法收益;或在退款场景中,利用舍入差异使实际退款金额高于原支付金额,实现 “薅羊毛”

0x02 漏洞复现

本次使用靶场连接:http://www.loveli.com.cn:12531/see_bug_one?id=70

进入页面,是一个钱包充值页面

在金额输入框中输入常规数值,点击 “确认充值” 按钮。 充值后金额增加

按下F12键打开浏览器开发者工具,切换至 “网络(Network)” 面板,确保 “保留日志(Preserve log)” 选项已勾选,以便捕获充值相关的请求和响应。 在数据包里有提示:

输入0.018,成功获取flag

0x03 漏洞修复方法

修复需围绕 “后端主导校验、拒绝信任前端数据” 核心原则,从数据校验、逻辑设计、监控审计三方面入手:

  1. 后端强制重算金额:后端接收订单请求后,不依赖前端传递的 “总价” 参数,而是从数据库中获取商品基础单价、规格溢价(如尺寸、颜色加价)、当前有效优惠规则(如满减、折扣券),按照预设的业务逻辑重新计算订单总价,生成 “后端计算总价”,并与前端传递的 “前端提交总价” 进行比对,两者不一致则直接拒绝订单(错误码可设为 “金额校验失败”)。
  2. 限制金额修改权限:在接口设计层面,将 “订单金额” 字段设为 “后端只读”,前端仅能展示金额,无法通过表单、API 参数等方式修改;若需调整金额(如客服手动改价),需单独设计 “改价接口”,并添加严格的权限控制(如仅 “高级客服” 角色可操作)、操作日志记录(含改价人、改价时间、原金额、新金额、改价原因),同时设置改价上限(如单次改价幅度不超过原金额的 20%)。
  3. 添加异常监控与告警:搭建订单金额异常监控系统,设置监控规则,如 “订单金额低于商品原价的 50%”“同一用户 1 小时内出现 3 次及以上金额校验失败”“单次订单金额为 0 且商品原价高于 100 元”,触发规则后立即向平台安全团队、运营团队发送告警(告警方式含短信、邮件、企业微信通知),便于及时拦截异常订单。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 漏洞解析
  • 0x02 漏洞复现
  • 0x03 漏洞修复方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档