第三方登录绑定csrf漏洞利用

作者: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 TokenResource Server请求用户信息资源,没有添加校验参数用于防御CSRF

2、这个之前有遇到过,当有检验参数例如state时候,也可以尝试删掉state键值,也能进行绕过绑定

类似的后端逻辑代码:只有参数存在才判断,而参数不存在最直接ACCESS GRANTED

if(isset($_GET['state'])){
    if($_GET['state'] != current_user_state)
        ACCESS DENIED
        exit()
}

ACCESS GRANTED
posted @ 2019-11-19 21:43  zpchcbd  阅读(865)  评论(0编辑  收藏  举报