File upload
You can just upload [jpeg,gif] files.
Command Execution Form
===== Exemple 2 =====
Voici un exemple de code PHP d'une fonctionnalité d'envoi de fichier vulnérable :
File upload
File upload
You can just upload [jpeg,gif] files.
The file has been uploaded here: $target_file.";
} else {
// Affichage d'un message d'erreur en cas de problème lors de l'upload du fichier
echo "Sorry, there was an error uploading your file.
";
}
}
?>
Ce code n'effectue aucun contrôle côté serveur sur la nature du fichier envoyé. Le seul contrôle effectué est réalisé côté client via le paramètre "accept" dans la balise
Ce contrôle peut facilement être contourné, par exemple à l'aide d'un proxy applicatif tel que BurpSuite. Un utilisateur malveillant peut alors envoyer n'importe quel type de fichier, comme par exemple un webshell.
Pour prévenir l'exploitation de cette fonctionnalité, il aurait fallu implémenter des contrôles en PHP côté serveur sur le type MIME et l'extension du fichier envoyé, et renvoyer une erreur à l'utilisateur si le fichier ne correspond pas au type attendu.
===== Exemple 3 =====
Voici un exemple de code PHP vulnérable à des attaques de type MIME :
File Upload
File Upload
Ce code est une page web qui permet à l'utilisateur de télécharger un fichier sur le serveur via un formulaire. Cependant, il est vulnérable à des attaques de type MIME, ce qui signifie que des fichiers malveillants peuvent être téléchargés sur le serveur en utilisant des en-têtes MIME falsifiées.
==== Correction du code : ====
Pour résoudre cette vulnérabilité, il est nécessaire de vérifier le contenu réel du fichier plutôt que de se fier uniquement à l'en-tête MIME fournie par le client. Voici un patch qui améliore la sécurité du téléchargement de fichiers :
Avec ce patch, la vulnérabilité est corrigée en vérifiant le contenu réel du fichier avec getimagesize(). De plus, nous utilisons une liste blanche d'extensions de fichiers autorisées ($allowedExtensions) pour s'assurer que seuls les fichiers d'images avec des extensions spécifiques (JPG, JPEG et PNG) sont autorisés à être téléchargés. Cela rend le processus d'envoi plus sûr et prévient les attaques de type MIME.
===== CWEs =====
* [[https://cwe.mitre.org/data/definitions/287.html|CWE-287 : Improper Authentication]]
* When an actor claims to have a given identity, the software does not prove or insufficiently proves that the claim is correct.
* [[https://cwe.mitre.org/data/definitions/553.html|CWE-553 : Command Shell in Externally Accessible Directory]]
* A possible shell file exists in /cgi-bin/ or other accessible directories. This is extremely dangerous and can be used by an attacker to execute commands on the web server.
===== References =====
URL :
* https://repository.root-me.org/Exploitation%20-%20Web/EN%20-%20Secure%20file%20upload%20in%20PHP%20web%20applications.pdf
* https://github.com/flozz/p0wny-shell
* https://www.prplbx.com/resources/blog/exploiting-file-upload-vulnerabilities/
* https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload
* https://book.hacktricks.xyz/pentesting-web/file-upload
* https://repo.zenk-security.com/Techniques%20d.attaques%20%20.%20%20Failles/Webhacking:%20les%20failles%20php.pdf
* https://repo.zenk-security.com/Techniques%20d.attaques%20%20.%20%20Failles/Securite%20PHP%20-%20Faille%20upload.pdf
====== Retour fiches vulnérabilités ======
* [[cyber:vulnerabilite:accueil|Cyber fiches vulnérabilités]]