发布:2022年6月14日,14:00 UTC
更新:2022年6月14日,14:00 UTC
我们的网beplay体育能用吗络安全学院有一个主题悬空的标记注射- 一种利用受保护地点的技术CSP。但是,当我们来更新Chrome 97时,发生了一些有趣的事情 - 因为我们的一个互动实验室神秘地停止了工作。当我们最初制作该实验室时,Chrome通过寻找原始的空格,然后是“ <”字符来防止基于标记的攻击 - 但忘记了防止背景属性(如Masato Kinugawa)。
不幸的是,从Chrome 97中,这项技术不再起作用,因此我的任务是尝试找到另一种选择。我尝试了许多不同的属性和基于CSS的动画来延迟作业以尝试绕过此保护。他们都失败了 - 似乎力量很强迈克·韦斯特,撰写了这一变化。
我退后一步,分析了CSP:
default-src'self'; object-src'none';style-src'self';Script-Src'self';img-src *;
这看起来是水密的,就在(除了IMG-SRC之外)吗?如果我告诉您您可以删除“ IMG-SRC”指令,但仍然在不单击的情况下仍进行悬空的标记攻击怎么办?让我们看看如何...
首先,我开火了黑客检查员这是一个以安全性的枚举器,我在一段时间后进行了编码,并开始剖析iFrames的内部工作。检查员方便测试多个域的跨域泄漏。我添加了首先在该实例内,我添加了另一个iframe:
然后,我从父母那里检查了跨域窗口,并使用以下输入:
X.ContentWindow
令我惊讶的是,检查员将iframe的名称显示为“测试” - 这里发生了什么?好吧,检查员尝试了一些已知的属性 - 其中之一是“测试”。但这意味着跨域iframe可以发现iframe名称属性。我做了一些测试,看来您无法列举框架名称的iframe,但是您可以使用TypeOf来确定该名称是否存在。例如,您可以在任何跨域iframe的名称属性上询问是/否问题:
if(typeof x.contentwindow.mywinname ==='对象'){
//存在窗口名称
} 别的 {
//窗口名称不存在
}
这很好,但并没有真正帮助我绕过CSP。试图蛮力a是没有用的CSRF令牌问是 /否问题。检查跨域iframe的各种属性,我尝试更改值 - 将iframe的位置更改为:空白。令我惊讶的是,即使这是跨域,Chrome也允许它:
X.ContentWindow [0] .Location ='of:blank'
不仅如此,而且整个窗口都可以枚举位置。屈服者
- 泄漏了外部域。但是我真正感兴趣的是窗口。名称以及是否可以阅读。果然,窗口名称是可读且可写的 - 您甚至可以执行JavaScript,无论父母页面的CSP如何。似乎发生的事情是,当您将其分配给大约:空白的iframe所有权更改为设置它的域。
最后,这是解决实验室的利用: