在漏洞挖掘方面,我更喜欢apps而不是web。
我下载了一堆不同版本的FB和Messenger APK,收集了所有的端点,对它们进行了分类并进行了检查。
在这个过程中,我遇到了一个有趣的端点,名为:
POST auth/flashcall_account_recovery
该端点需要3个参数
cuid, encrypted_phone_numbers & cli
CUID基本上意味着加密的电子邮件/电话,很容易找到。只需将受害者的电子邮件提供给
POST /recover_accounts
而作为回应,你会得到CUID。
第二,在浏览Facebook的密码恢复流程时。
我注意到,在负责发送FB OTP代码的端点中,有一个参数名为。
should_use_flash_call=false
如果它是false
,你会在你的手机中收到一个OTP短信,如果设置为true
,你会收到一个电话,而不是OTP来恢复账户。而在响应中,它包含了所需的加密的电话号码。
我无法弄清楚cli
是什么。我想到的唯一东西是cli~命令行界面
。由于想不出来,我就提供了null
值来代替。当提出请求时。我收到了属于该用户的用户ID,我提供的CUID是其电子邮件值。这意味着攻击者可以提供任何人的电子邮件/电话作为CUID,而在回应中他完全可以确定该电子邮件是属于谁的。
所以我开始通过阅读smali文件来分析这个恢复流程是如何工作的。
端点的工作方式如下。
1.我输入我的电子邮件/电话。2.选择电话恢复选项。3.我收到一个电话。4.该电话号码将自动提供给端点
POST /flash_call_recovery
cuid=x&enc_phone=x&cli= 1xxxxx
实际上在cli参数中,我们应该提供在步骤3中接收电话的电话号码。现在,这一切都明白了为什么它被称为电话恢复。我猜cli的意思是类似于来电识别的东西。在一个理想的情况下,当提供了所有的有效值后,我们会收到以下的响应。
{“id”:”UserID”,”nonce”:”XXXX”,"skip_logout_pw_reset":""}
这个nonce
值充当一个OTP代码,然后被提供给OTP验证端点。OTP验证端点负责验证nonce
并设置新密码
在POST /flash_call_recovery
中,我最初测试将受害者的CUID提供给另一个用户的有效CLI是否会起作用,但它没有。我试着到处翻转每个参数,但没有一个管用。现在,我剩下的唯一选择就是暴力破解cli。考虑到FB对速率严格限制,因为它甚至对非认证端点实施了速率限制,我对此几乎不抱任何希望 但令我绝对吃惊的是,它在这个端点上没有实施速率限制。
因此,攻击的过程是这样的:用户在Flashcall恢复端点中提供受害者的CUID
和enc_phone_number
。对Cli
进行暴力攻击 从响应中收到nonce
在OTP验证端点中提供nonce
,并为受害者的账户设置一个新的密码。以下视频演示了默认电话帐户恢复过程的工作原理。