关闭

利用CSS注入(无iFrames)窃取CSRF令牌

时间: 2018-04-04阅读: 1123标签: 安全作者: 转载

css相信大家不会陌生,在百度百科中它的解释是一种用来表现html(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。那么,它仅仅只是一种用来表示样式的语言吗?当然不是!其实早在几年前,css就已被安全研究人员运用于渗透测试当中。这里有一篇文章就为我们详细介绍了一种,使用属性选择器和iFrame,并通过CSS注入来窃取敏感数据的方法。但由于该方法需要iFrame,而大多数主流站点都不允许该操作,因此这种攻击方法并不实用。

这里我将为大家详细介绍一种不需要iframe且只需10秒,就能为我们有效地窃取CSRF token的方法

一旦用户的CSRF token被窃取,由于受害者已经在攻击者的网站上,因此攻击者可以继续攻击并完成对用户的CSRF攻击操作。


背景

正如原文所描述的那样,CSS属性选择器开发者可以根据属性标签的值匹配子字符串来选择元素。 这些属性值选择器可以做以下操作:

  • 如果字符串以子字符串开头,则匹配

  • 如果字符串以子字符串结尾,则匹配

  • 如果字符串在任何地方包含子字符串,则匹配

属性选择器能让开发人员查询单个属性的页面html标记,并且匹配它们的值。一个实际的用例是将以“https://example.com”开头的所有href属性变为某种特定的颜色。

而在实际环境中,一些敏感信息会被存放在HTML标签内。在大多数情况下CSRF token都是以这种方式被存储的:即隐藏表单的属性值中。

这使得我们可以将CSS选择器与表单中的属性进行匹配,并根据表单是否与起始字符串匹配,加载一个外部资源,例如背景图片,来尝试猜测属性的起始字母。

通过这种方式,攻击者可以进行逐字猜解并最终获取到完整的敏感数值。

想要解决这个问题受害者可以在其服务器实施内容安全策略(CSP),防止攻击者从外部加载CSS代码


无 iFrames

要做到无iFrame,我将使用一种类似于之前我讨论过的方法:我将创建一个弹窗,然后在设置计时器后更改弹出窗口的位置。

使用这种方法,我仍然可以加载受害者的CSS,但我不再依赖于受害者是否允许iFrame。因为最初的弹出是通过用户事件触发的,所以我并没有被浏览器阻止。

为了强制重载,我在CSS注入间弹出一个虚拟窗口,如下:

640?wx_fmt=png

在CureSec的文章中描述了将数据传输到后端服务器,但由于CSRF是针对客户端的攻击,因此如果我们能想出一种不需要服务器的方法,那么就可以为我们节省大量的开销和简化我们的操作。

为了接收受害者客户端加载资源,我们可以利用Service Workers来拦截和读取请求数据。Service Workers目前只适用于同源请求,在我的演示中受害者和攻击者页面已处于同一源上。

不过不久后,chrome很可能会合并这个实验性的功能,允许Service Workers拦截跨域请求。

这样,就可以确保我们在客户端的攻击100%的执行,并强制用户在10秒内点击链接执行CSRF攻击,演示如下:


Demo

如上所述,因为我并不想运行一个web服务器,所以我使用service workers拦截和模拟服务器端组件。目前,该演示只适用于Chrome浏览器

首先,我创建了一个易受攻击的目标,它存在一个基于DOM的CSS注入漏洞,并在页面放置了一个敏感token。我还对脚本标签添加了一些保护措施,对左尖括号和右尖括号进行了编码。

640?wx_fmt=png

接下来,我们将强制加载受害者的CSS,并且使用上述方法,可一次窃取(猜解)一个敏感字符。

在接收端,我已经定义了一个拦截请求的service worker,并通过post-message将它们发送回域,然后我们将token存储在本地存储中以供后续使用。你也可以想象一个后端Web服务器,通过Web套接字或轮询将CSRF token回发给攻击者域。

目前该测试仅支持CHROME:https://security.love/cssInjection/attacker.html

如果你的浏览器支持的话,只需点击打开页面任意位置,你将看到CSRF token将逐一被猜解出来。


结语

有趣的是,反射型CSS注入实际上比存储型CSS注入更致命,因为存储型CSS注入需要一个服务器在受害者渲染之前来更新CSS。

一段时间以来,CSS注入在严重程度上来回变化。过去IE浏览器是允许用户在CSS中执行JavaScript代码的。这个演示也从某种程度上表明了CSS注入,以及在你的域上渲染不受信任的CSS仍会导致严重的安全问题。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/589

关闭

什么是SSL证书?SSL证书的好处

互联网发展至今,已经让人们对它产生了很大的依赖,很多交易都是在网上进行的。然而,网络攻击事件也在与日俱增,网络安全已经成为一件大事,这就不得不用到SSL证书了。

HTTPS为什么是安全的?

超文本传输协议HTTP被用于在web浏览器和网站服务器之间传递信息,但以明文方式发送内容,被攻击者截取就可以直接读取内容信息,不适合传输敏感信息。为解决这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS

浏览器显示“网站连接不安全”,是什么原因?

Chrome 浏览器显示“网站连接不安全”,这可能是您最近访问网站时经常遇到的问题,浏览器地址栏中域名前面显示圆圈i图标和“不安全”字样,点击这个字样,就会看到红字警告“你与此网站之间建立的连接不安全”,这是怎么回事?

贯彻 10 项原则,构建 Linux 系统安全体系

通过大量的实践经验,我们总结出 10 个最关键且有效的安全原则,分别是纵深防御、运用 PDCA 模型、最小权限法则、白名单机制、安全的失败、避免通过隐藏来实现安全、入侵检测、不要信任基础设施

网络安全的新方向_边缘计算

分布式、无所不在的计算基础设施可能以更大的攻击面为代价。通过采用边缘计算,公司将一些处理转移到外围,更靠近需要工作的地方,以提高性能、减少网络流量和减少延迟。这带来了一系列网络安全挑战,常规数据中心运营商可能无法应对。

网站被劫持的方式都有哪些?

网络安全日益严峻,站长朋友们多多少少都遇到过被黑被劫持的经历,对于老老实实做人,认认真真做站的朋友来说,好不容易做出了一点成绩,一劫持就又回到解放前了,本期我们一起来探讨常见的网站被黑被劫持的手段有哪些

常见的网站安全问题

在网站正式上线之前,你有没有想过自己的网站是否安全吗?尽管你的网站用了很多高大上的技术,但是如果网站的安全性不足,无法保护网站的数据,甚至成为恶意程序的寄生温床,那前面堆砌了再多的美好也都成了枉然

js安全问题:不安全的JS

在某些特别的场景下,我们需要编译执行外部输入的JS代码。在浏览器端,我们可以借助new Function 、eval等API。而在 node 端,我们可以借助vm模块实现一个沙箱,运行外部输入的JS 代码。但无论是浏览器端,还是node端

Web安全测试检查单

Web安全测试检查单。上传功能:绕过文件上传检查功能,上传文件大小和次数限制。注册功能:注册请求是否安全传输,注册时密码复杂度是否后台检验,激活链接测试

Web前端安全同样不可忽视,编写前端代码时保持安全意识

随着网络的普及,黑客进行网络攻击的手段越来也多,越来越复杂。前端的HTML、JavaScript、CSS、Flash等技术变成了前端攻击者和开发者的战场,网站安全问题也开始向前端倾斜。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!