破解订阅计划获取免费服务
博客文章描述了我如何绕过订阅计划免费获取付费服务访问权限的过程。
希望大家一切安好,我有一段时间没有发布博客了,所以决定利用这个平台与大家分享一些新的发现。这篇博客主要讲述我是如何绕过订阅计划和付费墙来免费使用付费服务的。
这个漏洞利用起来非常简单,但花了些时间才弄清楚并实现。基本上,我在寻找免费使用该服务的方法。该应用有多个订阅计划并使用Stripe进行支付。我会尽量保持解释简单明了。
背景
目标应用是一个娱乐平台,既有付费视频也有免费视频,要求用户在继续观看平台上的付费内容前购买订阅。
此外,该应用只允许使用特定国家的手机号进行注册/登录,用户也可以使用社交媒体账户登录/注册,但需要进行手机验证。
挑战
真正的挑战在于,由于我没有该国家的手机号,也没有使用社交媒体登录/注册(同样需要验证手机号),导致我无法在该平台上创建账户。
思路过程
为了绕过这个限制,我首先尝试查看是否可以使用该国家的任意手机号进行注册。
当你使用手机号注册时,需要通过发送到该手机的6位验证码进行验证。漏洞利用的第一部分从这里开始:我们需要验证码来访问/验证新创建的账户。
通过输入随机号码和6位随机验证码并点击验证,会发送如下请求。我们可以通过操纵验证请求的响应代码轻松绕过手机号验证,示例如下:
通过这种方式,我们不再需要提供手机验证码,可以继续执行后续请求序列。如果不绕过这个OTP验证,我们将无法深入测试。
在上面的请求中,你可以看到不再需要验证码,因此我们可以使用任意号码创建账户,甚至可以向账户添加电子邮件(这很有趣,因为原本没有仅使用电子邮件注册或向账户添加电子邮件的选项)。
登录新账户后,你会看到一个弹窗。我尝试绕过订阅计划免费观看内容,但由于使用Stripe作为支付网关,绕过它相当困难。因此,我剩下的唯一选择就是黑客该平台的API,以某种方式在我的账户上激活订阅。
我尝试探索和抓取API端点,以获取更多关于订阅计划的详细信息,并找到了一个端点,该端点基本上提供了我需要了解的所有订阅计划信息。
在花足够时间理解API中的订阅计划信息后,我尝试向现有账户添加订阅,但由于支付网关的限制以及在编辑/账户更新请求中没有添加订阅的选项,这是不可能的。但如果你仔细看,账户注册请求中有一个有趣的选项:“cunsumerSubscription”: null。
因此,我决定创建一个新账户,并从套餐信息API请求中添加订阅包信息。新的注册请求大致如下:
仔细发送上述请求,我们可以创建一个绕过付费墙的账户,并附带已激活的订阅。有趣的是,我们还可以通过修改"durationDays"、“subscriptionStartDateTime"和"subscriptionEndDateTime"下的值来延长订阅期限。
基本上,我们不仅绕过了订阅,还能够创建一个拥有无限订阅的账户。
就这样,我成功绕过了付费墙并黑客了订阅包。深入研究那些看似无意义的东西总是有益的。希望大家通过阅读这篇博客学到新东西,并为黑客和开发者提供一些关键要点。
给黑客的建议
- 从多个角度审视目标
- 尝试寻找能提供信息的API端点
- 学会在没有API文档的情况下构建请求
- 不要因错误而气馁
给开发者的建议
- 尽量不要通过API泄露关键信息,如密钥或订阅信息等
- 不要让客户通过API请求更新不必要的信息
- 正确验证OTP
“有时候,黑客只是某人在某件事上花费了比常人预期更多的时间”