QQ空间某功能缺陷导致日志存储型XSS – 4

漏洞概要

缺陷编号:WooYun-2013-020277

漏洞标题:QQ空间某功能缺陷导致日志存储型XSS - 4

相关厂商:腾讯

漏洞作者:gainover

提交时间:2013-03-18 21:24

公开时间:2013-05-02 21:25

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

Tags标签:

漏洞详情

披露状态:

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

简要描述:

依然是某处功能缺陷,加上开发人员犯了某种古老的过滤错误导致我不好意思的又来了。

详细说明:

1. 模板日志,看到有这么一个播放器,在播放器里加一首歌,随便发个日志,同时抓包。

2. 我们搜索 MusicPlayer.swf, 可以定位到 http://ctc.qzs.qq.com/qzone/app/blog/v6/script/content_templateblog_parser.js看下日志源代码,我们可以看到这里实际上是一个 <div data="xxxxx" name="xxxxx"></div>

这个可以给我们在定位代码的时候有所启示。 搜索 "data" 或 'data'

可以看到Music.Parser调用了 data 属性里的数据并返回,3. 那么哪里调用了 Music.Parser呢?搜索 "Music.Parser("

可以看到,数据进一步到了 TemplateBlogParser.music4. 接着 TemplateBlogParser.music 被哪里用到了呢?

可以看到数据进一步到了aData.content5. 稍微继续往下看,可以看到 aData进入了一处 eval, 不过这里eval处是无法利用的。

如上图,这里的代码相当于是执行了aObj=new MusicPlayer(itemId,aData);6. 进一步跟踪,找到MusicPlayer对象的定义。搜索 "function MusicPlayer"找到MusicPlayer后,我们观察它的第2个参数(即data)的流向。

可以看到,data.content 进入了 this.data.content。7. 继续往下面代码看。

接着this.data.content进入了 this.convertKorean() 函数,看样子是做了一次转换。8. 我们进而看看,this.convertKorean 函数对数据进行了什么处理。

看到这段代码,顿时觉得有戏!!我们的str被传入到了 div.innerHTML中。这段代码的功能,实际上是去掉 str中的 html标签,然而这段代码实际上是犯了一个很经典的"过滤错误",开发人员建立一个临时的div,然后取出innerText/textContent。但是实际上无论 div 是否被追加到DOM中,innerHTML="<img src=1 onerror=alert(1)>" 都是会被执行的。9. 这里一来,我们回溯回去,我们的str实际上就是来自于我们最初的 data中的值。接下来的就好办啦!我们找到最开始抓到的数据,修改并发包。<div><div name="title">xxxxxxxxxxx</div><div name="text"><br />x<br />xxxxxxx</div><img name="pic" position="0_-7" isDefaultPhoto="1" rotation="0" scale="0" src="http://ctc.qzs.qq.com/qzone/space_item/orig/3/87731/module_1.jpg" /><div name="title">xxxxxx</div><div name="title">xxxx</div><div name="title">xxxx</div><div name="MultiImageController" data=""></div><div name="music" data="http://stream16.qqmusic.qq.com/31303066.mp3|<img src=1 onerror=&quot;alert(document.cookie)&quot;>|A-Ha|0"></div></div>11. 可以看到成功弹出cookies

IE下一样。

漏洞证明:

见详细说明

修复方案:

数据进入 this.convertKorean 之前,或者从 getAttribute("data") 取出数据之后,对数据进行 HTMLEncode.

漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-03-19 10:51

厂商回复:

非常感谢您的报告。这个问题我们已经确认,正在与业务部门进行沟通制定解决方案。如有任何新的进展我们将会及时同步。

最新状态:

暂无

评价

  1. 2010-01-01 00:00 Rookie 白帽子 | Rank:241 漏洞数:48)

    二哥就是二哥 每个月都要来几次

  2. 2010-01-01 00:00 小胖子 白帽子 | Rank:1429 漏洞数:107)

    二哥真的怒了!!!!!

  3. 2010-01-01 00:00 cnrstar 白帽子 | Rank:136 漏洞数:18)

    逆天了!

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

    靠,为毛我们再找也找不到,差距啊,,

  5. 2010-01-01 00:00 鬼魅羊羔 白帽子 | Rank:274 漏洞数:36)

    @gainover 你知道我想表达啥不?

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

    你想和他搞基,很明显了

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

    @鬼魅羊羔 二哥是骨干美

  8. 2010-01-01 00:00 鬼魅羊羔 白帽子 | Rank:274 漏洞数:36)

    @se55i0n 我喜欢瘦的,哈哈

  9. 2010-01-01 00:00 心伤的瘦子 白帽子 | Rank:147 漏洞数:21)

    二哥你好,二哥再见

  10. 2010-01-01 00:00 鬼魅羊羔 白帽子 | Rank:274 漏洞数:36)

    @心伤的瘦子 说!你把胖子怎么了!?

  11. 2010-01-01 00:00 Metasploit 白帽子 | Rank:32 漏洞数:5)

    连载

  12. 2010-01-01 00:00 El4pse 白帽子 | Rank:29 漏洞数:7)

    你又调皮了。。好一整子没见着你了

  13. 2010-01-01 00:00 心伤的瘦子 白帽子 | Rank:147 漏洞数:21)

    @鬼魅羊羔 瘦子来崇拜你们了,还需要胖子吗

  14. 2010-01-01 00:00 小胖子 白帽子 | Rank:1429 漏洞数:107)

    @心伤的瘦子 还需要更胖的吗?

  15. 2010-01-01 00:00 lucky 白帽子 | Rank:316 漏洞数:40)

    学习了!二哥大作!

  16. 2010-01-01 00:00 廷廷 白帽子 | Rank:0 漏洞数:0)

    二哥这量不少啊,月月轻松