原文:
https://thezerohack.com/hack-any-instagram
这篇文章是关于我如何在Instagram上发现一个漏洞,允许我在未经许可的情况下入侵任何Instagram账户。Facebook和Instagram的安全团队修复了这个问题,并作为赏金计划的一部分奖励了我3万美元。
Facebook正在不断改进其在所有平台上的安全控制。作为该计划的一部分,他们最近增加了对所有关键漏洞(包括账户接管)的奖励。所以我决定在Facebook和Instagram上碰碰运气。幸运的是,我在Instagram上找到了一个。
在寻找账户接管漏洞时,我首先想到的是Instagram忘记了密码端点。我试图在Instagram的网页界面上重置密码。他们有一个基于链接的密码重置机制,这是相当强大的,几分钟的测试后,我找不到任何错误。
然后切换到他们的移动端恢复密码流程,在那里我找到一个易受影响的行为。当用户输入他/她的手机号码时,他们将被发送一个六位数字的验证码到他们的手机号码。他们必须输入验证码才能更改密码。因此,如果我们能够尝试验证码上的所有100万个可能,我们将能够更改任何帐户的密码。但我非常确定,对于这种暴力攻击,一定存在某种速度限制。我决定测试一下。
我的测试显示有限速现象我发送了大约1000个请求,其中250个通过了,其余750个请求受到了速率限制。又试了1000次,现在很多都有速率限制。因此,他们的系统正在正确地验证和限制请求。
有两件事让我印象深刻,一是请求的数量,二是没有列入黑名单。我能够持续发送请求而不会被封禁,即使我在一小段时间内发送的请求数量是有限的。
经过几天的持续测试,我发现了两件事可以让我绕过他们的速率限制机制。
1、速率限制
2、ip轮换
对于那些不知道速率限制的人,请在这里(https://resources.securitycompass.com/blog/race-condition-web-applications)阅读。使用多个ip并发发送请求允许我发送大量请求而不受限制。我们可以发送的请求数量取决于请求的并发性和我们使用的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; 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分钟后过期。
校验验证码的数据包:
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来强制发送这个数据包。粗略地说,我能够从一个IP发送200个请求而没有达到速率限制。
在我的测试中,我使用了1000台不同的机器(以轻松地实现并发)和ip发送20万个请求(这是总100万个概率的20%)。
发送200k个请求:
详情请见:https://youtu.be/4O9FjTMlHUM
在真实的攻击场景中,攻击者需要5000个ip来攻击一个账号。这听起来很大,但如果你使用像亚马逊或谷歌这样的云服务提供商,这实际上很容易。要完成对100万个验证码的完整攻击,大约需要花费150美元。
Facebook安全团队在提供了上述发送20万有效请求的视频后,确信了这一点。他们也很快地解决了这个问题。

译者:
这个验证码爆破在好多地方都发现了这个问题,经常重置密码的短信收6个左右就收不到了,可以试下这个轮换ip的技巧,每日get新姿势√
本文迁移自知识星球“火线Zone”