一个网站图标引发的血案!绕过同源策略,判断你是否登录了某网站

Posted wwlww

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个网站图标引发的血案!绕过同源策略,判断你是否登录了某网站相关的知识,希望对你有一定的参考价值。

一个网站图标引发的血案!绕过同源策略,判断你是否登录了某网站

技术分享图片

前言

我要告诉大家的是,在没有得到你同意的情况下,目前大多数主流的网络平台都会泄漏你的登录状态。无论你当前是否进行了登录操作,攻击者都可以检测到你电脑登录了那些网络平台。而且目前有很多平台可以提供人口统计以及个性分析之类的服务,所以攻击者也可以就此推测出你的人物特性。

演示站点:【点我访问

技术分享图片

技术分析

对于绝大多数的平台而言,它们都可以利用登录机制来检测用户是否登录了自己的网络服务。虽然这个漏洞已经存在多年了,而且这也是一个众所周知的漏洞,但是目前大多数公司似乎并不打算去修复它。

需要注意的是,这个漏洞的利用方法非常简单,而且修复这个漏洞也十分容易。接下来,我会以facebook.com为例子来给大家介绍这项技术的工作原理。

登录重定向机制是如何工作的?

首先,我们要了解什么是登录重定向机制。假设你已经登录并正在访问https://www.facebook.com/bookmarks/pages这个页面。

现在,在一个单独的网页标签中访问这个URL地址,此时你在这个网页标签中并没有进行登录操作,因此你会被下面这个URL地址重定向至网站服务的登录页面:

 

https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages

 

请注意上述URL地址中的next参数,该参数的值如下:

 

https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages

 

我们就是从该参数中的这个地址跳转过来的,当我们完成了登录操作之后,上面的这个URL会将我们重定向至之前我们所要访问的那个页面。

如果我们现在已经登录了,那么在一个新的浏览器页面标签下访问这个URL地址(https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Fbookmarks%2Fpages),那么浏览器会直接将我们定向至这个页面。所以我们可以得出结论:

1.  如果你已经登录了:URL将返回next参数中的地址;

2.  如果你没有登录:URL将返回网站服务的登录页面;

绕过同源策略

这个URL地址有什么用呢?同源策略可以防止我们从除了https://facebook.com之外的其他域读取这个请求所返回的结果。

同源策略对于html页面来说是非常严格的,但是它允许我们从其他域接收图片资源。所以,如果next参数中的资源是图片资源的话,我们就可以从自己的网站来读取这部分数据了。Facebook只会检测URL地址中next参数的值是否以https://facebook.com开头,所以我们只需要在Facebook的网站中找一张图片文件就可以了。这应该没什么困难吧?其实,这确实有点难!因为Facebook网站中的图片全部托管在域名fbcdn.net。但是还有一张图片几乎是所有Web服务器中都会有的,那就是favicon.ico!

下面给出的就是将网站图标作为next参数时的URL地址:

 

https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico

 

这是一个非常有意思的URL地址:

1.  如果你已经登录了:URL将返回网站图标;

2.  如果你没有登录:URL将返回网站服务的登录页面;

我们可以在自己网站中的某个<img>标签内使用这个URL地址:

 

<imgsrc="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">

 

这个<img>标签的属性如下:

1.  如果你已经登录了:你将会接收到网站图标,HTML页面会自动加载这个图片资源,并自动触发onLoad回调事件;

2.  如果你没有登录:你将会接收到网站的登录页面,图标资源会加载失败,并自动触发onError回调事件;

最终的漏洞利用代码如下所示:

 

<img onload="alert(‘logged in to fb‘)"onerror="alert(‘not logged in to fb‘)"src="https://www.facebook.com/login.php?next=https%3A%2F%2Fwww.facebook.com%2Ffavicon.ico">

 

其他平台

这项技术适用于目前绝大多数主流的网络平台,因为很多服务提供商在他们的登录地址中都添加了重定向参数,而且他们也需要在主机中托管网站的图标资源。

更新信息

2016/10/07:Instagram移除了网站根目录下的图标文件,并将其转移至了他们的CDN中。

2016/10/14:Stackoverflow已经修复了这个问题。

2016/10/14:火狐浏览器似乎也修复了这个问题。因为当我们使用新版火狐浏览器访问测试页面时,我们接收到了如下图所示的错误信息:

技术分享图片

2016/10/14:Netflix通过将页面重定向至网站主页面以修复这个问题。

这项技术的可利用性和缓解方案

攻击者还可以在去匿名化技术、点击劫持攻击和网络钓鱼攻击中使用这项技术。这样一来,将会给用户带来更大的损失。

因此,为了缓解这个问题所带来的影响,首先就是要禁用所有的第三方cookie。除此之外,你也可以安装类似Privacy Badger和uMatrix这样的浏览器插件来保护你免受此类攻击。

总结

如果你发现还有其他的网站有可能受到这种攻击技术的影响,请你赶快将它们公布出来。我们要向这些平台施加压力,如果这个问题越来越严重,而且越来越多的网站会受此影响的话,也许有一天他们会去修复这个问题的。 

以上是关于一个网站图标引发的血案!绕过同源策略,判断你是否登录了某网站的主要内容,如果未能解决你的问题,请参考以下文章

由一段代码引发的血案,md5绕过,foreach,php伪协议

异步处理ServletRequest引发的血案

异步处理ServletRequest引发的血案

ps引发的血案

Android WebView File域同源策略绕过漏洞浅析

同源策略引发的跨域问题它都能轻松解决!这到底是什么神奇的东西儿