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 "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"" .md5( $dede_addonfields . $cfg_cookie_encode ). "\" />" ; |
替換爲:
1 | echo "<input type=\"hidden\" name=\"dede_fieldshash\" value=\"" .md5( $dede_addonfields . "anythingelse" . $cfg_cookie_encode ). "\" />" ; |
修改文件前請做好文件備份。將新的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}')");