Dedecms_V5.8.1 RCE
字数 1155 2025-08-03 16:46:54
Dedecms V5.8.1 RCE漏洞分析与利用
漏洞概述
Dedecms V5.8.1版本在/plus/flink.php文件中存在远程代码执行(RCE)漏洞,该漏洞通过模板注入实现,攻击者可以利用此漏洞在目标服务器上执行任意代码。
漏洞分析
漏洞触发点
漏洞主要存在于ShowMsg函数的模板注入中,具体调用链如下:
- 当访问
/plus/flink.php时,如果$gourl参数值为-1,系统会将HTTP_REFERER的值赋给$gourl - 经过特定字符替换和空格去除处理后,
$gourl的值会被传递给tgobj参数 - 最终这些值会被拼接到
$func变量中,并进入$msg参数
关键代码流程
-
LoadString方法:
- 根据
msg内容生成MD5值创建缓存文件 - 对模板内容进行解析
- 根据
-
WriteCache方法:
- 调用
CheckDisabledFunctions方法检测危险函数 - 将内容写入模板文件
- 最终通过
include包含缓存文件执行代码
- 调用
错误调用链分析
最初调试时可能遇到的错误调用链:
onlymsg参数被赋值为1,导致无法进入后续循环- 因此无法进入正确的漏洞利用链
正确调用链条件
$gourl参数值为-1$onlymsg参数值为0(这样才能进入拼接模板文件的流程)
漏洞利用
利用条件
- 目标系统使用Dedecms V5.8.1
- 能够控制HTTP Referer头或相关参数
利用步骤
- 构造请求,设置
gourl参数为-1 - 在HTTP Referer头中注入恶意代码
- 确保
onlymsg参数为0(或不被设置为1) - 发送请求触发漏洞
绕过限制
-
CheckDisabledFunctions检查:
- 需要构造能够绕过危险函数检测的payload
- 可能需要使用非标准PHP函数或编码技术
-
模板解析限制:
- 需要确保注入的代码能够被正确解析为PHP代码
- 可能需要使用特定的闭合和拼接技术
防御措施
- 升级到最新版本的Dedecms
- 对用户输入进行严格过滤,特别是HTTP Referer头
- 禁用不必要的PHP函数
- 限制模板文件的写入权限
- 实施WAF规则拦截可疑的模板注入尝试
技术细节补充
-
文件创建机制:
- 系统会根据
msg内容的MD5值创建缓存文件 - 文件路径通常位于缓存目录中
- 系统会根据
-
代码执行上下文:
- 最终代码是在模板解析上下文中执行
- 可能需要考虑当前工作目录和包含路径
-
日志与痕迹:
- 攻击会留下模板缓存文件
- 系统日志可能记录异常请求
总结
该漏洞利用Dedecms的模板机制实现远程代码执行,核心在于通过控制HTTP Referer头将恶意代码注入到模板文件中。理解完整的调用链和条件限制是成功利用的关键,同时也为防御提供了明确的方向。