通过二分法挖掘Facebook 中泄露的敏感信息

文化   2024-11-07 12:05   德国  

扫码领资料

获网安教程


Track安全社区投稿~  

赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)

在十二月,我决定在 Facebook 上进行漏洞挖掘,并选择了 Facebook Android 应用程序。

我正在分析 Facebook 应用程序的密码恢复流程,我注意到以下端点被使用。

img

当用户输入他的电子邮件/电话号码时,电子邮件通过参数 q 以以下方式提供。

该端点包含许多参数,超出了所需的数量,所以我很想测试这些参数的作用。

我很快注意到,虽然用户的电子邮件是由 q 参数携带的,但它还包含一个 qs 参数。

现在,如果你不知道的话;在 Facebook 中,参数后面的字符 s 表示复数。

例如:

invite_id,复数 = invite_ids

user_id,复数 = user_ids

我知道在复数参数中,你可以传递数组数据,例如: user_ids=[“UserID1”,”UserID2"]

所以我以以下方式提供数据:

qs=[“[vicitmemail1@gmail.com]”,”[victimemail2@gmail.com]”]

但它给出了一个错误,声明数组键无效,所以这不是一个普通数组,它有自己的键。

经过一些模糊测试,我最终弄清楚参数 qs 以 JSON 包装格式接受值,并且具有键 “phone” 和 “email”,而email/phone的值将作为数组提供。

示例:[q=victim@gmail.com] qs={“email”:[“[victim@gmail.com]”],”phone”:[“981234567890”]}

现在,当你在忘记密码的端点中提供电子邮件时,与你相关的数据将以加密格式返回。

响应将包含:你的加密用户ID、联系点等。

img

在数据中还有一个值 summary,其值设置为 1

最初我以为这只是一个布尔值,但事实证明:

当我们在 qs 中提供一个电子邮件时: qs={“email”:[“[user1@gmail.com]”]} 响应中会获得一个用户的数据,因此: summary=1

当我们在 qs 中提供两个电子邮件时: qs={“email”:[“[user1@gmail.com]”,”[user2@gmail.com]”]} 响应中会获得两个用户的数据,因此:summary=2

但这里有最后一部分:

假设我提供: qs={“email”:[“[victim1@gmail.com]”,”[victim2@gmail.com]”]} 响应中只获得了一个用户的数据。

这意味着什么? 这两个电子邮件属于同一个用户,并且这两个电子邮件指向同一个用户,导致响应为 “summary”:1

现在,基本上这是一个暴力破解攻击场景。

我提供受害者的用户名以及一个电子邮件,如果电子邮件属于受害者,则响应为 “summary:1”

qs={“email”:[“victimUserName”,”Email”]}

//是的,我们可以在电子邮件参数中提供用户名

利用二分法搜索

暴力破解攻击是非常嘈杂的。但通过使用二分搜索,这种攻击变得容易得多。

由于端点接受一个数据数组:我不必只提交 1个用户名+1个电子邮件

我可以提供 1个用户名+ 100多个电子邮件。

例如;qs={“email”:[“victimUserName”,”[email1@gmail.com]”,”[email2@gmail.com]”,”[email3@gmail.com]”]}

现在,如果请求中的任何电子邮件属于受害者用户名:

Summary=3 //响应为 email1+email2+email3

否则 summary=4 //响应为 victimUsername+email1+email2+email3

这使得暴力破解更加简单,并有效识别任何用户的私人电子邮件,下面是一个展示二分搜索的图示

img

我还收到了 Facebook 团队的 sweeeet 回复,感觉不错:)

img

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

如果你是一个网络安全爱好者,欢迎加入我的知识星球:zk安全知识星球,我们一起进步一起学习。星球不定期会分享一些前沿漏洞,每周安全面试经验、SRC实战纪实等文章分享,微信识别二维码,只需25,即可加入。


白帽子左一
零基础也能学渗透!关注我,跟我一启开启渗透测试工程师成长计划.专注分享网络安全知识技能.
 最新文章