刘鑫自从和张莹熟悉了之后,每天差不多就是三点一线,家里教室食堂,不过有个小妹子天天陪着,他倒是不觉得无聊。。</p>
刘鑫一直没啥女人缘,以前无论是在售楼部还是在大学里,都是差不多的,但是自从刘鑫穿越过之后,发现这种情况改变了。。</p>
今天刘鑫和往常一样,背着书包去湖大复习,与以往不同的是,这次刘鑫额外带了一台苹果Macbook Pro16寸顶配的笔记本电脑,这是因为刘鑫准备从事的特殊行业需要高强度的硬件配置,这部电脑搭配了32个G的内存,一T的固态硬盘和最新的十核心中央处理器以及32核心图形处理芯片,花了刘鑫26000大洋,这让刘鑫整整心疼了三秒钟。。</p>
“刘鑫,刚刚我又在网上看到了微软的漏洞悬赏计划,有五万美元的奖金,你有没有把握?”张莹坐在刘鑫旁边小声说道。。</p>
刘鑫微微一笑道:“这个我早知道了,自从微软公布了Instagram上的帐户劫持漏洞后,我就试图在其他服务中的寻找类似漏洞,我仔细阅读了大量微软发布的资料,寻找类似的技术在其他服务中的应用,我觉得一种技术,不可能只用在一处的,所以我想只要找到应用了类似技术的地方,那么类似的漏洞就会存在。。”</p>
结果,我最后发现了微软在重置用户密码使用了类似的技术,现在我们需要做的就是对其进行渗透测试,以查看其否存在任何速率限制的漏洞。。</p>
张莹一脸惊喜道:“刘鑫你真的是个天才,这么快就能找到新的漏洞,我想请教一下,这个渗透测试你准备怎么进行?“</p>
刘鑫打开了笔记本电脑,进入了微软的账户登录界面,然后对张莹演示道:“你看,我们平时如果忘记了密码,就需要对密码进行重置,在对微软帐户密码进行重置时,我们需要进入“忘记密码”页面,并在页面中输入账户的电子邮件地址或电话号码,之后,会要求我们选择可接收安全码的电子邮件或手机号码。”</p>
张莹点了点头:“是啊,这有什么问题吗?”</p>
刘鑫继续道:“我们必须在页面中输入收到7位数安全码,才能对该账户密码进行重置。但如果我们可以对7位数安全码的所有组合进行暴力破解,我们将可以在未经许可的情况下重置任意用户的密码。但是,显然为了应对这种暴力破解,微软的后端肯定存在一定的速率限制,以阻止我们进行大量的尝试。。”</p>
刘鑫打开自己的小工具,随意输入了一个1234567的安全码提交,然后将向代码验证端点发出的HTTP POST请求拦截,然后将拦截到的详细代码展现给张莹看。。</p>
“你看在这个请求的详细代码中,我们可以看出不存在我们输入1234567安全码。它已被加密,然后发送以进行验证。我猜想开发人员这样做的目的是为了防止自动暴力破解工具对其系统进行利用。”</p>
张莹:“你的意思是说,我们无法使用Burp Intruder之类的工具自动测试多个代码,因为它们不会执行加密。那下一步是不是我们必须要搞明白这里用的加密技术?”</p>
刘鑫点了点头道:“完全正确,不过这个问题不难,因为微软所用的加密技术在过去几年都没有变化过,所以我很轻易的在一个国外的技术论坛上找到了几种微软常用的加密技术,我逐一测试后,找到了正确的加密方法,并且能够自动的完成从加密代码到发送多个并发请求的整个过程。。”</p>
张莹:“刘鑫你太聪明了,你是怎么想到的,我怎么就没想到?”</p>
刘鑫:“这个其实很简单的,我其实没有用太多的技术,你看我发现的这个漏洞,就是微软已经公布了的,只是我喜欢阅读他们的技术文档,因为这对我来说阅读这些技术文档,对我的帮助很大,远远胜过只读那些死板的教材。”</p>
张莹:“这就是社会工程学吗?”</p>
刘鑫:“可以这么说,其实很多新漏洞,都是过往很多漏洞在其他方面的错误重复,我们大部分的时候,都可以根据以往的错误,来寻找新的漏洞,因为错误总是会重复出现,又或者说程序员总会犯差不多的错误。”</p>
张莹:“那测试的结果怎么样?”</p>
刘鑫:“我的初始测试结果,表明存在速率限制,这符合我的预期。在发送的1000个代码中,只有122个能够成功通过,其他代码则受到1211错误代码限制。而且如果我们不断发送请求,它们将阻止相应的用户帐户发送进一步的尝试。”</p>
“接下来,我尝试通过发送并发请求,以绕过速率限制,从而允许我们发送大量请求。但是当注入正确的7位数安全码时,我依然无法获得成功的响应。这意味着,开发人员可能已经采取了一些控制措施来防止此类攻击。”</p>
“尽管在发送正确的安全码时出现错误,但是并没有出现我们在初始测试中遇到的阻止用户的迹象,所以我的希望并没有完全破灭。”</p>
“之后我突然意识到,如果我们发送的所有请求没有同时到达服务器,则服务器会将IP地址列入黑名单。即使请求之间的延迟间隔只有几毫秒,服务器仍可以检测到攻击并进行组织。想通这一点后,我立即调整了代码以处理这种情况,并再次对其进行测试。。”</p>
“令人惊讶的是,它生效了,这次我获得了成功的响应。我一共发送了约1000个左右七位数的密码,其中包含正确的那一个密码,并能够成功进行下一步更改密码。”</p>
张莹:“我有个问题,刚刚你说的,上面的过程仅对未启用双因素身份验证的用户有效,因为如果用户启用了双因素验证,我们必须绕过双因素身份验证代码才能更改密码。”</p>
刘鑫点了点头道:“是的,我对一个启用了双因素验证的帐户进行了测试,我发现其同样也容易受到此类攻击。启用双因素验证的账户在重置密码时,首先会被要求输入由身份验证器应用程序生成的6位数字代码,验证通过后,才会被要求输入发送到其电子邮件或电话号码中的7位数字代码。</p>
“这意味着,攻击者必须同时发送6位和7位安全码的所有可能性,我计算了一下大约会有1100万次请求尝试,以更改任意微软帐户的密码。”</p>
“要发送如此大量的并发请求并不是一件容易的事,攻击者需要需要大量的计算资源以及数千个IP地址才可能成功进行攻击。所以我没有办法进行更进一步测试了,但是以我目前的成果,应该可以拿到那5万美金的奖金了。”</p>