
在安全测试中,除了关注常规的SQL注入或XSS,一些逻辑层面的漏洞往往能带来意外收获。这类漏洞技术门槛未必很高,但考验的是测试者的思路与细心程度。本次分享一个真实的SRC挖掘案例,通过利用系统在不同客户端(小程序与App)上的接口设计差异,成功实现信息越权访问,并获得了相应的漏洞奖励。
漏洞发现过程
目标系统同时提供了App端与小程序端。测试时,首先从小程序端入手,通过抓包发现了一个关键的课程回放地址接口。
该接口路径格式如下:
/xxxx.com/xxx/xxx/xxxCourse/[一串课程ID]/prev

调用此接口,可以直接返回对应课程的直播回放地址。

然而,问题在于:通过小程序端能抓取并访问的,全部是免费课程的ID。付费课程(VIP课程)的ID无法直接从小程序端获取。
关键突破口:App端接口
此时,我们将目光转向了App端。在App中,存在一个“查看最近直播课”的功能列表,即使是非会员用户也可以访问这个列表。

对该功能进行抓包分析,虽然无法直接从这个列表接口获取到视频播放地址,但接口响应中清晰地包含了所有课程(包括VIP付费课程)的唯一ID。

这正是整个漏洞链条中最关键的一环。
组合利用,完成越权
漏洞利用的思路变得清晰:
- 从App端的公开课程列表接口,获取到所有VIP付费课程的ID。
- 将这些付费课程ID,拼接至小程序端发现的课程回放地址接口(
/xxxCourse/[ID]/prev)中。
- 直接请求,成功获取到付费课程的完整回放地址,实现“免费观看”。
整个过程中,App端的列表接口未对用户权限进行校验,泄露了所有课程ID;而小程序端的回放接口,则仅通过ID来定位资源,同样缺乏对请求者是否购买该课程的权限验证。二者结合,便构成了一个完整的越权访问漏洞。
这个案例给我们的启示是,在进行移动端抓包与安全测试时,要特别留意同一业务在不同客户端、不同入口上的实现差异。开发人员可能不会在所有地方都实施一致的、严格的权限校验,尤其是在处理长串、看似不可预测的资源ID时,更容易产生“通过ID直接访问”即是安全的错误假设。这种因逻辑设计缺陷导致的问题,是安全渗透测试中需要重点关注的方向。
|