今天一个客户碰到织梦DeDeCMS漏洞攻击,出现很多挂马信息,比如plus/list.php/?scate-6351100.csv、plus/view.php/?/seo/blSpI2=ohvutj.xls、tags.php/?kaof8mx.csv这样的网址,大面积百度快照受影响,受此影响,CMSYOU在此与大家分享织梦DeDeCMS v5.7漏洞分析:Dede漏洞修复方法大全。
2020年织梦DeDeCMS出现两个声音:DeDeCMS、Dedebiz,也就是新版开发公司(穆云智能科技)与原运营方(卓卓网络科技)之间的版权之争,估计到现在还没有理清。之前CMSYOU也还跟大家分享过除个人非营利网站外 均需购买商业使用授权的事情。
无论创始人、运维方如何纠纷,DeDeCMS的用户们在碰到漏洞或者攻击时,最实在的还是关于Dede漏洞修复方法的一些文档或者技术分析,CMSYOU特收集整理在此,与大家分享。
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注入。
点击加载更多