这篇文章是关于我如何在Instagram上发现一个漏洞,允许我在未经许可的情况下破解任何Instagram帐户。Facebook和Instagram安全团队解决了这个问题,并奖励了我3万美元作为他们赏金计划的一部分。
facebook正在不断努力改善其所有平台的安全控制。作为其中的一部分,他们最近增加了所有关键漏洞(包括帐户接管)的奖励支出。所以我决定在FaceBook和Instagram上试试运气。幸运的是,我能够在Instagram上找到一个。
Instagram忘记密码端点是我在寻找帐户接管漏洞时首先想到的。我试图在Instagram网页界面上重置我的密码。他们有一个基于链接的密码重置机制非常强大,几分钟的测试后我找不到任何错误。
然后切换到他们的移动恢复流程,在那里我能够找到易受影响的行为。当用户输入他/她的手机号码时,他们将向他们的手机号码发送一个六位数的密码。他们必须输入它才能更改密码。因此,如果我们能够在验证码端点上尝试所有一百万个代码,我们就能够更改任何帐户的密码。但我很确定必须对这种暴力攻击进行速率限制。我决定测试一下。
我的测试确实表明存在速率限制。我发送了大约1000个请求,其中250个请求通过,其余750个请求是速率限制的。尝试了另外1000,现在他们中的许多人得到了限制。因此,他们的系统正在验证并正确地限制请求。
令人印象深刻的两件事是请求的数量和没有列入黑名单。我能够连续发送请求而不会被阻止,即使我在一小部分时间内发送的请求数量有限。
经过几天的连续测试,我发现了两件让我绕过速率限制机制的事情。
种族危险
IP轮换
对于那些不了解竞争状况的人,请在此处阅读。使用多个IP发送并发请求允许我发送大量请求而不受限制。我们可以发送的请求数取决于req的并发性和我们使用的IP数量。此外,我意识到代码在10分钟后到期,它使攻击更加困难,因此我们需要1000个IP来执行攻击。
我向Facebook安全团队报告了漏洞,由于我的报告中缺少信息,他们最初无法重现它。在几封电子邮件和坚实的概念证明视频之后,我能够让他们相信这次攻击是可行的。
概念证明:
请求密码
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;郁金香; qcom; en_IN; 152830654)
Accept-Language:en-IN,en-US
Content-Type:application / x-www-form-
Accept-Encoding:gzip,deflate
主机: i.instagram.com
连接:keep-alive
q = mobile_number&device_id =
受害者将收到密码,并将在10分钟后过期。
验证密码
POST / api / v1 / accounts / account_
User-Agent:Instagram 92.0.0.11.114 Android(27 / 8.1.0; 440dpi; 1080×2150; Xiaomi / xiaomi; Redmi Note 6 Pro;郁金香; qcom ; en_IN; 152830654)
Accept-Language:en-IN,en-US
Content-Type:application / x-www-form-
Accept-Encoding:gzip,deflate
主机: i.instagram.com
连接:keep-alive
recover_code = 123456&device_id = android-device-id-here
现在我们需要使用多个IP来强制使用此端点。粗略地说,我能够从单个IP发送200个请求而不会达到速率限制。
在我的测试中,我使用了1000台不同的机器(轻松实现并发)和IP以发送200k请求(占总概率百万的20%)。
发送200k请求
在真实的攻击情形中,攻击者需要5000个IP来破解帐户。这听起来很大,但如果您使用像亚马逊或谷歌这样的云服务提供商,这实际上很容易。执行100万个代码的完全攻击将花费大约150美元。
在提供上述发送200k有效请求的视频后,Facebook安全团队确信。他们也迅速解决和解决问题。
补丁后
我感谢Facebook安全团队通过他们的bug赏金计划奖励我。请在评论中告诉我您的想法
翻译自:https://thezerohack.com/hack-any-instagram#articlescroll