【支付漏洞】金额溢出导致的0元购-网络安全

张开发
2026/4/26 7:58:50 15 分钟阅读
【支付漏洞】金额溢出导致的0元购-网络安全
一、免责声明本次所有操作均在玄域靶场内进行大家在生活中也务必严格遵守《网络安全法》玄域靶场www.shangsec.com目前平台已建成web渗透靶场、安卓App渗透靶场、苹果App渗透靶场、实战漏洞报告板块、面试刷题板块、网安学习板块等等。除CTF系列关卡环境外其余所有靶场环境均改编自企业真实漏洞案例二、前置知识在实际开发中因为这个业务功能点可能只需要整数那么开发人员可能就会通过一个整数类型的变量去存储我们的值。而对于后端开发中最常用的Java也好还是 Node.js 也好它们的整型大小都是有范围的。对于Java来讲int类型的最大值为2147483647而对于JS来讲它的最大值是 9007199254740991下面是代码演示publicclassMain { publicstaticvoidmain(String[] args){ int maxValue 2147483647; int overflowValue maxValue*2; System.out.println(overflowValue); } }通过上面的代码演示我们可以知道存在整数溢出这么一个知识点。但是它是负数一般情况下特别是在这个支付业务中当你的总金额为负数时后端肯定会异常处理的你也是没办法0元或者低价购买这个商品的。经过进一步尝试可以发现目标的单价金额只能修改为比原金额大的一个数。而优惠券金额只能修改为比原金额小的一个数甚至是负数这个逻辑乍一看好像没有任何问题。毕竟你把单价修改贵了把优惠券金额修改小了你付款的时候反而比正常买要更贵了。这对于厂商来讲是好事这肯定不是我们想要的一个结果那么我们怎样结合整数溢出来进行组合利用呢。三、实操演示来到玄域靶场-支付漏洞08环境选择优惠券后点击购买后进行数据包的拦截。修改数据包如下即可这样我们就可以结合整数溢出来达到我们想要的一个结果。然后放行数据包

更多文章