keac's Bolg.

一枚阿里巴巴主站XSS挖掘之旅

字数统计: 627阅读时长: 2 min
2019/12/20 Share

不得不说,Xray是真的牛皮,试下扫描器随手扫个 alibaba.com 扫出一个主站的反射型XSS漏洞,于是有了下文。提交了ASRC,判为重复漏洞,可惜了。(漏洞修复真慢,等了一个星期多才修)

漏洞分析

漏洞就存在搜索处

https://www.alibaba.com/trade/search?CatId=</sCrIpT><img src=1234 >&IndexArea=product_en&SearchText=gunkit-JZpTT&fsb=y

对搜索的参数 CatId 没有过滤,payload 为 ?CatId=</sCrIpT><img src=1234 >

xss

可以在源码中看到,搜索参数被放在catidl里面,而没有进行任何的标签转义,导致了XSS。

xss

绕过WAF弹窗

只能插入一个图片并不能造成很大的危害,来想办法弹个窗出来。

尝试payload </sCrIpT><img src=1234 onerror="alert(1)" >

xss

发现使用其他方式都无法顺利弹窗,WAF对单标签</script>没有拦截,但只要一闭合就拦截。

程序也没有对 CatId 参数进行过滤转义,直接” 就可以截断字符,显示异常。

并且只要有 alert() onerror=这种特征的时候会直接拦截。

首先的思路是先从HTML标签入手弹窗,但是基本所有payload 都会被waf拦截,尝试直接截断方法来构造自己的函数,发现只要一注释掉下面的代码进行闭合就会弹404,怀疑是修改上面的代码导致整个代码逻辑函数出现了点问题,所以跳转404了。

尝试了各种骚payload,结合了下js手册进行尝试,发现waf并没有对replace()函数进行拦截。

按照手册提供的语法'<string>'.replace(/<pattern>/,function($1) { <code> } )构造payload。

Payload 效果
'alert("xss")'.replace(/.*/g,eval) eval('alert("xss")')
'str1ng'.replace(/1/,alert) alert(1)
'bbbalert(1)cccc'.replace(/a\w{4}\(\d\)/,eval) eval('alert(1)')

首先我们来看看源码

xss

设置传入参数为 str1ng,程序并没有对 " 进行转义,所以直接截断 构造出str1ng".replace(/1/,alert) ,当然这样还不能运行,后面还有一个双引号,用//注释掉,当我们注释掉了后面一个引号,也注释掉了最后一个,所以构造一个“,”让语句完整

xss

最终构造payload 为 str1ng".replace(/1/,alert),//

xss

试一下成功弹了一个 1

xss

ASRC

xss

漏洞重复 2333 有点可惜,也可以吹波逼了哈哈哈

xss

CATALOG
  1. 1. 漏洞分析
  2. 2. 绕过WAF弹窗
  3. 3. ASRC