记录第一次尝试小程序支付漏洞挖掘
字数 1396 2025-08-20 18:17:59
小程序支付漏洞挖掘实战教学文档
一、前言
本教学文档详细记录了一次微信小程序支付漏洞挖掘的全过程,重点介绍了如何通过代理工具抓取小程序数据包并发现支付逻辑漏洞。该漏洞最终被评级为高危漏洞。
二、准备工作
1. 所需工具
- Proxifier(代理转发工具)
- Burp Suite(抓包和测试工具)
- 微信开发者工具(可选)
2. 环境配置
Proxifier设置步骤:
- 从官网下载并安装Proxifier(https://www.proxifier.com/)
- 安装时根据需求选择选项,其他步骤默认下一步
- 安装完成后,添加代理服务器:
- 地址:本地IP(127.0.0.1)
- 端口:自定义(需与Burp设置一致)
- 配置代理规则:
- 打开微信小程序后,在任务管理器中找到
wechatappex进程 - 右键查看文件位置,复制路径
- 在Proxifier中创建新规则:
- 名称自定义
- Applications:粘贴复制的路径
- Action:选择之前设置的代理服务器
- 协议选择HTTPS
- 打开微信小程序后,在任务管理器中找到
注意:Proxifier有31天试用期,如需长期使用需自行寻找破解方法
Burp Suite设置:
- 打开Burp Suite
- 设置代理:
- IP:127.0.0.1
- 端口:与Proxifier中设置的端口一致
三、漏洞挖掘流程
1. 抓包过程
- 打开目标微信小程序
- 选择支付相关功能(案例中选择"线上就医")
- 选择不同价格的商品/服务(案例中选择不同价格的医生)
- 点击确认支付,在Burp中捕获数据包
2. 漏洞分析
- 将捕获的数据包发送到Repeater模块进行测试
- 发现支付金额参数(案例中为
cost) - 尝试修改金额参数,发现校验机制:
- 案例中发现医生ID与金额存在对应关系
- 单独修改金额会被后端校验拒绝
3. 漏洞利用
- 同时修改两个关键参数:
- 医生ID(案例中参数为
code) - 对应金额(案例中参数为
cost)
- 医生ID(案例中参数为
- 具体操作:
- 捕获高价医生(如30元)的支付请求
- 将医生ID修改为低价医生(如12元)的ID
- 同时将金额参数修改为低价(12元)
- 发送修改后的请求,观察响应:
- 案例中成功返回低价支付二维码
- 实际支付金额变为低价(12元)
四、漏洞原理
该漏洞属于业务逻辑漏洞中的"支付逻辑漏洞",具体表现为:
- 后端仅校验了医生ID与金额的对应关系
- 未对用户实际选择的医生服务进行二次验证
- 攻击者可通过同时修改相关参数绕过支付校验
五、注意事项
- 实际测试时:
- 建议在授权范围内进行测试
- 案例中作者未完成实际支付,不确定服务端最终如何处理
- 法律风险:
- 未经授权的测试可能涉及法律问题
- 建议通过正规漏洞报告平台提交发现
六、防御建议
对于开发者的防护措施:
- 支付环节应使用服务端生成的订单号
- 关键参数(如商品ID、价格)应使用签名校验
- 支付完成后应验证订单与实际服务的一致性
- 避免在前端传递和依赖价格参数
七、总结
-
该漏洞被评为高危的原因:
- 可直接导致实际支付金额被篡改
- 影响商家正常收入
- 可能被批量利用
-
漏洞挖掘要点:
- 关注支付流程中的参数关联性
- 尝试修改多个相关参数组合
- 注意后端校验逻辑的完整性
-
工具链的重要性:
- 正确配置代理环境是成功抓包的前提
- Burp Suite的Repeater模块便于多次测试
通过本案例,安全研究人员可以学习到微信小程序支付漏洞的挖掘方法和思路,开发者则可以了解如何避免此类漏洞的产生。