Web shell bypass par le Content-Type

Web shell upload via Content-Type restriction bypass

Web shell via contournement de la restriction Content-Type

Lab : Web shell upload via Content-Type restriction bypass

Ce laboratoire présente une fonctionnalité d’upload d’avatar vulnérable. L’application tente de bloquer l’envoi de fichiers non autorisés en se basant uniquement sur le Content-Type, une valeur entièrement contrôlable par l’utilisateur.

L’objectif est d’uploader une web shell PHP et de l’utiliser pour lire le fichier sensible :

Accès initial

Connexion avec les identifiants fournis :

  • Utilisateur : wiener

  • Mot de passe : peter

Une fonctionnalité permet de téléverser une image de profil (avatar).

Tentative d’upload d’une web shell PHP

On prépare un fichier PHP simple :

Lors de l’upload, le serveur refuse le fichier avec le message suivant :

Sorry, file type application/x-php is not allowed. Only image/jpeg and image/png are allowed.

triangle-exclamation

En observant la requête HTTP, on constate que le rejet repose uniquement sur l’en-tête Content-Type :

Bypass du contrôle Content-Type

Comme le serveur fait confiance à la valeur déclarée par le client, il suffit de la modifier.

On remplace :

  • Content-Type: application/x-php

par :

Sans changer le contenu réel du fichier.

L’upload est alors accepté.

Exécution de commandes à distance

Le fichier est accessible dans le répertoire des avatars

Test d’exécution de commande :

La commande est bien exécutée côté serveur.

Lecture du fichier secret

Il ne reste plus qu’à lire le fichier demandé :

Mis à jour