作者:pmiaowu
文章:https://www.yuque.com/pmiaowu/web_security_1/sq87w6
这里需要使用到一个微博账号与两个某厂商账号
条件:
1、微博账号:182**77 (攻击者)
2、某厂商账号A:33*493@qq.com (攻击者)
3、某厂商账号B:28*165@qq.com (无辜受害者)
利用方法:
步骤1:攻击者-登录微博
步骤2:攻击者-使用某厂商账号A 登录
从上面看其实有很多绑定账号快捷登录的方法,但是微博绑定的用户肯定是比较少的所以我们用它
步骤3:攻击者-点击绑定微博抓包
绑定微博的url:https://www.a.test.com/users/auth/weibo/callback?state={"can_transfer"%3A"true"}&code=c593bc150745c37a4d5ec05332d406af
这个url中的code就是我的微博一次性token
步骤4:无辜受害者-使用某厂商账号B 登录
将url发送给账号B 打开:https://www.a.test.com/users/auth/weibo/callback?state={"can_transfer"%3A"true"}&code=c593bc150745c37a4d5ec05332d406af
这时提示绑定成功了~~~ 嘿嘿嘿
步骤5:攻击者-点开浏览器,选择微博登录
总结:
1、OAuth2.0第三步的请求Client携带Access Token向Resource Server请求用户信息资源,没有添加校验参数用于防御CSRF
2、这个之前有遇到过,当有检验参数例如state时候,也可以尝试删掉state键值,也能进行绕过绑定
类似的后端逻辑代码:只有参数存在才判断,而参数不存在最直接ACCESS GRANTED
if(isset($_GET['state'])){
if($_GET['state'] != current_user_state)
ACCESS DENIED
exit()
}
ACCESS GRANTED