这篇文章讲述了我是如何在Instagram上发现漏洞的,理论上我可以在未经许可的情况下入侵任意的Instagram账户。Facebook和Instagram的安全团队接收到我的漏洞报告后确认了漏洞的存在,并奖励了我3万美元。
Facebook一直在努力改善其所有平台的安全性能,作为计划的一部分,他们最近提高了所有关键漏洞(包括账户接管)的奖金。所以我决定去Instagram网站试试运气。幸运的是,我发现了一个帐户接管漏洞。
在寻找帐户接管漏洞时,我首先想到的是Instagram帐户的忘记密码端点。于是我试图在Instagram 网页界面上重置我的密码,但是他们有一个基于链接的密码重置机制非常强大,几分钟的测试后,我找不到任何错误。
然后,我开始研究基于手机验证码的重置密码功能,那里应该是一个易受影响的切入点。当用户在重置密码处输入手机号码时,点击发送后,手机会收到一个六位数的验证码。只有输入正确的验证码,才能更改密码。因此,如果能在验证码端点上尝试100万个验证码,我们就能更改任何帐户的密码。当然,Instagram对验证码存在一定的验证速度限制,为了了解其内部机制,我决定对验证码进行暴力测试。
最终,我发现大约每1000个请求中有250个能正常请求通过,其余750个请求是速率限制的。接着我又尝试发送了1000个请求,发现更多的请求被限制,看来这个限速机制运行得很好。
但我还是发现了两个可以利用的点,一个是发送了这么多请求后,我的IP却始终没有被列入黑名单,另一个是在一定时间内连续发送请求并不会被阻拦。
经过几天的持续测试,我发现有两个方法可以绕过Instagram的速度限制机制。
1. Race Hazard
2. IP轮换
对于那些不了解Race Hazard的读者,可以点击这里了解。使用多个IP并发发送请求可以让我在一定时间内不受限制地发送大量请求。我们可以发送的请求数量取决于请求的并发和我们所使用的IP的数量。此外,我意识到手机验证码会在10分钟后过期,这样会使攻击变得更加困难。因此我们需要数千个IP来执行攻击。
我向Facebook安全团队报告了这个漏洞,但是由于我的报告中缺少某些必要的信息,他们一开始并没有引起足够的重视。在发送了几封说明邮件和PoC视频之后,他们成功地相信这样的攻击是可行的。
请求验证码: