Introduction to Web Shells

🌐 Contexte

Il est presque certain que l'on rencontrera des serveurs web au cours de notre apprentissage et de notre pratique active du pentest. Une grande partie des services logiciels mondiaux migrent vers des plateformes web accessibles via un navigateur et le protocole HTTP/S. On peut prendre l'exemple du site que l'on utilise actuellement : il est intégralement accessible dans un navigateur, depuis n'importe quel endroit du monde avec un simple accÚs Internet.

Aujourd'hui, les loisirs numériques tels que les jeux vidéo, la musique ou encore la vidéo à la demande passent tous par des applications web ou mobiles. Cela signifie que nous ciblerons de plus en plus souvent des applications web dans nos engagements.

Lors des tests d'intrusion externes, il est fréquent de constater que les réseaux périmétriques des clients sont bien sécurisés. Ils n'exposent plus aussi facilement des services vulnérables comme SMB, qu'on rencontre désormais principalement lors des tests internes. Lors des engagements externes, les principales méthodes pour "entrer" dans le réseau sont :

  • les attaques contre les applications web (tĂ©lĂ©versement de fichiers, injections SQL, RFI/LFI, injection de commandes, etc.),

  • les attaques de type password spraying (sur RDS, portails VPN, Citrix, OWA... utilisant une authentification AD),

  • ou l'ingĂ©nierie sociale.

Les applications web constituent aujourd'hui la majorité de la surface exposée lors des évaluations externes, représentant ainsi une surface d'attaque importante. Par exemple, on peut parfois trouver des formulaires de téléversement accessibles publiquement, nous permettant d'envoyer un fichier PHP, JSP ou ASP.NET contenant une web shell. Parfois, c'est une fonctionnalité accessible en tant qu'utilisateur authentifié qui le permet. Une méthode trÚs appréciée consiste à contourner les vérifications cÎté client sur une fonctionnalité de "photo de profil" pour y téléverser une web shell.

Certains services comme Tomcat, Axis2 ou WebLogic permettent mĂȘme de dĂ©ployer du code JSP via un fichier WAR. On peut Ă©galement tomber sur un service FTP mal configurĂ©, autorisant le tĂ©lĂ©versement de fichiers directement dans le rĂ©pertoire webroot du serveur.

Bien sûr, d'autres techniques existent pour téléverser une web shell, mais elles dépassent le cadre de cette introduction. Ce qui nous intéresse ici, c'est de comprendre ce qui se passe aprÚs avoir identifié une vulnérabilité de téléversement non restreint ou une mauvaise configuration.


đŸ’» Qu'est-ce qu'une Web Shell ?

Une web shell est une session shell accessible depuis un navigateur web, permettant d'interagir avec le systÚme d'exploitation sous-jacent du serveur web. Pour obtenir une exécution de code à distance via une web shell, il faut d'abord exploiter une vulnérabilité ou une mauvaise configuration permettant le téléversement de fichiers.

Les web shells sont gĂ©nĂ©ralement des fichiers contenant du code Ă©crit dans le mĂȘme langage que celui utilisĂ© par l’application cible (PHP, ASP.NET, JSP
). Une fois tĂ©lĂ©versĂ© et accessible, le fichier permet d’exĂ©cuter des commandes sur le serveur depuis le navigateur, comme si l’on utilisait un terminal.

⚠ Il est important de noter que s’appuyer uniquement sur une web shell pour interagir avec la machine peut s’avĂ©rer instable et peu fiable :

  • Certains serveurs suppriment automatiquement les fichiers uploadĂ©s aprĂšs un certain temps ;

  • D'autres peuvent restreindre les permissions associĂ©es Ă  l'interprĂ©tation du fichier.

Ainsi, l'objectif d'une web shell n’est souvent qu’une Ă©tape intermĂ©diaire vers quelque chose de plus stable : une reverse shell interactive.


📚 Ressources utiles


Mis Ă  jour