Web shell par condition de course
Web shell upload via race condition
Objectif du laboratoire
Ce laboratoire présente une fonctionnalité d’upload d’images avec une validation apparemment robuste. Cependant, il est possible de contourner cette validation en exploitant une condition de course pendant le traitement du fichier.
L’objectif est de téléverser un web shell PHP, puis de l’utiliser pour lire le fichier sensible :
/home/carlos/secret.
Contexte
Authentification possible avec :
wiener:peterSeuls les fichiers JPG et PNG sont autorisés
La réponse du serveur prend environ 1 à 2 secondes, ce qui suggère un traitement asynchrone exploitable
Tentative initiale
On tente d’uploader un fichier PHP classique :
Résultat :
Refus du serveur
Message indiquant que seuls les fichiers JPG et PNG sont acceptés
Sorry, only JPG & PNG files are allowed Sorry, there was an error uploading your file.
Observation clé
Un délai perceptible existe entre :
Le moment où le fichier est écrit sur le disque
Le moment où la validation est terminée et le fichier potentiellement supprimé
Ce laps de temps ouvre la porte à une condition de course.

Exploitation de la condition de course
Lancer une attaque avec Intruder (ou un outil équivalent)
Envoi répété et rapide de la requête d’upload
Payload nul ou répétitif, exécuté en boucle

Pendant que le serveur traite les uploads :
Rafraîchir continuellement l’URL du fichier supposé
À un moment donné, le fichier est accessible avant que la validation ne l’invalide
Le code PHP est alors interprété par le serveur

Exploitation du web shell
Une fois l’exécution confirmée, on peut lire le fichier secret :

Mis à jour