lyccyc/CVE-2323-41892_PoC
GitHub: lyccyc/CVE-2023-41892_PoC
该仓库提供 CVE-2023-41892(Craft CMS 未授权远程代码执行漏洞)的 PoC 脚本及配套 Docker 靶场环境,用于在本地实验中复现和验证该漏洞。
Stars: 0 | Forks: 0
# CVE-2023-41892 Craft CMS PoC
本仓库包含 PoC(概念验证)脚本和一个本地 Vulhub 实验环境,用于
复现 CVE-2023-41892,这是 Craft CMS 中的一个未授权远程代码执行
漏洞。
请仅在已授权的本地实验室或您具有明确测试权限的系统中使用本项目。
## 项目结构
```
CVE-2323-41892_PoC/
+-- README.md
+-- LFI_to_RCE.py
+-- Imagick_PoC.py
+-- Vulnhub_env/
+-- docker-compose.yml
+-- README.md
+-- README.zh-cn.md
+-- 1.png ... 5.png
```
### 文件用途
| 路径 | 用途 |
| --- | --- |
| `LFI_to_RCE.py` | 通过 `Psy\Configuration` gadget 进行日志污染及本地文件包含的 PoC。 |
| `Imagick_PoC.py` | 通过 `Imagick` MSL gadget 实现任意文件写入的 PoC。 |
| `Vulnhub_env/docker-compose.yml` | 启动存在漏洞的 Craft CMS 4.4.14 和 MySQL 5.7 的 Docker Compose 实验环境。 |
| `Vulnhub_env/README.md` | 原始 Vulhub 风格的复现说明,包含请求示例和截图。 |
| `Vulnhub_env/README.zh-cn.md` | Vulhub 复现说明的中文版本。 |
| `Vulnhub_env/*.png` | Vulhub 环境文档使用的截图。 |
## 漏洞概述
CVE-2023-41892 影响 `4.0.0-RC1` 至 `4.4.14` 版本的 Craft CMS。
该问题已在 Craft CMS `4.4.15` 中修复。
两个脚本使用的目标漏洞 endpoint 为:
```
/index.php?action=conditions/render
```
这些 PoC 针对默认的本地实验室 URL:
```
http://localhost:8088
```
如果您的实验室运行在其他主机或端口上,请更新
`LFI_to_RCE.py` 和 `Imagick_PoC.py` 顶部的 `URL` 值。
## 环境要求
- Docker 和 Docker Compose
- Python 3
- Python 包:`requests`
安装 Python 依赖:
```
pip install requests
```
## 实验环境搭建
启动存在漏洞的 Craft CMS 环境:
```
cd Vulnhub_env
docker compose up -d
```
打开 Craft CMS 安装程序:
```
http://localhost:8088/admin/install
```
在安装过程中使用以下默认数据库设置:
| 设置 | 值 |
| --- | --- |
| 数据库主机 (Database host) | `db` |
| 数据库名称 (Database name) | `craftcms` |
| 数据库用户 (Database user) | `root` |
| 数据库密码 (Database password) | `root` |
安装完成后,确认站点可正常访问:
```
http://localhost:8088
```
## 使用方法
在仓库根目录下运行命令:
```
cd CVE-2323-41892_PoC
```
### PoC 1:日志污染提升至 RCE
运行:
```
python LFI_to_RCE.py
```
执行流程:
1. 将包含 PHP 代码的格式错误 JSON 发送到 Craft CMS 日志中。
2. 使用当前本地日期构建日志文件路径:
../storage/logs/web-YYYY-MM-DD.log
3. 使用 `craft\elements\conditions\users\UserCondition` 和
`\Psy\Configuration` 包含受污染的日志文件。
4. 检查响应中是否出现 `phpinfo()` 输出。
预期成功输出:
```
[*] Starting Log Poisoning...
[+] Payload sent successfully!
[*] Starting LFI to RCE...
[+] phpinfo() executed successfully!
```
### PoC 2:Imagick MSL 文件写入
运行:
```
python Imagick_PoC.py
```
执行流程:
1. 通过 multipart 表单数据上传 MSL payload。
2. 使用 `Imagick` gadget 触发对象创建。
3. 尝试将 `webshell.php` 写入 web 根目录。
4. 请求 `http://localhost:8088/webshell.php` 并检查是否包含 `phpinfo()`。
预期成功输出:
```
[*] Sending multipart/form-data payload to trigger Imagick gadget...
[+] Success: phpinfo() output found.
```
在触发 payload 后,Imagick 路径可能会导致 PHP worker 崩溃。在
Vulhub 实验环境中,如果在崩溃前 `webshell.php` 已成功写入,
这也可能是正常现象。
## 配置
这两个脚本在文件顶部定义了目标 URL:
```
URL = "http://localhost:8088"
```
如果存在漏洞的实验室暴露在其他地址,请更改此值。
`Imagick_PoC.py` 检查生成的文件的路径:
```
OUTPUT_FILE = "/webshell.php"
```
## 故障排除
### 脚本无法连接
- 确认容器正在运行:
cd Vulnhub_env
docker compose ps
- 确认可以通过 `http://localhost:8088` 访问站点。
- 检查是否已有其他服务占用了 `8088` 端口。
- 如果您更改了暴露的端口,请更新 Python 脚本中的 `URL` 值。
### `LFI_to_RCE.py` 未显示 `PHP Version`
- 确认 Craft CMS 已安装完成。
- 确认 Craft CMS 正在将日志写入 `storage/logs/` 目录下。
- 检查日志文件名的日期是否与容器日期匹配。
- 如果您的主机与容器日期不一致,请更新 `LFI_to_RCE.py` 中生成的 `web-YYYY-MM-DD.log`
路径。
### `Imagick_PoC.py` 对 `/webshell.php` 返回 `404`
- 确认目标环境中已启用 Imagick PHP 扩展。
- 确认 PHP 进程具有写入 web 根目录的权限。
- 确认上传的临时文件在 `/tmp/php*` 目录下创建。
- 如果 PHP worker 在触发请求期间崩溃,请重试一次。
## 清理
停止实验环境:
```
cd Vulnhub_env
docker compose down
```
如果需要全新安装,请移除容器及数据库卷:
```
docker compose down -v
```
## 缓解措施
将 Craft CMS 升级到 `4.4.15` 或更高版本。
如果怀疑遭到利用,请轮换 Craft CMS 的安全密钥、数据库
凭据、应用密钥,以及存储在环境中的任何凭据。
## 参考
- Vulhub 复现:
- Craft CMS 公告:
- NVD 条目:
标签:CISA项目, Craft CMS, Docker, PoC, Python, 安全防御评估, 无后门, 暴力破解, 版权保护, 网络信息收集, 网络安全审计, 请求拦截, 逆向工具