图像 alt 属性中存储的 XSS 漏洞以窃取 cookie

2022-01-15 23:52:14 浏览数 (1)

览这个 Web 应用程序的目的是寻找错误,但我在这个过程中很早就开始了,只是想了解一下这个应用程序是如何工作的。

在这样做的同时,我仍然喜欢关注一两个漏洞类型,以考虑我可以在哪里测试漏洞。我的主要目标是 XSS,所以当我处理应用程序的流程时,我喜欢在用户输入字段或其他区域中添加 XSS 有效负载,然后在我完成其余部分时留意发生的任何有趣的事情应用程序的流程。

很多时候,一事无成。但有时,会发生一些有趣的事情,我们可以仔细看看。

这次发生了后者,因为我开始注意到我的一些 XSS 有效负载在应用程序的不同部分以及在同一网页的不同部分中的处理方式不同,但在相似的上下文中。

例如,我可能会在网页的左上角看到完整的有效负载作为常规文本输出(例如页面标题),但随后部分有效负载将在同一页面的另一部分中被剥离。除了,当我检查显示这些有效负载的上下文时,它们是相同的。

XSS 上下文:攻击者控制的数据出现的位置即:HTML 上下文、属性上下文、JavaScript 上下文、URL 上下文。

所以你可能在网页上有这样的东西:

代码语言:javascript复制
<h1><img src=1 onerror=alert(1)<h1>

正确<img src=1 onerror=alert(1)显示为文本而不是创建 HTML 元素的位置。

但是,在页面的更远处,相同的数据显示如下:

代码语言:javascript复制
<div><(1)<div>

在那里,img src=1 onerror=alert正在被剥离。

两者都显示在相同的上下文中:在 HTML 标记之间。但是应用程序并没有以相同的方式处理它们。这种不一致让我好奇地继续检查我可以注入 XSS 有效负载的其他上下文和其他区域,看看我是否会导致更奇怪的行为。

突破 HTML 属性

大约一个小时后,我注意到我的一个有效负载正在逃逸出 HTMLalt属性。我正在导航到一个页面,我再次注意到两个区域处理有效负载的方式不同。为了查看是否发生了任何事情,我右键单击了其中一个无效的有效负载并检查了该元素。

我的 DevTools 一打开,我的眼睛就看到了一个看起来很奇怪的alt属性。

我的有效负载被添加到alt页面上图像的属性中,直到我查看源代码才可见。除了这一次,我的有效负载正在关闭alt图像的属性并创建一个单独的onload属性。

至此,狩猎开始。这对赏金猎人来说是一个非常好的信号,而对于应用程序来说是一个非常糟糕的信号,因为这意味着我的输入能够脱离上下文并且我能够创建新的 HTML 属性等等……他们没有处理为这个 HTML 属性上下文正确准备用户输入,这使得它容易受到攻击。

找到成功的有效载荷

现在我找到了一个入口点,只需找到一个成功的有效载荷,它会做一些有用的事情来展示影响。

我扔给它的一些有效载荷被剥离了。例如:

代码语言:javascript复制
Payload: "></div><a href=javaSCRIPT&colon;alert(/XSS/)>XSS</a>
Result: <a href="javaSCRIPT&amp;colon;alert(/XSS/)">XSS</a>

Payload: "></div><a href=javaSCRIPT:alert(/XSS/)>XSS</a>
Result: <a>XSS</a>

Payload: "/><svg/on<script>load=prompt(document.cookie);>"/>
Result: "/>load=prompt(document.cookie);>"代码语言: PHP  ( php )

所以显然有某种类型的过滤正在进行,但绝对不够。最后,只需要:

代码语言:javascript复制
'" onload="window.alert?.(document.cookie)"

影响

这种基本攻击的影响可能非常高。这样做的一个原因是因为一旦发布,这将是一个可供搜索引擎抓取并可以链接到任何人的公共页面。这意味着我可以潜在地窃取每个访问者的 cookie,而无需制作任何特殊的 URL,只需让某人自然地访问该页面或将其链接到该页面即可。

显然,这个有效载荷只是弹出一个警告框,它会通知访问者出现问题并且对攻击者没有任何用处,但是可以将不同的有效载荷设计为离散的,并且可能再次将这些 cookie 发送到受控服务器,或尝试其他类型的攻击。

该应用程序的开发人员所做的一件好事是向该特定字段添加字符数限制,这将使制作更有用的有效载荷比不制作更烦人。但是,鉴于这种情况,这只会减慢某人的速度,并且可能不会完全阻止他们。我这么说是因为如果我在玩了一个小时后就在那里发现了一个 XSS 漏洞,那么我很有可能会在其他地方找到其他漏洞。其他人可能没有相同的字符限制,或者我可以将它们链接在一起。

0 人点赞