漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
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=¬ice=0&needNewCode=0&format=jsonp&platform=musicbox&jsonpCallback=jsonCallback
这个地址会输出QQ号码在QQ空间音乐盒中【我喜欢】这个专辑中的音乐内容,包括歌手,歌曲名,歌曲地址等信息。
正常情况下,歌手名字,歌曲名,歌曲地址里的< , >都会被过滤掉,即过滤成为 < >
在这一步,我们对应的绕过方法是:
%bf<script/%bf>
原理是:服务器上会过滤数据中的特殊符号,但是当读取到%bf时,会认为%bf<是一个GBK字符,从而当作一个字符来看待。 即过滤程序会把上面的内容看作是:
[GBK字符]script/[GBK字符]
然后当上面内容输出到页面的时候,内容则会变为
口<script/口> (其中“口”为不被识别的字符)
从而,我们插入了一个<script>
---------------------------------------------------------------
通过以上方法,我们可以写出以下代码
不幸的是,在歌曲标题内插入这段内容后,发现(, ) 都被转义成为 &#xxxx; 的形式了。
alert没法执行了,而且,括号都用不了,代码就执行不了了。
---------------------------------------------------------------
然而,我们是可以控制多个输出点的。 如下,songname, singername, url
也就是说,我们可以采用注释的办法来进入后面的点,如下:
但是这个点中,*都被过滤成 &#xxxx 了。继续测试发现,不仅是括号,星号,连=, + ,%,基本只要是符号,都过滤的差不多了。还好,[,], / 没被过滤。 加上我们意外的惊喜发现,url和songname,singername的过滤规则不同,并没有过滤如此多的符号。所以:
---------------------------------------------------------------
上面这首歌,完成了 <script>[",url:"];alert(1)/* ....
再编辑下一首歌,修改songname,加入</script>以闭合脚本标签。
最后就成功构造了。具体利用过程写在了漏洞证明里。
漏洞证明:
进QQ空间音乐盒中的【我喜欢】目录中,
1. 先修改第一首歌,抓包,修改包
URL:http://qzone-music.qq.com/cgi-bin/v5/cgi_music_modsong_new?g_tk=1232408522
发第一个包, 修改了包里的url和singer参数
2. 再修改第二首歌,抓包,修改包, 地址同1,修改了songtitle参数
3. 最后效果如下:
4. 然后利用iframe来利用即可。
修复方案:
换个函数或者方法过滤符号。
版权声明:转载请注明来源 多多关照@乌云
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:15
确认时间:2013-07-08 10:06
厂商回复:
感谢反馈,我们正在处理中。
最新状态:
暂无