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:peter

  • Seuls 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

triangle-exclamation

Observation clé

Un délai perceptible existe entre :

  1. Le moment où le fichier est écrit sur le disque

  2. 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