0170-利用CSP探测网站登陆状态(alipay-baidu为例)-棉花糖会员站 # 利用CSP探测网站登陆状态(alipay/baidu为例)
0x00 背景
=======
* * *
今天看到zone里有同学发帖说了探测支付宝登录状态的帖子:http://zone.wooyun.org/content/17665
由此我想到了我们parsec的@/fd 半年前提到的一个思路,当时他给出了一个探测twitter是否登录的页面,可是我那个时候才疏学浅,好像一直没理解。这时候返回去看看,就有了这篇文章。
0x01 CSP简介
==========
* * *
内容安全策略(Content Security Policy,简称CSP)是一种以可信白名单作机制,来限制网站中是否可以包含某来源内容。默认配置下不允许执行内联代码`
```
report.php用来记录:
```
```
当接收到php://input的时候说明CSP发送报告了,说明请求违反的CSP规则了,也就意味着用户没有登录,所以将session中的nologin设置为1。 然后在index.php里用一个ajax来向alipay.php请求,实际上就是获得$_SESSION[nologin]的值:
```
```
如上,获取完后将session清除一下,以免影响下一次的判断。
获得值如果为1的话,说明没有登录,如果为0说明已登录,就可以显示出来或做任何其他操作了。
来个演示:http://mhz.pw/game/detect/alipay/
登录支付宝以后访问,显示“已登录”
![enter image description here](http://drops.javaweb.org/uploads/images/85e67e0bcb55220bb51f94770d93c9a6a6281c03.jpg)
换个浏览器,直接访问则显示“未登录”:
![enter image description here](http://drops.javaweb.org/uploads/images/faa6056c2b16b034cee3e2c52f2775572c597fd7.jpg)
0x04 由http/https混用造成的问题(百度为例)
=============================
* * *
同样的问题,不仅仅是支付宝存在,只要有“统一登录入口”的网站都可能出现这个问题,因为统一登录入口通常是一个单独的域名。
还有一种情况,是http和https混用造成的。有些网站的登录页面是https加密传输的,但登陆以后实际的操作页面是走http。
这之间一样存在一个跳转的问题,当我们访问一个登陆后才能看到的页面如http://xxx.com/index,未登录的用户就会跳转到登录页面,如https://xxx.com/login。
在CSP里http和https是完全不同的两个来源,所以也能触发CSP规则。
比如https://passport.baidu.com,这是百度的安全中心。当已登录用户访问的时候会跳转到“安全中心”首页http://passport.baidu.com/center(注意,此处是http):
![enter image description here](http://drops.javaweb.org/uploads/images/f281fb0b81f023bc01ad8764b6023a30fded5e11.jpg)
而未登录用户访问则会跳转到https://passport.baidu.com/v2/?login(这时候是https):
![enter image description here](http://drops.javaweb.org/uploads/images/560f2629c5f61a465dfd41e3f1bcaf8bac8d01cb.jpg)
虽然两个域名都是passport.baidu.com,但因为protocol不同,混用的http和https就能够影响CSP的拦截情况。
我们将CSP设置为img-src https://passport.baidu.com ,那么img的src就只接受来源为https://passport.baidu.com的img,那么已登录用户访问的http://passport.baidu.com/center就会被阻止,产生一个CSP报告。记录下这个报告,一样能判断访客是否已登录百度。
测试你是否登录百度:http://mhz.pw/game/detect/baidu/
0x05 影响及防范方法
============
* * *
严格来论,只是判断用户是否登录,这个问题并不算一个漏洞。当时@/fd将问题提交到推特之后推特的回应也是不算漏洞,但确实如果与其他一些漏洞结合使用,会让某些漏洞的成功率提高一大截。所以我们可以将之归为一个“奇技淫巧”。
这个问题更容易出现在一些大型网站、企业网络之中,往往这些网站的统一性和重用性都做的很好,所以往往登录入口只有一个(现在流行一个user center的概念),所以难免会出现一些跳转的问题。有这些跳转,就是探测用户登录的基础。
这个方法还有一个限制,就是用户使用的浏览器需要是现代浏览器,需要支持CSP安全策略。如果你要探测的用户还在用IE6~IE10,那么是肯定不行的。 如何解决这个问题?如果你真的觉得这是个安全问题的话,那么尽量避免跳转,或者使用javascript进行页面的跳转。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
新版现已发布,新增多项新功能及细节优化,欢迎体验
独家代码审计、凌风云自助获取、IP街道级定位等功能已上线
网络安全从拥有一个资源大全开始!
现在购买仅需99元一年!续费还享八折!
请登录后查看评论内容