ThinkPHP6.0漏洞危险性更高,因其攻击链更短、利用门槛更低、防御绕过更隐蔽;一个可控PHPSESSID Cookie即可写入Web目录任意PHP文件,无需登录或用户输入。

ThinkPHP6.0漏洞的危险程度远超早期版本,不是因为数量多,而是因为攻击链更短、利用门槛更低、防御绕过更隐蔽——一个可控的PHPSESSID Cookie就能写入Web目录下的任意PHP文件,无需登录、无需交互、不依赖任何用户输入点。
6.0.0–6.0.13反序列化RCE是当前最致命的漏洞
方法一:直接触发远程命令执行
攻击者构造恶意序列化数据,通过session存储机制注入到服务器,框架在未校验的情况下调用unserialize(),导致任意PHP代码执行。
这一步不需要管理员操作,只要网站启用默认session驱动(文件存储),漏洞即生效。
方法二:利用LeagueFlysystemCachedStoragePsr6Cache组件缺陷
该组件在6.0.0–6.0.13中未对反序列化入口做白名单限制,攻击者可精准控制__wakeup()或__destruct()触发点,Linux和Windows环境均能稳定getshell。
【必须升级至≥6.0.14】,仅修改配置或禁用功能无法根除风险。
ThinkPHP 5.1.30之前控制器绕过RCE仍广泛存在
第一步:识别是否启用多模块或URL兼容模式
检查config/app.php中'url_route_must' => false或'url_param_type' => 1,这两个配置会让路由解析跳过控制器白名单校验。
立即学习“PHP免费学习笔记(深入)”;
第二步:构造?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
反斜杠被parseUrl()忽略,导致think\app被误认为合法控制器命名空间,最终调用PHP内置函数。
第三步:确认PHP版本是否≥7.1
低版本PHP可能因函数签名差异导致利用失败,但7.1+环境下system('id')类命令可直接回显结果。
5.1.22等老旧政企系统仍在运行,且官方自2021年起停止补丁支持。
ThinkPHP 3.2.x的preg_replace /e漏洞仍在被批量利用
这个漏洞不是历史遗迹,而是真实活跃的攻击入口点。
CentOS 7上大量遗留项目运行在PHP 5.6环境,preg_replace的/e修饰符允许正则替换时直接执行代码。
只需一个可控参数(如搜索框、URL路径段),攻击者就能注入payload:
/?s=preg_replace(/.*/e, 'assert($_POST[x])', '1')
【无安全补丁可用】,ThinkPHP 3.2已于2019年终止维护,Nginx拦截规则只能延缓攻击,不能替代迁移。
6.0任意文件写入漏洞比5.x更难防御
方法一:会话ID路径遍历写shell
将PHPSESSID设为../../../public/shell.php,框架未过滤../,直接生成对应路径的session文件,内容由攻击者完全控制。
方法二:配合pearcmd实现RCE
前提是开启多语言功能(header中含think_lang),通过lang参数触发../../目录穿越,加载extend/pearcmd/pearcmd/index并执行cmd参数。
这种利用方式在外贸、政府类网站中命中率极高,因为多语言是常见刚需配置。
与5.x相比,6.0的漏洞链不再依赖URL路由解析缺陷,而是下沉到会话存储层和扩展模块加载机制,WAF规则很难覆盖所有变种路径。



















