利用Chrome新HTML弹窗功能挖掘隐藏输入框与Meta标签中的XSS漏洞

本文详细解析如何利用Chrome新增的HTML弹窗功能,通过popover属性与onbeforetoggle事件触发隐藏输入框和meta标签中的XSS漏洞,突破传统WAF防护与事件限制,包含实际攻击案例与技术细节。

利用隐藏输入框和Meta标签中的XSS漏洞 | PortSwigger研究

Gareth Heyes
研究员
@garethheyes

发布时间: 2023年7月11日 13:00 UTC
更新时间: 2023年7月11日 13:00 UTC

本文将展示如何(滥)用Chrome的新HTML弹窗功能来利用meta标签和隐藏输入框中的XSS漏洞。

一切始于我在Twitter上注意到Chrome的新弹窗行为。我们都知道那些烦人的模态对话框总是催促你订阅新闻稿——现在你无需JavaScript就能创建这些弹窗!哦,真是“喜悦”啊。这将是一场新闻稿的“末日”。

无论如何,我注意到了这个功能,并想知道这些弹窗引入了哪些JavaScript事件。果然,你可以使用ontoggleonbeforetoggle事件,这些事件适用于弹窗目标——即具有popover属性的元素。该属性使元素不可见,直到你通过使用popovertarget属性(例如在按钮元素上)来切换元素。

这对于绕过WAF非常有用,因为你可以使用onbeforetoggle事件,该事件不太可能被基于属性的阻止列表拦截:

1
2
<button popovertarget="xss">Click me</button>
<div id="xss" popover onbeforetoggle=alert(1)>XSS</div>

在上面的示例中,你可以看到按钮元素使用popovertarget定位自定义的“xss”元素。当按钮被点击时,onbeforetoggle事件将被触发。

隐藏输入框中的XSS

我像往常一样在Twitter上发布了这个发现,Mario Heiderich指出它甚至适用于隐藏输入框。这很重要,因为通常如果你在隐藏输入框中有XSS,可能很难利用,因为大多数事件不会生效。你可以使用访问键,但这需要大量的用户交互。然而,使用弹窗允许你在隐藏输入框中使用新事件:

1
2
<input type="hidden" id="xss" popover onbeforetoggle=alert(1)>
<button popovertarget="xss">Click me</button>

Mario提到这需要两个注入点:一个经过清理的无害HTML注入,另一个在隐藏输入框内。但这让我思考——也许你只需要一个。我启动了一个HTML页面并测试了两个元素具有相同id时会发生什么。假设一个网站包含使用popovertarget属性的代码,并且在隐藏输入框中存在XSS漏洞:

1
2
3
4
<button popovertarget="newsletter">Subscribe</button>
<div id="newsletter" popover>Subscribe to our newsletter</div>
<!-- 我们的注入 -->
<input type="hidden" id="newsletter" popover onbeforetoggle=alert(1)>

我们的注入代码将在隐藏输入框中执行onbeforetoggle事件,因为它首先出现。这意味着你只需要一个注入点,只要它出现在任何现有弹窗之前。弹窗将允许你通过点击触发隐藏输入框中的ontoggleonbeforetoggle事件。因此,如果你在隐藏输入框中有XSS,并且页面上有现有的弹窗元素,这将非常有用。

Meta标签中的XSS

现在事情已经变得相当有趣,但等等,还有更多!Mathias Karlsson提出了一个很好的观点;这种技术允许你在meta元素上使用onbeforetoggle事件,只要存在现有的弹窗元素。这很重要,因为与隐藏输入框类似,meta元素受到严格限制。

在下面的示例中,你在meta元素内有一个注入,该元素使用popover属性和重复的id(newsletter),以定位页面上的现有弹窗:

1
2
3
4
<button popovertarget="newsletter">Subscribe</button>
<div id="newsletter" popover>Subscribe to our newsletter</div>
<!-- 我们的注入 -->
<meta id="newsletter" popover onbeforetoggle=alert(1)>

当用户尝试订阅新闻稿时,他们将改为触发隐藏输入框上的onbeforetoggle事件。

一如既往,我们已经更新了XSS备忘单以包含这些新向量。如果你喜欢XSS过滤器绕过,你可能会喜欢我们的Web Security Academy实验室,例如利用链接标签中的XSS和这个过滤大多数HTML标签的实验室。

享受吧!

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计