找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1721

积分

0

好友

227

主题
发表于 13 小时前 | 查看: 3| 回复: 0

这是一次针对小程序的漏洞挖掘实战记录,其中发现的漏洞已在测试期间上报。

漏洞挖掘思路

首先访问小程序的排行榜功能页面,在数据交互中发现了问题。
好友榜页面提示与排名信息

通过抓包分析,可以从数据包中看到openid被直接返回,造成了用户敏感信息泄露。为了方便演示,下图仅截取了一个示例,但实际上接口泄露了多个用户的openid
包含openid的排行榜接口响应数据包

这个泄露的openid为后续的越权操作提供了条件。我们可以利用它,配合积分兑换功能,尝试使用他人的账户进行兑换。

利用过程

1. 替换请求身份标识

在BurpSuite中配置规则,将后续请求中原本属于自己的openid参数,替换为从排行榜获取到的其他用户(例如第一名)的openid
包含openid的创建订单请求数据包
BurpSuite Match and Replace规则设置界面

将规则中的openid参数值(例如out2******)替换为目标的openid

2. 尝试兑换商品

接着,尝试使用他人的积分兑换商品,例如选择一个可乐徽章进行兑换。
积分兑换商品选择界面

点击兑换后,发现页面提示需要填写收货地址。而添加地址的功能使用了OpenSession进行会话验证,无法直接越权添加。因此,思路转向通过修改数据包来绕过前端的地址校验。

3. 分析并篡改数据流

分析创建订单的流程,发现是生成订单时,服务器返回的addressInfo地址信息字段为空,导致前端要求填写地址。那么,我们可以通过拦截并修改服务器的响应包,将空的地址信息替换为我们自己的地址。

在BurpSuite中设置响应包替换规则。
编辑响应体替换规则,将addressinfo字段替换为指定内容

完成设置后,可以看到请求数据包中的openid和响应数据包中的addressinfo都已被成功替换。
下图展示了原始的请求与响应数据包,注意其中openid为原用户,addressInfo为空数组。
原始请求与响应数据包对比
下图展示了替换后的请求与响应数据包,openid已变为目标用户,addressInfo已被填充。
篡改后的请求与响应数据包对比

4. 完成越权支付

数据包篡改成功后,页面显示出了我们预设的地址信息,并且可以点击“立即兑换”。
显示预设地址并可以立即兑换的界面

点击兑换,成功完成订单,实现了使用他人账户积分购买商品。
兑换成功提示页面

漏洞验证

为了验证漏洞成功被利用,检查我自己的账户。可以确认,我的账户下没有任何奖品兑换记录,积分也为0,本不具备购买该商品的条件。所有的积分扣除都发生在了那个被窃取openid的用户身上。
我的奖品页面显示暂无记录
个人中心页面显示积分为0

总结

本次漏洞的成因在于两点:

  1. 信息泄露:排行榜等接口未对返回数据做脱敏处理,直接暴露了用户的openid
  2. 不安全的权限校验:在关键业务接口(如创建订单、获取订单信息)中,仅依靠前端上传的openid参数来标识用户身份,后端未与当前登录会话进行强绑定校验,导致可以轻易通过篡改参数实现越权访问和操作。

这种由信息泄露点串联到逻辑漏洞的组合利用,在安全测试中较为常见。开发者需要在设计接口时严格遵守最小权限原则,对敏感信息进行脱敏,并在所有涉及用户资产、身份变更的关键操作上进行严格的二次认证或会话绑定。

希望这个实战案例能为大家在渗透测试和代码审计时提供一些思路。如果你有更多关于安全测试的想法或疑问,欢迎到云栈社区与大家交流探讨。




上一篇:MaxClaw深度体验:一键部署AI助手,无缝集成飞书/钉钉
下一篇:OpenSpec 规范驱动开发实践指南:从安装到最佳实践的 AI 辅助工程手册
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-1 21:58 , Processed in 0.552829 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表