漏洞概要
关注数(24)
关注此漏洞
漏洞标题:QQ空间某功能缺陷导致日志存储型XSS
相关厂商:腾讯
提交时间:2013-03-16 23:11
修复时间:2013-04-30 23:12
公开时间:2013-04-30 23:12
漏洞类型:xss跨站脚本攻击
危害等级:高
自评Rank:15
漏洞状态:厂商已经确认
Tags标签:
无
漏洞详情
披露状态:
2013-03-16: 细节已通知厂商并且等待厂商处理中
2013-03-18: 厂商已经确认,细节仅向厂商公开
2013-03-28: 细节向核心白帽子及相关领域专家公开
2013-04-07: 细节向普通白帽子公开
2013-04-17: 细节向实习白帽子公开
2013-04-30: 细节向公众公开
简要描述:
QQ空间日志某处功能缺陷,导致存储型XSS。
每次想去瞄一下QQ空间的时候,总能随手发现存储型XSS。
关键代码定位+调试 小教学贴。
详细说明:
1. QQ空间日志里面有一个魔方日志的功能。我们随便写一篇模仿日志。
2. 抓包,并且看发表日志后的内容。
这里值得我们注意的是,HTML中输出的日志内容是一个 img标签,如下图
而我们看到的日志中,则存在FLASH。
3. 从上面可以推出,这里必然会经过某些dom操作,从而将IMG标签转变为OBJECT标签。
我们先得到FLASH名称.
接着定位与这个魔方日志有关的功能代码。
-----------------------------分割线------------------
5. 好吧,其实以上都是废话,重点是下面的,
FLASH将我们带到了这个JS文件, 我们将 http://ctc.qzs.qq.com/qzone/app/blog/v6/script/content_gridsblog.js 美化一下,再看看代码。
发现FLASH的部分并没有我们可控的部分。但是可以定位代码下面这样一段代码。
GridsScheduler._showGridBlogShortcut();
-->
在 _showGridBlogShortcut 函数中,有
eval('var oGridInfo = ' + PageScheduler.blogInfo.getGridData());
6. PageScheduler.blogInfo.getGridData() 这个被eval的是什么数据呢?由于是iframe页面里的变量,直接控制台里没办法输出PageScheduler.blogInfo.getGridData, 我们可以采用“将网络JS映射至本地文件的方法”。
将映射到本地的JS文件里修改为
7. 接着我们刷新页面,重新打开日志。(* 由于_showGridBlogShortcut 函数中存在判断,必须以外人身份查看日志,才能触发。)
看到弹出的 PageScheduler.blogInfo.getGridData() 数据如下。
8. 而这个数据,我们是否可控呢?答案是,我们很有可能可控,因为这个数据,我们提交日志的时候,就存在,如下图:
9. 既然如此,我们将 gridJson这个字段,修改一下,加一段自己的JS代码。
10. 以自己号码查看测试号码的日志,成功执行代码
ie,chrome下均可。
漏洞证明:
修复方案:
不影响功能的前提下,对eval的数据有所判断或者过滤。
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2013-03-18 15:24
厂商回复:
非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。
最新状态:
暂无
漏洞评价:
评论
-
2013-03-16 23:15 |
鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)
-
2013-03-16 23:15 |
小胖子 ( 核心白帽子 | Rank:1727 漏洞数:140 | 如果大海能够带走我的矮丑...)
第一个来马克,你是我心中永远的二哥,有些屌丝是无法超越你的,哼!@s55i0n
-
2013-03-16 23:15 |
小胖胖要减肥 ( 普通白帽子 | Rank:686 漏洞数:101 )
-
2013-03-16 23:20 |
鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)
@小胖胖要减肥 G博士永远都是俺们心目中的一哥。金枪不倒。。。
-
2013-03-16 23:41 |
xsser ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)
-
2013-03-16 23:42 |
se55i0n ( 普通白帽子 | Rank:1567 漏洞数:173 )
@鬼魅羊羔 @小胖子 亲,我只是发个洞子嘛,,况且我是G牛的铁杆粉丝,,不多说啥子,,
-
2013-03-17 00:03 |
gainover ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)
-
2013-03-17 00:06 |
猥琐 ( 路人 | Rank:6 漏洞数:2 | 学习什么的最重要!)
@gainover 九妹照片 http://photo.icxo.com/201011/20101141156.jpg
-
2013-03-17 00:14 |
小胖子 ( 核心白帽子 | Rank:1727 漏洞数:140 | 如果大海能够带走我的矮丑...)
@se55i0n 逗你玩儿呢,小气鬼~你永远是我的好基友~
-
2013-03-17 00:30 |
鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)
-
2013-03-17 00:33 |
冻心 ( 路人 | Rank:5 漏洞数:3 | 爱wooyun 爱生活!)
-
2013-03-17 07:54 |
苏南同学 ( 实习白帽子 | Rank:41 漏洞数:5 | 苏南同学,就是苏南同学~~~)
-
2013-03-17 09:18 |
rasca1 ( 实习白帽子 | Rank:53 漏洞数:16 | 菜鸟一只)
-
2013-03-17 09:49 |
陈再胜 ( 普通白帽子 | Rank:121 漏洞数:13 | 微博收收听~~~●﹏●)
-
2013-03-22 14:09 |
none ( 实习白帽子 | Rank:40 漏洞数:5 | 十次十次啊 hack it then know more~)
-
2013-04-02 09:18 |
Defa ( 普通白帽子 | Rank:113 漏洞数:13 | <img src=1 onerror=alert(1)>)
-
2013-04-18 21:14 |
lucky ( 普通白帽子 | Rank:409 漏洞数:84 | 三人行必有我师焉########################...)
-
2013-04-23 21:04 |
th000 ( 路人 | Rank:8 漏洞数:3 | 安全初段~)
-
2013-05-21 20:07 |
lossite ( 路人 | Rank:20 漏洞数:2 | OK!)
@gainover 弱弱的问一句,为啥我必须加上属性才能执行,是不是我理解错了? eval('var x1='+ {"test":"(function(){alert(1)})()"}.test)
-
2013-05-22 10:05 |
gainover ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)
@lossite {"test":"(function(){alert(1)})()"}.test 的值实际上是字符串 "(function(){alert(1)})()", 与 'var x1=' 相加后,即为:var x1=(function(){alert(1)})() 然后 eval('var x1=(function(){alert(1)})() '); 执行代码。可能你想写的是下面的样子:eval('var x1={"test":(function(){alert(1)})()}');
-
2013-05-22 10:52 |
lossite ( 路人 | Rank:20 漏洞数:2 | OK!)
@gainover 多谢大牛,昨天测试的时候写成这个了,eval('var x1={"test":"(function(){alert(1)})()"}'); 多了两个引号。。。
-
2013-10-02 20:45 |
酷帥王子 ( 普通白帽子 | Rank:111 漏洞数:34 | 天朗日清,和风送闲,可叹那俊逸如我顾影自...)
-
2014-03-29 14:45 |
bitcoin ( 普通白帽子 | Rank:715 漏洞数:165 | 学习是最好的投资!)
-
2014-04-17 16:47 |
乌帽子 ( 路人 | Rank:29 漏洞数:3 | 学习黑客哪家强 | 中国山东找蓝翔 | sql...)