原文:
https://thezerohack.com/how-i-might-have-hacked-any-microsoft-account
这篇文章是关于我如何在微软在线服务上发现一个漏洞,它可能允许任何人在未经同意的情况下接管任何微软账户。微软安全团队修补了这个问题,并作为赏金计划的一部分奖励了我5万美元。
在我的Instagram账户被接管后,我在其他服务中寻找类似的漏洞。我发现微软也使用类似的技术来重置用户的密码,所以我决定测试他们的此处功能的漏洞。
要重置微软账户的密码,我们需要在他们忘记密码的页面中输入我们的电子邮件地址或电话号码,然后我们会被要求选择可以用来接收验证码的电子邮件或手机号码。

一旦我们收到7位验证码,我们将输入它来重置密码。在这里,如果我们可以强制所有7位密码的组合(这将是107 = 1000万个密码),我们将能够未经允许重置任何用户的密码。但是,很明显,会有一些速率限制阻止我们进行大量的尝试。

拦截向验证码处发出的HTTP POST请求如下所示:

如果你看上面的屏幕截图,我们输入的验证码1234567在请求中没有出现。它被加密,然后发送去验证。我猜他们这么做是为了防止自动暴力工具利用他们的系统。因此,我们不能使用Burp这样的工具自动化测试多个验证码,因为它们不会做加密部分😕
过了一段时间,我找到了加密算法并写了脚本,能够自动完成从加密验证码到发送多个并发请求的整个过程。
我最初的测试显示了预期的速率限制的存在。在发送的1000个验证码中,只有122个通过了,其他的则回显1211错误代码,如果我们继续发送请求,他们将阻止各自的用户帐户发送进一步的尝试。

然后,我尝试发送同步的并发请求,就像我对Instagram做的那样,这允许我发送大量请求而不被阻止,同时注入正确的7位验证码,但我仍然无法获得成功的响应。我以为他们有一些控制措施来防止这类袭击。虽然我在发送正确的验证码时得到了一个错误,但仍然没有像我们在最初的测试中看到的那样阻塞用户的证据。所以我还是希望能有所发现。
几天后,我意识到,如果我们发送的所有请求没有同时命中服务器,他们就会把IP地址列入黑名单,甚至请求之间的几毫秒延迟都能让服务器检测到攻击并阻止它。然后我调整我的代码来处理这个问题,并再次测试它。
(译者:这里应该是同时的并发请求服务器)
令人惊讶的是,它成功了,这次我能够得到成功的响应😀
我发送了大约1000个七位数的验证码,包括正确的一个,并能够得到下一步修改密码。
上述过程仅对那些没有启用双因素认证的用户有效,如果用户启用了2FA,我们也将不得不绕过双因素码认证,以更改密码。
我用2FA测试了一个帐户,发现这两个同样都容易受到这种类型的攻击。首先,用户会被提示输入一个由authenticator app生成的6位验证码,然后他们会被要求输入7位验证码,发送到他们的电子邮件或手机号码。然后,他们可以修改密码。
综合起来,攻击者必须发送所有可能的6位和7位验证码,这将是大约1100万次请求尝试,并且必须同时发送更改任何微软账户的密码(包括那些启用2FA的)。
发送如此大量的并发请求并不是一个简单的过程,这将需要大量的计算资源和1000个IP地址来成功完成攻击。
我立即录制了一段所有绕过漏洞的视频,并将其提交给微软,并附上重现漏洞的详细步骤。他们很快就承认了这个问题。
这个问题在2020年11月被修复,我的案例被分配到与预期不同的安全影响。我让他们重新考虑解释我的攻击对安全的影响。经过几封来回的邮件,我的案例被分配到特权提升(涉及多因素身份验证绕过)。由于攻击的复杂性,错误严重程度被认为是重要的,而不是关键的。

我于2021年2月9日通过hackerone获得了5万美元的赏金,并于3月1日获得了发表这篇文章的批准。我要感谢Dan, Jarek和整个MSRC团队耐心听取我的所有意见,提供更新和补丁问题。我还要感谢微软的慷慨资助🙏😊
译者:
怎么做到同时并发请求的?毫秒级延迟就拦截,网速不够啊!
有没有懂的表哥帮忙解释一下
本文迁移自知识星球“火线Zone”