大众点评selfxss结合两个csrf变废为宝(已修复,故公开,不涉及真实参数)

大众点评selfxss结合两个csrf变废为宝

漏洞不值钱,但还是蛮好玩的

漏洞信息

类型:存储型xss
场景:收藏商户后,去已收藏的商户列表可以给指定商户添加tag(与下文html标签区别)
漏洞限制:
1.selfxss,即需要用户自己登录账号,然后自己输入payload。。。绕过思路当然是csrf了
2.有waf拦截,绕过思路就是各种换标签换属性换事件尝试咯
3.单个tag字数不能10个字符,多个tag空格隔开,一次最多5个tag

突破selfxss

这里没什么好说的,找到添tag的接口:

http://www.dianping.com/addtag.do?tags={xsspayload}&shopid=12345  

但是这里有个小问题,如果用户并没有收藏12345这个商户,添加tag是无意义的,因此需要再找一个添加指定商户的csrf,碰巧也是存在的:

http://www.dianping.com/addsh.do?shopid=12345  

绕过waf

发现xss是因为我输入了一个<input>标签被解析,但是只要标签有其他属性就会被拦截,类似下面这样的都不可以
<标签名称 属性名称="属性值" on事件="执行函数">
但是只要不输入尖括号,就不被拦截
能不能不适用尖括号呢?
还真可以———标签输入栏本身就是一个 <input>标签!

<input name="tag" value="tag1 tag2 tag3 tag4 tag5">

因此可以在标签内闭合即可,我输入"onclick="alert(),就变成

<input name="tag" value=""onclick="alert()">

绕过tag长度限制

其实上一步的palyload是无法保存的,因为单个tag最多只能10个字符,因此需要把payload拆分成至多5份,每份字符不大于10个,中间用空格(%20)隔开,如果想弹出cookie,原始payload如下:

"onclick="alert(document.cookie)

下面是拆分思路:

"onclick= "alert(document.cookie)
"onclick= "alert (document.cookie)

到这步,document.cookie怎么拆,坑爹啊!这样拆↓

document ['cookie']

最终payload如下:

"onclick= "a= document ['cookie'] ;alert(a)

其实到这一步,仍然不能做太多的事情,顶多就是在用户收藏里面插入一些短标签或者执行一些简单函数,但是至少已经不是一个selfxss了!

猜你喜欢

转载自www.cnblogs.com/mkdd/p/10130295.html