DedeCMSV5.7.114后台article_template_rand.php存在rce漏洞
0x01 产品简介
织梦内容管理系统(DedeCMS),是一个集内容发布、编辑、管理检索等于一体的网站管理系统(Web CMS),他拥有国外CMS众多特点之外,还结合中国用户的需要,对内容管理系统概念进行明确分析和定位。
0x02 漏洞描述
DedeCMS V5.7.114 存在远程代码执行漏洞。造成此漏洞的原因是,尽管article_template_rand.php对编辑的文件施加了一定的限制,但攻击者仍然可以绕过这些限制并以某种方式编写代码,从而允许经过身份验证的攻击者利用该漏洞执行任意命令并获得系统权限。
0x03 影响版本
DedeCMS V5.7.114
0x04 搜索语法
FOFA
1 |
|
hunter
1 |
|
0x05 漏洞复现
该漏洞是由于article_template_rand.php 的限制,没有过滤充分,导致攻击者可以绕过这个从而实现rce
根据php 代码可以发现有以下的过滤
1 |
|
可以理解为去除了注释/**/
可能是为了方式内联形式的攻击语句
1 |
|
1 |
|
$cfg_disable_funs 添加了代码执行/命令执行相关和可能造成危险的黑名单,防止被调用造成rce
然后使用一个foreach 进行逐个匹配
如何发现了函数名前存在任何的非小写字符,前后时候存在'\"
这三个字符,函数名后是否存在空格,或者函数调用时使用的字符,将会进行转义
1 |
|
第一个if 检测了php 代码开始的标志,如果有就会进入更严格的处理
php开始的标志
- 以”<?”开始和以”>”结束是PHP/FI 2.0 的标记,已经被替换。
- 以”<?php”开始和以”?>”结束是PHP 3.0开始的标准标记
- 以”<?”开始和以”?>”结束是PHP 3.0开始的标记,通过 php.ini 配置文件中的short_open_tag选项打开
- 以”<script language=”php”>”开始和以”</script>”结束是PHP 3.0开始的标记已经废弃。
- 以”<%”开始和以”%>”结束是PHP 3.0.4开始的标记
内层第一个if
匹配的是函数的调用过程
先匹配函数名调用还是,变量调用,然后匹配任意的参数,一直到) 然后进行空格和;
的匹配
iU 关闭贪婪模式
函数的调用过程
无参数调用
带有参数调用
默认参数调用
可变参数调用
匿名函数
1
2
3
4
5
6
7
<?php
$numbers = [8, 9, 10, 11, 12, 13, 0, 15];
usort($numbers, function ($a, $b) {
return $a - $b;
});
print_r($numbers);引用传递参数
使用可选参数
使用数组展开
1
2
3
4
5
6
function add($a, $b) {
return $a + $b;
}
$args = [10, 20];
echo add(...$args); // 输出: 30使用命名参数(php 8.1 及以上)
1
2
3
4
5
function person_info(string $name, int $age, string $gender = "male") {
return "$name is $age years old and is $gender.";
}
echo person_info(name: "John", age: 30, gender: "female"); // 输出: John is 30 years old and is female.使用匿名函数作为回调
1
2
array_map(function($item) { return $item * 2; }, [1, 2, 3]);
// 输出: Array ( [0] => 2 [1] => 4 [2] => 6 )使用对象方法作为回调
1
2
3
4
5
6
7
8
9
class Math {
public function double($num) {
return $num * 2;
}
}
$math = new Math();
array_map([$math, 'double'], [1, 2, 3]);
// 输出: Array ( [0] => 2 [1] => 4 [2] => 6 )使用变量函数
1
2
$func_name = 'strtoupper';
echo $func_name("hello world"); // 输出: HELLO WORLD带上@ 符号的函数调用
内层第二个if
主要还是用于匹配函数的调用
防止使用@ 符号的函数调用
内层第三个if
主要是为了防止命令执行``
如果上面的过程都通过了的话
那么就会将我们的模板放入./data/template.rand.php
利用过程
织梦官方默认admin/admin
1 |
|
尝试访问呢
漏洞利用poc
1 |
|
创建文件的数据包,但是织梦有csrf_token 可能只有手动创建
1 |
|
命令执行数据包
1 |
|
0x06 修复建议
更新版本或者打补丁
0x07 参考文章
[dedeCMS V5.7.114 article_template_rand.php code injection.md · 狗and猫/cve - Gitee.com](https://gitee.com/fushuling/cve/blob/master/dedeCMS V5.7.114 article_template_rand.php code injection.md)md)