phpPHP Web Shells

🧠 Introduction

PHP (Hypertext Preprocessor) est un langage de script open-source, couramment utilisé pour le développement web cÎté serveur. En octobre 2021, PHP était le langage cÎté serveur le plus répandu, alimentant plus de 78 % des sites web dont la technologie est connue (selon W3Techs).

Son utilisation massive signifie que de nombreuses applications web tournent sur un backend PHP, ce qui représente une surface d'attaque potentielle pour un testeur d'intrusion. Une mauvaise configuration ou une vulnérabilité dans une application PHP peut permettre l'injection d'un web shell PHP, facilitant l'exécution de commandes arbitraires sur le serveur.


🔍 Exemple de contexte : rConfig

Prenons l’exemple concret de rConfig, une application de gestion de configuration rĂ©seau, ici en version 3.9.6. Celle-ci utilise PHP pour son backend, comme en tĂ©moigne la prĂ©sence d’un fichier login.php.

Lorsqu’un utilisateur remplit le formulaire de connexion et clique sur le bouton « Login », les informations sont envoyĂ©es au serveur pour ĂȘtre traitĂ©es via du code PHP. Cette observation nous donne une indication importante : il est possible qu’un web shell PHP fonctionne si nous rĂ©ussissons Ă  l’y injecter.


⚙ Manipulation : upload manuel d’un Web Shell PHP

Dans rConfig, les administrateurs peuvent gérer les fournisseurs de matériel réseau. En allant dans le menu Devices > Vendors > Add Vendor, une interface permet de renseigner un nom de fournisseur et de téléverser un logo.

C’est ici que nous allons tenter de tĂ©lĂ©verser un Web Shell PHP, en profitant d’une faille de vĂ©rification du type MIME.

Nous utiliserons le Web Shell PHP de WhiteWinterWolf. Celui-ci peut ĂȘtre tĂ©lĂ©chargĂ© ou copiĂ© dans un fichier .php. L’interface de rConfig restreint l’upload Ă  certains types de fichiers (ex : .png, .jpg, .gif), et refuse tout fichier .php.

💡 C’est ici qu’intervient Burp Suite.

đŸ› ïž Étapes avec Burp Suite

  1. Configurer le proxy de votre navigateur pour rediriger le trafic HTTP vers Burp (127.0.0.1:8080).

  2. Intercepter la requĂȘte POST d’upload du fichier avec Burp.

  3. Modifier le Content-Type du fichier dans la requĂȘte HTTP, en le remplaçant par image/gif au lieu de application/x-php.

  4. RelĂącher la requĂȘte (Forward) pour envoyer le fichier modifiĂ© au serveur.

La page affichera alors le message : Added new vendor NetVen to Database, indiquant que le fichier a été accepté et enregistré.

Dans la liste des fournisseurs, le logo de NetVen apparaĂźt comme une icĂŽne de fichier inconnu (ripped paper), signalant que le fichier n’a pas Ă©tĂ© interprĂ©tĂ© comme une image — exactement ce que nous recherchions.


đŸ–„ïž Exploitation du Web Shell

Nous pouvons maintenant naviguer vers le chemin suivant pour activer notre Web Shell via le navigateur :

Cela nous donne une session shell non interactive dans le navigateur, à partir de laquelle nous pouvons exécuter des commandes sur le systÚme Linux sous-jacent.


⚠ Points d'attention avec les Web Shells

L’usage de web shells prĂ©sente plusieurs limitations et risques :

  • 🔄 Suppression automatique : certains serveurs peuvent purger rĂ©guliĂšrement les fichiers uploadĂ©s.

  • ⛓ Command chaining limitĂ© : les chaĂźnes de commandes (&&, |) peuvent ne pas fonctionner.

  • đŸš« InstabilitĂ© : la shell peut ĂȘtre lente, instable ou non interactive.

  • đŸ§Ÿ Traces Ă©videntes : un fichier .php non supprimĂ© peut rester visible et prouver l’intrusion.

Lors d’un test d’intrusion, surtout dans un cadre black-box ou Red Team, il est recommandĂ© de :

  • PrivilĂ©gier les reverse shells si possible.

  • Supprimer tout fichier uploadĂ© aprĂšs usage.

  • Documenter toutes les mĂ©thodes utilisĂ©es (nom de fichier, hash SHA1/MD5, chemins, succĂšs/Ă©checs).

Cette documentation est cruciale pour le rapport de mission, permettant de prouver techniquement les actions réalisées tout en conservant la transparence vis-à-vis du client.


In the example shown, what must the Content-Type be changed to in order to successfully upload the web shell? (Format: .../... )

Comme mentionné dans le cours, nous devons replacet la valeur du Content-Type par image/gif.


Use what you learned from the module to gain a web shell. What is the file name of the gif in the /images/vendor directory on the target? (Format: xxxx.gif)

Nous accédons au site web de notre cible :

Nous nous connectons Ă  l'aide des identifiants admin:admin.

Nous nous rendons ensuite dans le répertoire Devices>Vendors afin de renseigner dans un premier temps le nom de notre vendeur ainsi qu'une image, que nous allons utiliser pour modifier son contenu et afficher un PHP Web Shell :

Une fois ces éléments préparés, nous exécutons notre proxy et BurpSuite :

Une fois burp lancé et le proxy lancé, nous pouvons enregistrer les informations envoyées afin de les interceptés et de les modifier.

Une fois ceci effectuĂ©, nous pouvons observer la bonne interception de la requĂȘte via Burp :

Nous pouvons maintenant modifier notre requĂȘte et intĂ©grer notre WebShell PHParrow-up-right :

Une fois la requĂȘte modifiĂ©e, nous pouvons l'envoyer au serveur.

Notre Shell envoyé, nous pouvons y accéder via le lien https://10.129.6.137/images/vendor/exploit.phparrow-up-right :

Il nous est maintenant possible d'effectuer des commandes via l'interface Web de notre cible afin de récupérer le nom du fichier .gif présent dans le répertoire /images/vendor :

Le fichier .gif présent dans le répertoire /images/vendor est ajax-loader.gif.


Last updated