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函数的模板注入中,具体调用链如下:

  1. 当访问/plus/flink.php时,如果$gourl参数值为-1,系统会将HTTP_REFERER的值赋给$gourl
  2. 经过特定字符替换和空格去除处理后,$gourl的值会被传递给tgobj参数
  3. 最终这些值会被拼接到$func变量中,并进入$msg参数

关键代码流程

  1. LoadString方法

    • 根据msg内容生成MD5值创建缓存文件
    • 对模板内容进行解析
  2. WriteCache方法

    • 调用CheckDisabledFunctions方法检测危险函数
    • 将内容写入模板文件
    • 最终通过include包含缓存文件执行代码

错误调用链分析

最初调试时可能遇到的错误调用链:

  • onlymsg参数被赋值为1,导致无法进入后续循环
  • 因此无法进入正确的漏洞利用链

正确调用链条件

  1. $gourl参数值为-1
  2. $onlymsg参数值为0(这样才能进入拼接模板文件的流程)

漏洞利用

利用条件

  1. 目标系统使用Dedecms V5.8.1
  2. 能够控制HTTP Referer头或相关参数

利用步骤

  1. 构造请求,设置gourl参数为-1
  2. 在HTTP Referer头中注入恶意代码
  3. 确保onlymsg参数为0(或不被设置为1)
  4. 发送请求触发漏洞

绕过限制

  1. CheckDisabledFunctions检查

    • 需要构造能够绕过危险函数检测的payload
    • 可能需要使用非标准PHP函数或编码技术
  2. 模板解析限制

    • 需要确保注入的代码能够被正确解析为PHP代码
    • 可能需要使用特定的闭合和拼接技术

防御措施

  1. 升级到最新版本的Dedecms
  2. 对用户输入进行严格过滤,特别是HTTP Referer头
  3. 禁用不必要的PHP函数
  4. 限制模板文件的写入权限
  5. 实施WAF规则拦截可疑的模板注入尝试

技术细节补充

  1. 文件创建机制

    • 系统会根据msg内容的MD5值创建缓存文件
    • 文件路径通常位于缓存目录中
  2. 代码执行上下文

    • 最终代码是在模板解析上下文中执行
    • 可能需要考虑当前工作目录和包含路径
  3. 日志与痕迹

    • 攻击会留下模板缓存文件
    • 系统日志可能记录异常请求

总结

该漏洞利用Dedecms的模板机制实现远程代码执行,核心在于通过控制HTTP Referer头将恶意代码注入到模板文件中。理解完整的调用链和条件限制是成功利用的关键,同时也为防御提供了明确的方向。

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头将恶意代码注入到模板文件中。理解完整的调用链和条件限制是成功利用的关键,同时也为防御提供了明确的方向。