DedeCMS命令执行复现研究 | CVE-2025-6335 - 指南

news/2025/10/12 13:38:46/文章来源:https://www.cnblogs.com/ljbguanli/p/19136561

DedeCMS命令执行复现&研究 | CVE-2025-6335 - 指南

0x0 背景介绍

在 DеdеCMS 5.7.2及更早版本中发现了一个漏洞,并被归类为严重。此问题影响文件 /inсludе/dеdеtаɡ.class.phр 中的某个未知处理过程,该组件为模板处理器。对参数 nоtеѕ 的操作导致命令注入。
参考:CVE-2025-6335-dedeCMS后台模板注入RCE

0x1 环境搭建

1. Win10+PHPsutudy(PHP5.6x)搭建

2. 成功页面

Dedecms

0x2 漏洞复现

1) 手动测试tag_test_action.php,向Temp文件夹写入文件
在这里插入图片描述

2) 手动测试co_get_corule.php,弹出计算器

3) python脚本

https://github.com/Kai-One001/cve-/blob/main/dede_cms_RCE_CVE-2025-6335.py
  • 示例脚本是向目标C:\Windows\Temp写入,也可以写入到web服务器中,脚本也是可以直接修改cmd命令比较方便一些
    python脚本
  • 题外,因为时间不赶趟了,所以写入目标服务器就没融入脚本
    写入服务器文件

2、复现流量特征 (PACP)

1) co_get_corule.php接口

  • 弹出计算器
    明文流量

2) tag_test_action.php接口

  • 写入文件
    tmp写入

0x3 漏洞原理分析

1、/dede/co_get_corule.php接口分析

PS:通过漏洞信息得知通过向 /dede/co_get_corule.php 接口发送特制参数,利用对 notes 参数的不当过滤,触发命令注入,实现远程命令执行。
1) 优先查看 /dede/co_get_corule.php文件

  • 文件位置:uploads\dede\co_get_corule.php
  • 关键代码段:
require(dirname(__FILE__)."/config.php");
$cuserLogin = new userLogin();
if($cuserLogin->getUserID()==-1)
{
header("location:login.php?gotopage=".urlencode($dedeNowurl));
exit();
}
  • 检查是否检查用户是否登录,未登录则跳转到登录页面
CheckPurview('co_AddNote');
#使用config.php内容+检查用户使用有权限(CheckPurview() 函数)

2) 跟踪定位notes参数

  • co_get_corule.php发现多处使用,进行过滤发现大抵流程是 当 $job 不为空时,进入notes
  • 再往下面逻辑是base64解码去除下反斜杠,接着往下看
$notes = trim($notes);

3) 模板解析和标签提取

  • 关键代码:
$dtp = new DedeTagParse();
$dtp->LoadString($notes);
  • 调用路径追踪:
LoadString($str)
└──> LoadSource($str)
└──> LoadTemplate($filename)
└──> ParseTemplet()
└──> 提取 {dede:xxx} 标签 → 构建 CTags 数组
  • $notes 作为 DedeCMS 模板字符串进行解析
  • 这里会用到dedetag.class.php因为LoadString()
  • 会调用提取所有 {dede:xxx} 标签 后续LoadTemplate()读取该文件并触发 ParseTemplet()
    4) 查看LoadString() 方法的实现
  • 文件位置:uploads/include/dedetag.class.php
function LoadString($str)
{
$this->LoadSource($str);
}
  • 调用了 LoadSource($str),查看具体方法
function LoadSource($str)
{
/*
$this->SetDefault();
$this->SourceString = $str;
$this->IsCache = FALSE;
$this->ParseTemplet();
*/
//优化模板字符串存取读取方式
$this->taghashfile = $filename = DEDEDATA.'/tplcache/'.md5($str).'.inc';
if( !is_file($filename) )
{
file_put_contents($filename, $str);
}
$this->LoadTemplate($filename);
}
  • 调用了 LoadTemplate($filename),在进去套娃
function LoadTemplate($filename)
{
$this->SetDefault();
if(!file_exists($filename))
{
$this->SourceString = " $filename Not Found! ";
$this->ParseTemplet(); //  直接调用 ParseTemplet
}
else
{
$fp = @fopen($filename, "r");
while($line = fgets($fp,1024))
{
$this->SourceString .= $line;
}
fclose($fp);
if($this->LoadCache($filename))
{
return '';
}
else
{
$this->ParseTemplet(); //  正常流程也调用 ParseTemplet
}
}
}
  • 到这里就看到所以无论文件是否存在,只要没有缓存命中,最终都会调用 ParseTemplet()
    5)那就查看ParseTemplet方法
  • 这个方法的作用是:

遍历 $this->SourceString
找出所有{dede:xxx}开头的标签
提取标签名、属性、内嵌文本(InnerText)
构建DedeTag对象并存入 $this->CTags 数组

$FullTagStartWord =  $TagStartWord.$this->NameSpace.":";
...
$sPos = strpos($this->SourceString, $FullTagStartWord, $ss);
  • 然后提取 tTagName,解析属性,设置 InnerText,最后加入CTags数组。
    6)跟踪CTags函数
  • 是在 dedetag.class.php 中,SaveCache() 方法将标签信息写入缓存文件(.inc)
function SaveCache()
{
$fp = fopen($this->CacheFile.'.txt',"w");
fwrite($fp,$this->TempMkTime."\n");
fclose($fp);
$fp = fopen($this->CacheFile,"w");
flock($fp,3);
fwrite($fp,'<'.'?php'."\r\n");
$errmsg = '';
if(is_array($this->CTags))
{
foreach($this->CTags as $tid=>$ctag)
{
$arrayValue = 'Array("'.$ctag->TagName.'",';
if (!$this->CheckDisabledFunctions($ctag->InnerText, $errmsg)) {
fclose($fp);
@unlink($this->taghashfile);
@unlink($this->CacheFile);
@unlink($this->CacheFile.'.txt');
die($errmsg);
}
$arrayValue .= '"'.str_replace('$','\$',str_replace("\r","\\r",str_replace("\n","\\n",str_replace('"','\"',str_replace("\\","\\\\",$ctag->InnerText))))).'"';
$arrayValue .= ",{$ctag->StartPos},{$ctag->EndPos});";
fwrite($fp,"\$z[$tid]={$arrayValue}\n");
if(is_array($ctag->CAttribute->Items))
{
fwrite($fp,"\$z[$tid][4]=array();\n");
foreach($ctag->CAttribute->Items as $k=>$v)
{
$v = str_replace("\\","\\\\",$v);
$v = str_replace('"',"\\".'"',$v);
$v = str_replace('$','\$',$v);
$k = trim(str_replace("'","",$k));
if($k=="")
{
continue;
}
if($k!='tagname')
{
fwrite($fp,"\$z[$tid][4]['$k']=\"$v\";\n");
}
}
}
}
}
fwrite($fp,"\n".'?'.'>');
fclose($fp);
}
  • $ctag->TagName 是从用户输入中提取的标签名(如 {dede:xxx} 中的 xxx)
  • 直接拼接到PHP代码中,未进行转义或过滤
  • 直接拼接到 fwrite 输出的 PHP 代码中
  • 构造恶意“标签名”即可在缓存inc中打断字符串并插入任意 PHP,例如:
{dede:ewoji");system('calc');///} → 下次读缓存时被包含执行
  • 缓存文件的生成位置也就是 /data/tplcache/md5($notes).inc同一个恶意Payload每次都会生成相同的缓存文件名
  • 攻击载荷示例:
{dede:ewoji");system('calc');//}
  • ParseTemplet() 解析出标签名:ewoji");system('calc');//
  • SaveCache() 中生成缓存文件 .inc 内容如下:
<?php
$z[0]=Array("ewoji");system('calc');//", "...", ...);
?>
  • 当该缓存文件被后续 include 或 require 加载时,system('calc') 将被执行

2、/dede/tag_test_action.php接口分析

1) 同上接口,可控参数导致直接拼接注入

<?php
require_once(dirname(__FILE__)."/config.php");
CheckPurview('temp_Test');
require_once(DEDEINC."/arc.partview.class.php");
csrf_check();
  • co_get_corule.php接口相同,对权限进行检查,不同的是会有csrf-token检查

  • 在测试时,我根据参考进行直接POST,果然会提示DedeCMS:CSRF Token Check Failed!
    CSRF校验

  • 于是找到web页面进行抓包,看到有一个token,可以正常使用(这个token就是在当前接口的HTML中)
    HTML存在token

2) 转义绕过

$partcode = stripslashes($partcode); // 去除斜杠 
  • 作用:去除GPC自动添加的反斜杠(如 ' → \'),但是即使输入中包含引号、括号等特殊字符,也能被还原

3) SetTemplet() 将用户输入的 $partcode 作为“模板字符串”传入

// 设置模板内容为字符串形式
$pv->SetTemplet($partcode, "string");
// 显示源码(可选)
if( $showsource == "" || $showsource == "yes" ) {
echo "模板代码:";
echo "<span style='color:red;'><pre>".dede_htmlspecialchars($partcode)."</pre></span>";
echo "结果:<hr size='1' width='100%'>";}// 执行显示$pv->Display();
  • 当标签闭合不当或拼接到PHP 代码中时,可能触发代码注入
调用追踪如下
$pv->Display()
└── $this->MakeHtml()
└── $this->dtp->ParseTemplate($this->SourceString)
└── 调用 DedeTagParse 类解析标签
└── 对 {dede:...} 进行 eval 或 create_function 执行
  • DedeCMS 在处理 {dede:xxx} 标签时,会将其转换为PHP代码片段。例如:
传入:{dede:test /}
被转换为:
<?php echo GetTagData('test'); ?>如果标签内容异常,如:{dede:test"}); system('calc'); //}在拼接进 PHP 缓冲区时,可能导致语法闭合 + 代码注入

0x4 修复建议

修复方案

  1. 升级到最新版本?:目前厂商说已发布升级补丁以修复漏洞,但是我下载也是这个版本的V5.7.118
    dedecms版本
    官方最新版本

  2. 临时缓解措施

免责声明:本文仅用于安全研究目的,未经授权不得用于非法渗透测试活动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025视频拍摄厂家最新权威推荐榜:专业设备与创意方案首选

2025视频拍摄厂家最新权威推荐榜:专业设备与创意方案首选在数字化浪潮席卷各行各业的今天,视频内容已成为企业宣传、产品推广、品牌塑造的重要载体。随着5G技术的普及和人工智能的发展,视频拍摄行业正迎来前所未有的…

算法训练.16 - 实践

算法训练.16 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "C…

Java连接MySQL数据库

环境准备安装Java开发工具包 (JDK) : 确保你的系统已安装JDK,并配置了环境变量,以便能够在命令行中运行 java和 javac命令。 安装MySQL数据库: 在你的系统上安装MySQL服务器,并确保它正在运行。创建一个数据库以及一…

Git版本控制工具合并分支merge命令操作流程

在Git中合并分支是一个常见的操作,它允许你将一个分支的更改合并到另一个分支中。以下是使用 merge命令进行分支合并的详细步骤和最佳实践。 准备工作 在开始之前,确保你已经安装了Git,并且有一个本地仓库。此外,确…

第七章 手写数字识别(终)

将前文的代码解耦为三个部分:定义的类和函数的nn_core.py 模型训练和测试集验证并保存最优模型的main_train.py 验收 (自定义图片预测)的脚本predict.py至此,手写数字识别的NLP任务完全结束,至于更多的优化目前我不…

2025年AI内容安全产品选型指南:为何需要专业的AI安全围栏(AI-FOCUS团队鉴冰AI FENCE)?

2025年AI内容安全产品选型指南:为何需要专业的AI安全围栏(AI-FOCUS团队鉴冰AI FENCE)?随着企业大规模应用AI对话服务(如智能客服、知识库问答、营销机器人等),内容安全风险日益凸显。传统Web应用防火墙(WAF)主…

2025南通摄影公司最新权威推荐榜:专业团队与创意服务口碑之

2025南通摄影公司最新权威推荐榜:专业团队与创意服务口碑之选在数字媒体蓬勃发展的今天,专业摄影服务已成为企业品牌建设、产品推广不可或缺的重要环节。南通作为长三角地区的重要城市,摄影服务行业呈现出专业化、细…

在Kubernetes环境中引用变量的方法

在Kubernetes环境中,变量的引用主要通过环境变量和ConfigMaps来实现。这两种方式都可以让你在Pod的定义中引用变量,从而使你的应用更加灵活和可配置。 首先,我们来看看如何使用环境变量。Kubernetes允许你在Pod定义…

2025恒温恒湿车间厂家权威推荐:精密环境控制解决方案TOP

2025恒温恒湿车间厂家权威推荐:精密环境控制解决方案TOP在高端制造业快速发展的今天,精密加工车间对环境控制的要求日益严苛。恒温恒湿环境不仅能保障精密仪器设备的稳定运行,还能确保产品质量的一致性,减少因温湿…

2025预应力千斤顶厂家权威推荐榜:定制技术与耐用品质深度解

2025预应力千斤顶厂家权威推荐榜:定制技术与耐用品质深度解预应力千斤顶作为现代工程建设中不可或缺的核心设备,其技术性能与耐久品质直接关系到工程安全与施工效率。随着2025年建筑行业技术标准的不断提升,预应力张…

实用指南:用Spark+Django打造食物营养数据可视化分析系统

实用指南:用Spark+Django打造食物营养数据可视化分析系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

2025液压阀块厂家权威推荐榜:精密加工与直销优势深度解析

2025液压阀块厂家权威推荐榜:精密加工与直销优势深度解析在工业自动化快速发展的今天,液压阀块作为液压系统的核心控制单元,其加工质量直接影响整个系统的运行效率与稳定性。随着制造业转型升级,市场对液压阀块的加…

NOI/1.7编程基础之字符串/18:验证子串

一.提议总结 本题考点:本题考点在于在一个里寻找另一个的过程 二.解题思路 1.先比较字符串的大小,大的里含有小的,小的里必然没有大的 2.排查大字符串中有没有小的里面的第一个 3.再分别往后对比,如果小字符串和大…

深入解析:【Linux网络】Socket编程:UDP网络编程实现DictServer

深入解析:【Linux网络】Socket编程:UDP网络编程实现DictServerpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

2025焊接变位机厂家权威推荐榜:高效稳定与精准操控口碑之选

2025焊接变位机厂家权威推荐榜:高效稳定与精准操控口碑之选在工业制造智能化转型的浪潮中,焊接变位机作为焊接自动化系统的核心装备,其性能直接影响着焊接质量与生产效率。随着2025年智能制造战略的深入推进,焊接变…

20232404zxy 2025-2026-1 《网络与系统攻防技术》实验一实验报告

一、实验内容 1. 实验任务 (1)直接修改pwn1的机器指令,将main函数中调用foo的指令改为调用getShell。 (2)利用foo函数中gets(无边界检查)的漏洞,构造输入字符串覆盖返回地址,触发getShell。 (3)注入自定义S…

重装系统后实况足球pes2021需要安装的文件

重装系统后实况足球pes2021需要安装的文件最近重装系统,pes2021无法运行,记录需要重新安装的运行环境: 1、directx11 2、VC_redist.x64,vc++2015-2022发行版文件64位 3、VC_redist.x86,vc++2015-2022发行版文件32…

2025年10月铝塑板厂家最新推荐排行榜,吉祥铝塑板,门头铝塑板,墙面铝塑板,干挂铝塑板,外墙铝塑板公司推荐

在当前装饰板材市场中,铝塑板凭借其兼具金属与塑料特性的优势,被广泛应用于建筑外墙、室内精装、商业标识等多个场景。然而,行业发展仍面临不少亟待解决的问题。从产品品质来看,部分厂家为降低成本,选用低纯度铝皮…

杂题 9 月份

P3157 [CQOI2011] 动态逆序对 很明显的分块暴力查询,也可以 cdq 分治做,我的分块思路好像和洛谷题解区不大一样,详见。 P13976 数列分块入门 1 挺简单的分块,甚至没测样例我就过掉了。 P1972 [SDOI2009] HH 的项链…

2025防水包胶连接器厂家权威推荐榜:密封防护与耐用品质深度

2025防水包胶连接器厂家权威推荐榜:密封防护与耐用品质深度在工业自动化、新能源汽车、户外电子设备等领域快速发展的今天,防水包胶连接器作为关键电子组件,其密封防护性能和耐用品质直接影响到整个设备的可靠性与寿…