做好一个网站从认识站长百科教程网开始!快来>>>文章投稿>>>个人中心
站长百科教程网:全方位站长技能、SEO优化学习平台!
当前位置:网站首页 > 织梦百科 > 正文

织梦cms(dedecms)漏洞修复教程

作者:admin发布时间:2023-06-03分类:织梦百科浏览:186评论:0


导读:DeDeCMS是一个基于PHP语言的开源CMS系统,由于其易用性和开发性,被广泛应用于各种网站开发。近期出现了新版开发公司(穆云智能科技)与原运营方(卓卓网络科技)之间的版权之争,并导致用户在遇到漏洞或者攻击时需要寻找修复方案。

今天一个客户碰到织梦DeDeCMS漏洞攻击,出现很多挂马信息,比如plus/list.php/?scate-6351100.csv、plus/view.php/?/seo/blSpI2=ohvutj.xls、tags.php/?kaof8mx.csv这样的网址,大面积百度快照受影响,受此影响,CMSYOU在此与大家分享织梦DeDeCMS v5.7漏洞分析:Dede漏洞修复方法大全。

织梦cms(dedecms)漏洞修复教程  第1张

DeDeCMS是一个基于PHP语言的开源CMS系统,由于其易用性和开发性,被广泛应用于各种网站开发。


然而,近期出现了新版开发公司(穆云智能科技)与原运营方(卓卓网络科技)之间的版权之争,并导致用户在遇到漏洞或者攻击时需要寻找修复方案。


下面是关于DeDeCMS漏洞修复方法的一些文档或者技术分析,供用户参考:


DeDe漏洞1:任意文件上传漏洞修复方法


该漏洞存在于/include/dialog/select_soft_post.php文件的第72行。用户只需搜索$fullfilename = $cfg_basedir. $activepath.'/'. $filename;,并将其修改为以下代码即可:


if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) {

ShowMsg("你指定的文件名被系统禁止!",'javascript:;');

exit();

}

$fullfilename =$cfg_basedir.$activepath.'/'. $filename;


DeDe漏洞2:管理后台文件任意上传getshell漏洞修复方法


该漏洞存在于/dede/media_add.php或/你的后台名字/media_add.php的第69行左右。用户只需搜索$fullfilename = $cfg_basedir.$filename;,并将其替换为以下代码即可:


if (preg_match('#\.(php|pl|cgi|asp|aspx|jsp|php5|php4|php3|shtm|shtml)[^a-zA-Z0-9]+$#i', trim($filename))) {

ShowMsg("你指定的文件名被系统禁止!",'javascript:;');

exit();

}

$fullfilename =$cfg_basedir.$activepath.'/'. $filename;

Dede漏洞3:附件上传格式判断漏洞修复方法

文件:/include

/uploadsafe.inc.php大概在42、43行左右两处:

${$_key.'_size'} = @filesize($$_key);
}

后面增加:

$imtypes = array("image/pjpeg", "image/jpeg", "image/gif", "image/png", "image/xpng",

"image/wbmp", "image/bmp");

if(in_array(strtolower(trim(${$_key.'_type'})), $imtypes)){

$image_dd = @getimagesize($$_key);

if($image_dd == false){ continue; }

if (!is_array($image_dd)) { exit('Upload filetype not allow !'); }

}

大概在53行左右,搜索:

$image_dd = @getimagesize($$_key);

后面增加代码:

if($image_dd == false){ continue; }

Dede漏洞4:SQL注入漏洞修复方法

文件/include/filter.inc.php,大概在46行,搜索:

return $svar;

修改为:

return addslashes($svar);

文件/member/pm.php,大概在65行,搜索:

$row = $dsql->GetOne("SELECT * FROM `dede_member_pms` WHERE id='$id' AND (fromid='{$cfg_ml->M_ID}' OR toid='{$cfg_ml->M_ID}')");

修改为:

$id = intval($id);

$row = $dsql->GetOne("SELECT * FROM `dede_member_pms` WHERE id='$id' AND (fromid='{$cfg_ml->M_ID}' OR toid='{$cfg_ml->M_ID}')");

相当于先对$id做整型过滤。

文件/member/mtypes.php,大概在71行,搜索:

$query = "UPDATE `dede_mtypes` SET mtypename='$name' WHERE mtypeid='$id' AND mid='$cfg_ml->M_ID'";

修改为:

$id = intval($id);

$query = "UPDATE `dede_mtypes` SET mtypename='$name' WHERE mtypeid='$id' AND mid='$cfg_ml->M_ID'";

同上,也是先对$id过滤。

文件/plus/guestbook/edit.inc.php,大概在55行,搜索:

$dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");

修改为:

$msg =

addslashes($msg);

$dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");

先对$msg做过滤。

文件/plus/search.php,大概在109行,搜索:

$keyword = addslashes(cn_substr($keyword,30));

修改为:

$typeid = intval($typeid);

$keyword = addslashes(cn_substr($keyword,30));

先对$typeid做整型过滤。

文件/member/soft_add.php,大概在154行,搜索:

$urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}\r\n";

修改为:

if (preg_match("#}(.*?){/dede:link}{dede:#sim", $servermsg1) != 1) { $urls .= "{dede:link islocal='1' text='{$servermsg1}'} $softurl1 {/dede:link}\r\n"; }

增加一个判断,避免模版SQL注入。


Dede漏洞5:Cookies泄漏导致SQL漏洞修复方法

文件/member/article_add.php,大概在83行,搜索:

if (empty($dede_fieldshash) || $dede_fieldshash != md5($dede_addonfields.$cfg_cookie_encode))

修改为:

if (empty($dede_fieldshash) || ( $dede_fieldshash != md5($dede_addonfields . $cfg_cookie_encode) && $dede_fieldshash != md5($dede_addonfields . 'anythingelse' . $cfg_cookie_encode)))

文件/member/inc/inc_archives_functions.php,大概在239行,搜索:

echo "《input type=\"hidden\" name=\"dede_fieldshash\" value=\"".md5($dede_addonfields.$cfg_cookie_encode)."\" /》";

修改为:

echo "《input type=\"hidden\" name=\"dede_fieldshash\" value=\"". md5($dede_addonfields . 'anythingelse' .$cfg_cookie_encode) ."\" /》";

Dede漏洞6:SESSION变量覆盖导致SQL注入漏洞修复方法

文件include/common.inc.php,大概在68行,搜索:

if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GE

if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )

修改为:

if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE|_SESSION)#',$svar) )

增加Session过滤判断。

Dede漏洞7:变量初始化导致本地注入修复方法

文件/include/dedesql.class.php,大概在590行,搜索:

if(isset($GLOBALS['arrs1']))

修改为:

$arrs1 = array();

$arrs2 = array();

if(isset($GLOBALS['arrs1']))

也就是先定义好$arrs1、$arrs2,如果之前定义过,这一条忽略。

Dede漏洞8:支付模块注入漏洞修复方法

文件include/payment/alipay.php,大概在137行,搜索:

$order_sn = trim($_GET['out_trade_no']);

修改为:

$order_sn = trim(addslashes($_GET['out_trade_no']));

增加addslashes转换过滤。

Dede漏洞9:注册用户任意文件删除漏洞修复方法

文件/member/inc/archives_check_edit.php,大概在92行,搜索:

$litpic =$oldlitpic;

替换为:

$litpic =$oldlitpic;

if (strpos( $litpic, '..') !== false || strpos( $litpic, $cfg_user_dir."/{$userid}/" ) === false) exit('你没有此文件的权限!');

增加权限判断。

Dede漏洞10:留言板注入漏洞修复方法

文件/plus/guestbook/edit.inc.php,大概在55行,搜索:

$dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");

修改为:

$msg = addslashes($msg);

$dsql->ExecuteNoneQuery("UPDATE `dede_guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");

先对数据addslashes转码过滤。

以上,是针对织梦DeDeCMS v5.7版本的漏洞分析、漏洞修复方法大全,如有疑问,欢迎大家探讨。



欢迎 发表评论:

  • 请填写验证码
织梦百科排行
    随机文章 | 热门文章 | 热评文章
搜索
热评文章
随机文章