如何暴力破解Instagram的6位验证码

iso60001  1908天前

22.jpg

在这篇文章中我将讲述近期在Instagram上发现一个漏洞,理论上可以让我入侵进任意一个Instagram账户。Facebook和Instagram的安全团队在接收到我的漏洞报告后确认了漏洞的存在,作为他们漏洞赏金计划的一部分,奖励了我30000美元。

Facebook一直在努力改善其下属所有平台的安全性能,因此,他们最近提高了所有致命漏洞(包括账户接管)的奖金。在这种情况下我决定去Instagram网站碰碰运气。幸运的是,我发现了一个帐户接管漏洞。

对于帐户接管漏洞,我首先想到的是Instagram帐户的忘记密码功能。

但可惜的是,Instagram网站的重置密码功能(其中一种形式)需要用户去点击某条随机生成的链接,我在研究了一段时间后,没有发现任何漏洞。

于是,我开始研究基于手机验证码的重置密码功能,并最终找到了某种应对暴力破解缺陷。当用户在重置密码处输入手机号码,点击发送后,手机号码会收到一个六位验证码。只有正确输入验证码,才能继续更改密码。因此,如果我们能够在一段时间内尝试100万个验证码,我们就能进入下一步,更改任何帐户的密码。当然,Instagram对验证码的一定存在验证速度限制,为了清楚其内部机制,我决定对验证码进行暴力破解。

最终,我发现大约每1000个请求中有250个能正常发送出去,其余750个请求大概是被限速机制所阻拦了。接着我又发送了1000个请求,发现更多的请求被阻拦,看来这个限速机制运行良好。

但我还是发现了两个可以利用的特点,一个是我的ip始终没有被列入黑名单,其次是在一定时间内发送某个数字之下的请求不会被阻拦。

再经过几天的持续测试,我发现有两件事可以让我绕过Instagram的速度限制机制。

  1. 竞争冒险(Race Hazard)

  2. IP轮换

对于那些不了解竞争冒险的读者,可以点击这里了解。使用多个ip并发发送请求可让我在一定时间内不受限制地发送大量请求。我们可以发送的请求数量取决于请求的并发和我们所使用的ip的数量。另外,需要注意的是,手机验证码会在10分钟内过期,因此,要完成破解,我们需要数千个ip来执行攻击。

最初,在我向Facebook安全团队报告了这个漏洞后,由于我的报告中缺少某些必要信息,他们无法复现。但在发送了几封说明邮件和PoC视频后,我成功说服了他们,这个漏洞确实存在。

Proof of concept:

请求验证码:

POST /api/v1/users/lookup/ HTTP/1.1
User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)
Accept-Language: en-IN, en-US
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Host: i.instagram.com
Connection: keep-alive

q=mobile_number&device_id=android-device-id-here

上述请求发出后,受害者会收到一个验证码,10分钟后过期。

验证6位验证码:

POST /api/v1/accounts/account_recovery_code_verify/ HTTP/1.1
User-Agent: Instagram 92.0.0.11.114 Android (27/8.1.0; 440dpi; 1080×2150; Xiaomi/xiaomi; Redmi Note 6 Pro; tulip; qcom; en_IN; 152830654)
Accept-Language: en-IN, en-US
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept-Encoding: gzip, deflate
Host: i.instagram.com
Connection: keep-alive

recover_code=123456&device_id=android-device-id-here

现在我们就可以使用多个ip进行暴力破解。在我的示例中(目标为短时发送20万个请求),为了不触发速度限制,每个IP大概负责发送200个请求。

我使用了1000台不同的机器(实现并发不困难)和ip发送了20万个请求(占100万的20%)。

演示视频链接:https://youtu.be/4O9FjTMlHUM

33.png44.png

在真实的攻击场景中,为了尝试100万个验证码,攻击者大概需要5000个ip。这听起来是个很大的数量,但如果你使用Amazon或谷歌的云服务,那么这就会变得很简单。据我估算,大约只需要花费150美元。

Facebook安全团队在收到上述视频说明后被我说服,迅速解决了这个漏洞。

发布补丁

30000美元奖励。

55.jpg

我还是很感谢Facebook给我的漏洞奖励!

本文由白帽汇整理并翻译,不代表白帽汇任何观点和立场
来源:https://thezerohack.com/hack-any-instagram#articlescroll

最新评论

11  :  国内50就收了
1901天前 回复
gouomi  :  你好,请问ins登陆时需要**机验证**,但是**机收不到验证**,然后8位安全**也忘记了,怎样能登陆?
41天前 回复
昵称
邮箱
提交评论