是否可以将 HTML 注入图像以引发 XSS?

信息安全 Web应用程序 开发 xss 上传文件
2021-08-10 11:48:03

一些答案提到有可能将攻击者控制的 HTML注入到图像中,从而引发 XSS。

我猜只有当浏览器中存在漏洞时,浏览器才会处理这个 HTML。所以我认为这更像是一个浏览器问题,不需要转换这些图像,剥离 EXIF 元数据,在 web 应用程序端随机化它们。

攻击者是否能够将 HTML 注入到会引发 XSS 的图像中?如果是,如何?

3个回答

我很确定bstpierre说的是一种情况,您可以让用户上传图像以显示在画廊中,此外您还可以显示从 EXIF 标签中获取的有关该图像的元数据。如果 EXIF 标记是用恶意 html 标记专门构造的,并且没有输入卫生(例如,转义字符,如<, >&因此它们在页面中呈现为&lt; &gt;, &amp),您可以想象将它们用于 XSS 攻击。同样,如果您的 Web 应用程序清理所有用户输入,包括从图像文件中提取的标签,这不是问题。

bobince正在谈论一些完全不同的事情。最接近的是有人上传了一个文件——比如 fake_image.jpg,但内容实际上是一个 html 文件,而不是图像。内容嗅探是指某些浏览器,当你点击打开一个页面http://example.com/fake_image.jpg时,会发现 fake_image.jpg 不是图像而是一个 html 文件,并且会显示 html文件中的页面。因此,上传的 html 文件(带有图像文件名)可用于 XSS 攻击。要使这种攻击有用,您必须有一个允许这种内容嗅探的浏览器,然后您必须转到图像的 URL(不仅仅是<img src='fake_image.jpg'>嵌入在页面中)。

HTML 中的内联 SVG 可以包含事件处理程序和 SVG 脚本节点。因此,如果我可以为您的页面指定要加载的 SVG 图像,并让您将其内联到页面中,那么我可以通过该图像注入脚本。

HTML5 规范

出于本规范中内容模型的目的,SVG 命名空间中的svg元素属于嵌入内容、短语内容和流内容类别。

...

SVG 元素的语义由 SVG 规范和其他适用规范定义。[SVG]

Mario Heiderich利用 Opera 中关于 SVG 内容应该在哪个域中运行的混淆来创建一个图像,当加载时跨域攻击各个层并最终调用他的电话。

包起来

  • SVG 不仅是图像,而且是迷你应用程序
  • 标签现在可以部署 Java、PDF 和 Flash – 并在 Skype 上给您打电话
  • 内嵌 SVG 创建了小的 XML 岛,支持对 HTML 网站进行 XML 攻击
  • SVG 和 XSLT 也可以工作,支持 DoS 和其他攻击
  • Web 安全和 XML 安全,他们又见面了!
  • XXE 又回来了——还记得 2002 年的公告吗?
  • SVG 在安全社区中没有得到足够的关注
  • SVG 为更多的安全研究提供了很大的空间

在较早的幻灯片中,Mario 专门讨论了 XSS 以及下载 SVG 文件以在本地运行的问题和注释

  • 允许上传 SVG == 允许上传 HTML

可以编写多语言文件——在多种语言中有效的文件,例如既是HTML 页面又是 JPEG 图像 GIF 和 JavaScript 程序的文件第二页解释说:

上图是一个完全有效的 GIF 文件,就像它是一个完全有效的 javascript 程序一样(事实上——它甚至是一个有效的 Caja 程序!)。图像标记期望其 src 属性指向正确解析为图像的内容,就像脚本标记期望其 src 属性指向 javascript 文件一样。该标签指定了一个上下文,在该上下文中需要特定类型的内容。如果浏览器用来呈现内容的唯一信息是周围标签为其创建的上下文,那么事情就很简单了。但是浏览器世界中的事情从来都不是简单的。当服务器发送文件时,它还会在 Content-Type 标头中发送该文件的 MIME 类型。当服务器断言的 Content-Type 与使用该内容的预期上下文一致时,一切都很好。当服务器不发送 Content-Type 时会发生什么?如果发送了具有一种 Content-Type 的文件而需要另一种类型,会发生什么情况?

...

浏览器执行内容嗅探表面上是为了可用性,因此即使配置不当的服务器也可以继续“工作”。这里的问题是浏览器为不同类型的内容提供不同的访问量。如果您可以欺骗浏览器,使其认为一种类型的内容实际上是另一种类型的内容,您就可以绕过对实际内容访问的限制。例如,允许 HTML 页面加载外部图像、样式表和脚本。在这种情况下,这些资源在其中执行的安全上下文来自嵌入这些资源的页面的 URL。另一方面,如果正在加载的内容类型是 Flash 或 Java 小程序,则安全上下文来自小程序对象本身的 URL。如果浏览器使用启发式算法并在 Flash 对象和图像之间混淆,有真正的安全隐患!正是这种混乱是 GIFAR 攻击的根源。