即可成功登录网页端
攻击链:
1、访问:https://c.om/xxxx/qrcodelogin/show,获取 set-cookie:qrtoken
2、用获取到的qrtoken,轮询 状态接口
https://c.om/xxxx/xxxxxx/qrcodeLoginCheck/qrtoken值?callback=jQuery1587040960902
其中:
返回值为1,用户还没有扫描二维码
返回值为2,用户还没有点击确定
返回值带有参数 xxxxx-passport,登录成功,xxxxx-passport为登录凭证
3、已经在微信客户端登录过的受害者在微信客户端打开恶意网页链接,或者微信客户端扫描恶意网页的二维码。
4、恶意网页先后通过两个img标签,依次请求登录确认网页、登录成功接口
5、轮询状态接口,获取 xxxxx-passport,劫持用户账号
Demo:
构建轮询脚本:qrcode.py:(测试发现一个二维码90秒过期,该脚本可自动重新请求)
构建恶意页面:qrcode.php
开启轮询脚本:
手机微信端访问恶意页面。
轮询处获得cookie:
以上就是本人在实战中挖到的劫持漏洞,至于修复方式的话,本人暂时没想到太多。猜想:微信客户端点击确认的时候,加入一个csrf_token可能会好很多。如果大家有什么好的建议,欢迎在评论处分享!