前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >织梦dedecms dedesql.class.php文件漏洞解决方法

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

作者头像
用户8851537
修改2021-07-20 14:38:55
1.2K0
修改2021-07-20 14:38:55
举报

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

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

avatar
avatar

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

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

avatar
avatar

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

解决方案:

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

代码语言:txt
复制
$arrs1 = array(); 

$arrs2 = array();
代码语言:txt
复制
//特殊操作

        $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; 

        }

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档