当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-020277

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

相关厂商:腾讯

漏洞作者: gainover

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

修复时间:2013-05-02 21:25

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

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

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

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

详细说明:

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

1.jpg


2.jpg


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

4.jpg


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

3.jpg


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

5.jpg


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

6.jpg


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

7.jpg


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

8.jpg


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

9.jpg


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

this.convertKorean = function(str) {
var div = document.createElement("div");
div.innerHTML = str;
str = div.innerText || div.textContent;
return str;
};


看到这段代码,顿时觉得有戏!!我们的str被传入到了 div.innerHTML中。
这段代码的功能,实际上是去掉 str中的 html标签,
然而这段代码实际上是犯了一个很经典的"过滤错误",开发人员建立一个临时的div,然后取出innerText/textContent。但是实际上无论 div 是否被追加到DOM中,innerHTML="<img src=1 onerror=alert(1)>" 都是会被执行的。
9. 这里一来,我们回溯回去,我们的str实际上就是来自于我们最初的 data中的值。
接下来的就好办啦!我们找到最开始抓到的数据,修改并发包。
<div class="blog_details_20120222"><div name="title">xxxxxxxxxxx</div><div name="text"><br />x<br />xxxxxxx</div><img name="pic" style="display:block;" width="280" height="230" alt="??" 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

10.jpg


IE下一样。

漏洞证明:

见详细说明

修复方案:

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

版权声明:转载请注明来源 gainover@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

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

厂商回复:

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

最新状态:

暂无