thinkphp 6.0.0–6.0.13 存在反序列化 rce 漏洞(cve-2024-48112),需升级至 ≥6.0.14;5.1.30 前存在控制器绕过 rce;3.2.x 的 preg_replace /e 模式仍被活跃利用;php 版本须 ≥8.2 才能有效防御 rce。

ThinkPHP 6.0.13 之前版本存在反序列化 RCE 漏洞
这是当前生产环境最常踩的坑:ThinkPHP 6.0.0–6.0.13 使用了未加固的 LeagueFlysystemCachedStoragePsr6Cache 组件,攻击者可构造恶意反序列化 payload,直接执行系统命令。漏洞编号 CVE-2024-48112(2024 年公开),Linux 和 Windows 环境下均有效。
- 升级不是“可选”,而是“必须”——
composer update topthink/framework:^6.0.14是最低安全基线 - 若因依赖锁死无法升级,临时缓解方案是禁用
unserialize()相关功能,在php.ini中加入disable_functions = unserialize(注意:可能影响部分缓存/会话逻辑) - 不要只看框架主版本号——有些项目用的是 6.0.x 分支但长期未更新 patch 版本,
php think version输出的完整版本号才是判断依据
ThinkPHP 5.1.30 之前版本存在控制器名绕过 RCE
该漏洞影响范围极广:当开启多模块或 URL 兼容模式时,攻击者可通过构造类似 ?s=index/ hinkpp/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1 的请求,绕过方法名白名单,直接调用 PHP 内置函数。PHP 7.1+ 下尤其危险。
- 5.1 系列已停止维护,
5.1.30是最后一个修复该问题的版本;低于此版本(如常见于老旧政企系统的5.1.22)必须立即升级或下线 - 即使升级到 5.1.30,也不建议继续使用——它不支持 PSR-15 中间件、无原生依赖注入,且官方自 2021 年起不再发布安全补丁
- 检查是否启用危险配置:
'url_route_must' => false或'url_param_type' => 1会显著扩大攻击面
ThinkPHP 3.2.x 的 preg_replace /e 模式仍在被批量利用
这不是“历史漏洞”,而是真实活跃的攻击链起点。CentOS 7 上仍有大量遗留 ThinkPHP 3.2 项目运行在 PHP 5.6 环境中,而 preg_replace 的 /e 修饰符允许直接执行代码,攻击者只需一个可控正则参数即可 getshell。
- 典型触发点在模板解析、路由分发、语言包加载等位置,错误日志中常出现
Warning: preg_replace(): The /e modifier is deprecated—— 这已是被攻击的前兆 - 没有安全补丁可用:ThinkPHP 3.2 官方已于 2019 年终止维护,唯一可靠解法是迁移至 TP6+ 或重写核心模块
- 应急措施可加 Nginx 规则拦截:
if ($args ~* "(s=|/think\app/invokefunction|function=call_user_func)") { return 403; }
PHP 版本与 ThinkPHP 的安全绑定关系不能松动
框架安全 ≠ 环境安全。很多团队升级了 TP8,却仍跑在 PHP 7.4 上,结果因缺少 JIT 编译和更严格的类型校验,让某些绕过逻辑(如弱类型比较导致的权限绕过)依然生效。
- TP8.0+ 要求 PHP ≥ 8.0,但仅满足最低版本不够——
PHP 8.2+才默认禁用create_function()、强化反序列化类型约束,这才是真正堵住 RCE 渠道的关键层 - Ubuntu 22.04 默认 PHP 8.1,CentOS 7 默认 PHP 5.4(需手动升级),不同发行版的底层 PHP 行为差异会直接影响漏洞利用成功率
- 用
php -v和php --ini双重确认实际运行版本和配置文件路径,Docker 容器里常存在镜像标签误导(如php:8.0-apache镜像内实际是 8.0.30,但宿主机 phpinfo 显示的是旧版本)
安全水位线从来不在框架文档里,而在你最后一次 composer update 和 apt upgrade 的时间戳上。别信“没出事就没事”,RCE 漏洞一旦被利用,往往连日志都来不及留下。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











