在企业安全测试中,支付业务是重点审计对象之一,往往潜藏着各类安全漏洞。本文将以余额充值场景为例,深入剖析一个典型的支付逻辑漏洞。
在支付系统中,金额通常精确到分(即0.00格式),部分区块链平台可能支持更高精度。
当我们尝试充值0.001元时,系统通常会通过前端校验或四舍五入机制进行处理。
以支付宝为例,由于其支付接口仅支持到分位,会直接拒绝此类异常金额请求。
系统界面显示为0.01元,末位的9被自动截断,这符合第三方支付的精度限制。
然而,实际支付时却扣除了0.02元,这一异常现象暴露了系统的逻辑缺陷。攻击者可以利用四舍五入规则,通过精心构造的充值金额实现"半价充值"等欺诈行为。
这类漏洞在企业SRC中较为常见,其本质是利用了系统在处理金额精度时的逻辑缺陷。开发者在实现支付功能时,必须确保前后端的金额校验逻辑严格一致,并在服务端进行最终的有效性验证,以防止此类安全风险的发生。
某app可以购买 J 金的项目,然后就随手下载了app,打开一个,发现钱包余额是 0.00 的字眼,我随手充值了 1.01 ,1.005,1.05 但是最后充值都是很正确的
然后我也放弃了这个漏洞的想法,我晚上睡觉的到时候,我又把这个 app 拿出来看(因为我买了某金嘛,我就想看看我赚没) 晚上拿出来看的时候我就发现了提现这个功能点:
首先尝试提现1元,并通过抓包将金额修改为1.005元。
当看到提现成功的提示显示为1元时,我一度以为测试失败了。随后发现余额变成了2.04元,心里更是凉了半截。
原文始发于微信公众号(信安一把索):支付漏洞四舍五入
评论