前言
看了国外大神的一处反射xss+两处csrf组合利用,觉得有必要看看oauth协议。
利用点
- oauth1协议没有对回调参数oauth_callback做限制,导致可以回调到任意网站。那么回调到自己搭建的网站,就可以获得token。
- oauth2 redirect_url也有可以校验不严回调到任意网站。有些网站后台直接固定redirect_url.
- 没有使用state参数,可以会造成CSRF.
服务端拿到code, 带着code请求第三方API返回token, 用token + appid就可以从授权方获取用户数据。所以code被劫持替换之后,获取的是其它第三方帐户信息,验证不当可能会造成任意用户绑定或登录。qq的api是用一个openid验证,一个openid对应一个用户。
yzmcms的代码片断
1
2
3
4
5
6
7
8
9if ($token) {
$url="https://graph.qq.com/oauth2.0/me?access_token=$token";
$content=file_get_contents($url);
$content=str_replace('callback( ','',$content);
$content=str_replace(' );','',$content);
$returns = json_decode($content);
$openid = $returns->openid;
$this->openid = $openid;
}所以应用方与第三方都有可能产生配置不当的漏洞。
总结
严格遵守oauth协议规范。