dedecms的/member/soft_add.php中,对输入模板参数$servermsg1未进行严格过滤,导致攻击者可构造模版闭合标签,实现模版注入进行GETSHELL。
方案一:使用云盾自研补丁进行一键修复;方案二:更新该软件到官方最新版本或寻求该软件提供商的帮助。【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了该漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】修改的
方法:
解决办法:打开根目录下/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";}
2、标题: dedecms支付模块注入漏洞
DEDECMS支付插件存在SQL注入漏洞,此漏洞存在于/include/payment/alipay.php文件中,对输入参数$_GET['out_trade_no']未进行严格过滤。
文件在include/payment/下面include/payment/alipay.php,搜索(大概在137行的样子)
$order_sn = trim($_GET['out_trade_no']);
修改为
$order_sn = trim(addslashes($_GET['out_trade_no']));
dedecms早期版本后台存在大量的富文本编辑器,该控件提供了一些文件上传接口,同时dedecms对上传文件的后缀类型未进行严格的限制,这导致了黑客可以上传WEBSHELL,获取网站后台权限。
修复方法:
打开/dede/media_add.php(dede是你的后台文件夹,请自行修改)
搜索(大概在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.$filename;
/***********修改文件结束*************/
dedecms的文章发表表单中泄漏了用于防御CSRF的核心cookie,同时在其他核心支付系统也使用了同样的cookie进行验证,黑客可利用泄漏的cookie通过后台验证,进行后台注入。
搜索代码:if (empty($dede_fieldshash) || $dede_fieldshash != md5($dede_addonfields.$cfg_cookie_encode)) (大概在83行)
修改为:
if (empty($dede_fieldshash) || ( $dede_fieldshash != md5($dede_addonfields . $cfg_cookie_encode) && $dede_fieldshash != md5($dede_addonfields . 'anythingelse' . $cfg_cookie_encode)))
dedecms的文章发表表单中泄漏了用于防御CSRF的核心cookie,同时在其他核心支付系统也使用了同样的cookie进行验证,黑客可利用泄漏的cookie通过后台验证,进行后台注入。
解决方法:
打开\member\inc\inc_archives_functions.php文件,找到239行,将
1 |
echo " |
替换为:
1 |
echo " |
修改文件前请做好文件备份。将新的inc_archives_functions.php文件上传替换阿里云服务器上即可解决此问题。
6、漏洞名称:dedecms 上传漏洞
漏洞文件:include/uploadsafe.inc.php
漏洞描述:dedecms过滤逻辑不严导致上传漏洞。
解决方法:
1、打开include/uploadsafe.inc.php文件,找到第8行或者搜索
1 |
$cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml" ; |
替换为:
1 |
$cfg_not_allowall = "php|pl|cgi|asp|aspx|jsp|php3|shtm|shtml|htm|html" ; |
2、找到第52行或者搜索
1 |
$image_dd = @ getimagesize ($ $_key ); |
在其下面添加:
1 |
if ( $image_dd == false){ continue ; } |
修改文件前请做好文件备份,将新的uploadsafe.inc.php文件上传替换阿里云服务器上即可解决此问题
6)
dedecms的/dedecms/member/album_add.php文件中,对输入参数mtypesid未进行int整型转义,导致SQL注入的发生。
修复方法:
打开dedecms/member/album_add.php文件,查找以下代码(大约220行左右)
$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)
将上面的代码替换为:
$description = HtmlReplace($description, -1);//2011.06.30 增加html过滤 (by:织梦的鱼)
$mtypesid = intval($mtypesid);
7、
漏洞名称:dedecms SESSION变量覆盖导致SQL注入
漏洞描述:dedecms的/plus/advancedsearch.php中,直接从SESSION[SESSION[sqlhash]获取值作为$query带入SQL查询,这个漏洞的利用前提是session.auto_start = 1即开始了自动SESSION会话,云盾团队在dedemcs的变量注册入口进行了通用统一防御,禁止SESSION变量的传入
dedecms SESSION变量覆盖导致SQL注入common.inc.php的解决方法
1、搜索如下代码(68行):
if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE)#',$svar) )
2、替换 68 行代码,替换代码如下:
if( strlen($svar)>0 && preg_match('#^(cfg_|GLOBALS|_GET|_POST|_COOKIE|_SESSION)#',$svar) )
修改前请备份好文件,将新的/include/common.inc.php 文件上传替换阿里云服务器上的即可解决此问题。
8、
dedecms会员中心注入漏洞。
方案一:使用云盾自研补丁进行一键修复;方案二:更新该软件到官方最新版本或寻求该软件提供商的帮助
【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了该漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】
修复方法:
member/mtypes.php
在$name = HtmlReplace($name);下面添加
/* 对$id进行规范化处理 */ $id = intval($id); /* */
9,/plus/guestbook/edit.inc.php dedecms注入漏洞,其实就是留言版注入漏洞
没有对$msg过滤,导致可以任意注入,找到
$msg = HtmlReplace($msg, -1);
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
exit();
修复:
$msg = addslashes(HtmlReplace($msg, -1));
$dsql->ExecuteNoneQuery("UPDATE `#@__guestbook` SET `msg`='$msg', `posttime`='".time()."' WHERE id='$id' ");
ShowMsg("成功更改或回复一条留言!", $GUEST_BOOK_POS);
exit();
加入: addslashes进行过滤
10.
/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); //将$id 转换为int类型
$row = $dsql->GetOne("SELECT * FROM `dede_member_pms` WHERE id='$id' AND (fromid='{$cfg_ml->M_ID}' OR toid='{$cfg_ml->M_ID}')");