Facebook最近推出了忘记密码的手机登录功能,我发现该功能中的二维码扫描存在漏洞,可以利用其进行CSRF攻击,劫持其它Facebook账户。
当我的手机中跳出这个二维码扫描登录界面时,我就想尝试对它进行一些安全测试。首先,我就想到了利用在线服务 QrCode Decoder 来解码二维码信息,解码信息如下:
得出的对应登录链接为:
https://m.facebook.com/xdl/approve/?n=AYK8pQLRNK7UtXH77qI48xUnEHXb0rf2ySjUTHVjA6H-pU5gkI1JPYzit6wCp2z1tTNKZbXScD4MUshQuaP5M9H9j0e_x2ZK0ee9jkjLvv5-sQ&d=AYItt0ByoBCJEFQNGwike6sOHJyPJvDTCOruRgesi-7vvdIm4T3g22-FUW0f0Jph6gPYE3t10SddJ-rS7fg-z9VI&ext=1512136729&hash=AYKa_wmq-7CeeTac
打开该链接后提示成功登入:
在请求处理过程中,为了保证二维码信息不会过期,利用BurpSuite抓包并转发至repeater中进行测试,而当我把保存缓存token的fbdtsg值由 AQG8uIRB5b_U:AQHYfzdc7VMV 更改为 AQG8uIRB5b_U:AQHYfzdc7AB之后,服务端竟然还能有效接收!(因涉及隐私抱歉此处不上图--)
由此,我立马创建了一个CSRF格式请求:
哦,该请求被拒绝了:
经过对Facebook二维码机制作了了解,监测分析了所有请求流量,并对brainfuc*k编译语言进行学习之后,我才明白受害者只要第一次点击那个链接之后,Facebook服务器触发到二维码扫描功能,只有第二次点击才能实现CSRF攻击,因此,我把上述CSRF代码作了及时调整:
最终CSRF请求成功,在对3-4个账户间进行测试后,漏洞确定有效,这种方法可针对受害者在密码重置时进行攻击,从而实现账户劫持。
PoC视频: http://v.youku.com/v_show/id_XMzIyNzUxMDAwMA==.html
NND,向Facebook上报该漏洞后,经过3天多时间的等候,他们竟然说我的漏洞已经有人上报了,而且还不会给我任何奖励,唉,也没关系了,就当是练练手。