织梦dedesql.class.php文件漏洞解决方法

2019年10月13日14:26:31 3 1,000 views

阿里云后台提示织梦dedesql.class.php文件变量覆盖漏洞会导致SQL注入,可被攻击者构造恶意SQL语句,重置管理员密码,写入webshell等,进而获取服务器权限。下面告诉大家怎么修复这个漏洞:

首先说一下dedecms不安全的参数处理机制,这里我们看一下/include/common.inc.php代码的第106行:

织梦dedesql.class.php文件漏洞解决方法

万恶之源其实就在这里,基本上目前dede被发现的漏洞全都死在这里。我们可以看到,程序从GPC数组中取出名值对后,只是对$_v做了简单的addslashes处理,就直接赋给了${$_k},实现了类似全局变量覆盖的机制,设计的初衷是为了开发方便,但却存在着严重的安全问题。PHP在经历了这么多年的更新换代终于修补了register_globals问题,但是dede的这段代码使php付出的努力全部白费。

下面我们回归漏洞。首先是/include/dedesql.class.php的第595-607行,

织梦dedesql.class.php文件漏洞解决方法

在执行这段代码之前,程序未初始化$arrs1和$arrs2这两个数组。结合前面提到的dede不安全的参数处理机制,利用这段代码我们可以覆盖任意全局变量。例如在这个漏洞中,我们可以控制$GLOBALS['cfg_dbprefix']的值。

解决方案:

修改/include/dedesql.class.php页面第595行,新增代码如下

$arrs1 = array(); 
$arrs2 = array();

//特殊操作
        $arrs1 = array(); $arrs2 = array(); if (isset($global['arrs1']))
        {
            $v1 = $v2 = '';
            for ($i=0;isset($arrs1[$i]);$i++) 
            { 
                $v1 .= chr($arrs1[$i]);
            }
                        $v1 = $v2 = '';
            for ($i=0;isset($arrs2[$i]);$i++) 
            { 
                $v2 .= chr($arrs2[$i]);
            }
            $global[$v1] . = $v2; 
        }

 

历史上的今天:


欢迎来到菜鸟头头的个人博客
本文章百度已收录,若发现本站有任何侵犯您利益的内容,请及时邮件或留言联系,我会第一时间删除所有相关内容。

  • A+
所属分类:WEB

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  1   博主  2

    • avatar 奶爸建网站笔记 4

      你应该跑了很多个织梦的网站吧。