一、漏洞说明
该漏洞属于后台高危RCE(远程代码执行)漏洞,漏洞编号CVE-2018-7700,攻击者在登录后台后,可通过构造恶意标签请求,触发代码执行,直接获取网站服务器控制权,属于「最高危」后台漏洞,危害极大,登录后台即可Getshell。
- 漏洞编号:CVE-2018-7700
- 漏洞类型:RCE(远程代码执行)
- 危害等级:最高危
- 影响版本:DedeCMS V5.7 SP2 及以下全版本(含各类衍生版本)
- 漏洞文件:/tag_test_action.php
- 漏洞场景:后台标签测试功能中,程序未对标签参数进行严格过滤,直接将参数代入eval()危险函数执行,导致攻击者可注入恶意代码,触发远程代码执行。
二、代码分析
漏洞核心原因:tag_test_action.php 文件中,后台标签测试功能未对用户提交的标签参数(tags)进行任何过滤,直接将其代入eval()函数执行,而eval()函数可执行任意PHP代码,攻击者登录后台后,构造恶意标签参数,即可执行恶意代码,获取服务器控制权。
关键漏洞代码(原文件片段):
<?php
// 原漏洞代码(后台标签测试逻辑,存在RCE漏洞)
require_once(dirname(__FILE__)."/config.php");
$tags = $_POST['tags'];
// 未对tags参数进行任何过滤,直接代入eval()执行,触发RCE
eval("$tags = "$tags";");
echo $tags;
?>
代码问题分析:
- 参数未过滤:tags参数直接从POST请求中获取,未进行任何过滤、转义处理,允许传入包含恶意PHP代码的参数;
- 危险函数使用不当:eval()函数是PHP中最危险的函数之一,可直接执行任意PHP代码,此处直接将用户可控参数代入,导致远程代码执行漏洞;
- 无权限额外校验:虽为后台漏洞,但未对操作权限进行进一步校验,只要登录后台,无论权限高低,均可利用该漏洞;
- 无参数校验:未校验tags参数的合法性,允许传入任意长度、任意内容的参数,进一步放大漏洞危害。
漏洞利用示例(仅用于学习,请勿非法测试):
// 后台提交tags参数为:{${phpinfo()}}
// 执行后会触发eval()函数执行phpinfo(),显示服务器PHP信息;替换为木马代码即可Getshell
// 木马代码示例:{${file_put_contents(‘shell.php’,'<?php @eval($_POST[pass]);?>’)}}
三、修复方法(原位修复,不升级、不影响模板)
本修复方案无需升级DedeCMS版本,仅修改tag_test_action.php文件,通过禁用危险函数、过滤参数、限制权限,彻底封堵RCE漏洞,不影响后台正常功能,步骤如下:
步骤1:备份漏洞文件
备份 /tag_test_action.php 文件,备份路径示例:/tag_test_action.php.bak,避免修改错误导致后台标签测试功能异常,便于后续回滚操作。
步骤2:核心修复(禁止危险函数+过滤参数)
打开 /tag_test_action.php 文件,替换为以下修复后的代码,核心是移除eval()危险函数、过滤参数、添加权限校验:
<?php
require_once(dirname(__FILE__)."/config.php");
// 修复1:添加权限校验,仅允许超级管理员操作(避免低权限账号利用)
if($cuserLogin->getUserType() != 1){
exit('无权限操作,请联系超级管理员');
}
$tags = $_POST['tags'];
// 修复2:过滤tags参数,禁止包含恶意代码和危险字符
$forbidChars = array('eval', 'exec', 'system', 'shell_exec', 'passthru', 'phpinfo', 'file_put_contents', 'fopen', 'unlink', '{', '}', '$', '(' , ')');
foreach($forbidChars as $char){
if(strpos($tags, $char) !== false){
exit('标签内容包含非法字符,禁止提交');
}
}
// 修复3:移除eval()危险函数,改用安全的字符串处理方式
$tags = htmlspecialchars($tags, ENT_QUOTES);
echo $tags;
?>
步骤3:额外加固(可选,提升安全性)
- 禁用危险函数:在PHP配置文件(php.ini)中,添加 disable_functions = eval,exec,system,shell_exec,passthru ,禁止危险函数执行(需谨慎,避免影响网站其他功能);
- 删除无用功能:若网站无需后台标签测试功能,可直接删除 tag_test_action.php 文件,彻底杜绝该漏洞;
- 限制后台登录IP:通过Apache/Nginx配置,仅允许指定IP登录后台,防止攻击者非法登录后台利用该漏洞;
- 加强后台密码复杂度:要求管理员密码包含字母、数字、特殊字符,定期更换密码,降低后台被登录的风险。
步骤4:验证修复效果
- 低权限账号测试:使用非超级管理员账号登录后台,访问tag_test_action.php,提示「无权限操作」,修复生效;
- 恶意代码测试:提交tags参数为 {${phpinfo()}} 或木马代码,提示「标签内容包含非法字符」,修复生效;
- 正常标签测试:提交合法的标签内容(如 {dede:field.title/}),可正常显示,说明功能未受影响。
四、注意事项
- 该漏洞危害极大,登录后台即可Getshell,修复后务必全面测试,确保漏洞已彻底封堵;
- 若网站无需后台标签测试功能,建议直接删除 tag_test_action.php 文件,从根源上杜绝漏洞;
- 修复后需检查后台其他涉及eval()函数的文件,避免存在类似漏洞;
- 定期扫描后台文件,排查是否有恶意文件植入,防止攻击者已利用漏洞获取控制权;
- 若修复后出现标签测试功能异常,可恢复备份文件,检查代码修改是否有误,或联系技术人员协助排查。
本文由 流觞运维 原创整理,如需 DedeCMS 该漏洞代修复、全站点漏洞扫描、安全加固、挂马清理服务,可联系微信:lnmp_wuyi(备注:dede修复)。