Outil gratuit · 100 % navigateur
Reverse Shell Generator
Réservé aux tests d’intrusion autorisés, CTF et laboratoires. L’utilisation sur un système sans autorisation est illégale (art. 323-1 du Code pénal). Les commandes sont générées localement dans votre navigateur.
IP ou nom d’hôte de votre machine d’écoute.
Port d’écoute, de 1 à 65535.
- Bash -i
- Bash 196
- Bash read line
- Bash 5
- Bash UDP
- nc -e
- nc -c
- nc mkfifo
- BusyBox nc -e
- ncat -e
- ncat UDP
- Perl
- Perl sans sh
- Python #1
- Python3 #2
- Python3 court
- Ruby
- Ruby sans sh
- PHP exec
- PHP shell_exec
- PHP system
- PHP passthru
- PHP popen
- PHP proc_open
- Node.js
- Node.js (net+spawn)
- Java Runtime.exec
- Groovy
- Telnet
- zsh
- Lua
- Golang
- awk
- socat #1
- socat #2 (statique)
- sqlite3 nc mkfifo
- PowerShell #1
- PowerShell #2 (one-liner)
- PowerShell #3 (court)
- PowerShell -e (Base64 UTF-16LE)
- ConPtyShell (référence)
- Windows nc.exe -e cmd
- linux/x64 shell_reverse_tcp (ELF)
- windows/x64 shell_reverse_tcp (EXE)
- php/reverse_php
- java/jsp_shell_reverse_tcp (WAR)
- python/shell_reverse_tcp
- windows/x64 shell_reverse_tcp (ASPX)
- nc -lvnp (bind)
- Python bind
- PHP bind
Aucun payload ne correspond à ce filtre.
Bash -i
Reverse · bash
LListener
TTYStabiliser le shell
Après réception du shell, déroulez ces étapes pour obtenir un terminal complet (complétion, flèches, Ctrl+C).
- 01Spawn pty (Python)
python3 -c 'import pty; pty.spawn("/bin/bash")' - 02Spawn pty (script)
script -qc /bin/bash /dev/null - 03Backgrounder le shell
Ctrl+Z - 04Mode raw côté attaquant
stty raw -echo; fg - 05Réinitialiser l’affichage
reset - 06Type de terminal
export TERM=xterm-256color - 07Taille du terminal
stty rows 38 cols 116
Principe d’un reverse shell
Un reverse shell est un interpréteur de commandes dont l’entrée et la sortie sont redirigées vers une connexion réseau ouverte par la machine cible vers la machine de l’opérateur. L’opérateur lance d’abord un listener, un programme qui attend la connexion sur un port donné. Quand le payload s’exécute sur la cible, il se connecte à ce listener, et chaque commande tapée côté opérateur s’exécute sur la cible.
Ce sens de connexion a une raison pratique. La plupart des pare-feu filtrent strictement les connexions entrantes et laissent passer le trafic sortant. Sur un port courant comme 443 ou 53, le reverse shell emprunte un flux que le réseau autorise déjà.
Reverse shell et bind shell
Avec un bind shell, la cible ouvre un port et attend que l’opérateur s’y connecte. La mise en place est simple, mais le port doit être joignable depuis l’extérieur, ce qui est rare derrière un NAT ou un pare-feu entrant. Le reverse shell inverse le sens de la connexion et contourne ce problème. En contrepartie, l’opérateur doit exposer une IP et un port joignables depuis la cible, et le filtrage sortant de la cible doit laisser passer la connexion.
Stabiliser le shell obtenu
Un reverse shell brut n’a ni complétion ni historique, Ctrl+C coupe la session, et les programmes
interactifs comme ssh, su ou vim se comportent mal. On le stabilise en lui attachant un pseudo-terminal
(PTY). Sous Linux, la séquence habituelle commence par
python3 -c 'import pty; pty.spawn("/bin/bash")' ou script -qc /bin/bash /dev/null.
On suspend ensuite le shell avec Ctrl+Z, on passe son propre terminal en mode brut avec
stty raw -echo; fg, puis on exporte TERM=xterm-256color et on règle la taille
avec stty rows 38 cols 116 (valeurs à reprendre de stty size sur votre
terminal). socat et pwncat-cs font cette bascule automatiquement.
Détecter et prévenir les reverse shells
Côté défense, un reverse shell signale presque toujours une compromission déjà réussie : une injection de commande, un upload de fichier ou un service vulnérable a permis d’exécuter du code. Deux leviers s’appliquent : empêcher la connexion de sortir, et repérer le comportement quand il se produit.
Filtrage sortant et durcissement
Le filtrage sortant (egress) est la mesure la plus efficace. Un serveur applicatif a rarement besoin d’ouvrir des connexions arbitraires vers Internet. En limitant les flux sortants aux destinations connues (proxy, dépôts de paquets, API partenaires), on coupe le canal de retour même quand l’exploitation réussit.
Le reste du durcissement réduit les options de l’attaquant. Les services tournent sous des comptes
dédiés sans shell interactif, dans des conteneurs au système de fichiers en lecture seule. Sous Windows,
AMSI et les règles ASR de Defender bloquent une partie des payloads PowerShell. Sous Linux, retirer de la
production les interpréteurs et outils inutiles (compilateurs, nc avec -e, socat) limite
les variantes utilisables.
Filiation des processus et télémétrie
Le signal le plus fiable est une filiation de processus anormale. Un serveur web ne lance pas de shell
en fonctionnement normal. w3wp.exe qui démarre cmd.exe ou
powershell.exe sous IIS, ou httpd, nginx ou java qui
démarre bash, sh, python ou nc sous Linux justifient
une alerte.
Sous Windows, Sysmon fournit les deux événements utiles. L’Event ID 1 (création de processus) donne la
ligne de commande complète et le processus parent, y compris les arguments -EncodedCommand
de PowerShell, qu’il suffit de décoder. L’Event ID 3 (connexion réseau) rattache une connexion sortante
au processus qui l’a ouverte. Un powershell.exe ou un binaire Office qui se connecte à une
IP externe inconnue est un cas classique.
Sous Linux, auditd journalise les appels execve et connect. Des règles sur
ces appels font apparaître l’usage de /dev/tcp, de nc ou d’un interpréteur
avec redirection des descripteurs 0, 1 et 2. La création d’une FIFO avec mkfifo dans
/tmp juste avant une connexion sortante correspond à la variante netcat la plus courante.
Pris un par un, ces indicateurs restent faibles. La détection devient fiable quand on corrèle la filiation du processus, sa ligne de commande et la connexion réseau qu’il ouvre, sur la même machine et dans la même fenêtre de temps.
?Questions fréquentes
Est-ce légal d’utiliser un reverse shell ?
Oui, dans un cadre autorisé : test d’intrusion couvert par un mandat écrit, CTF, ou laboratoire qui vous appartient. Sans autorisation, l’accès et le maintien frauduleux dans un système de traitement automatisé de données sont punis par les articles 323-1 et suivants du Code pénal.
Les payloads sont-ils envoyés à un serveur ?
Non, les commandes sont générées en JavaScript dans votre navigateur. L’IP, le port et le payload ne quittent pas votre machine, et la page continue de fonctionner hors ligne une fois chargée.
Pourquoi le reverse shell ne se connecte pas ?
Vérifiez dans cet ordre : le listener écoute sur le bon port, l’IP d’écoute est joignable depuis la cible, aucun filtrage sortant ne bloque la connexion, et l’interpréteur choisi existe sur la cible (bash avec /dev/tcp, python3, nc avec -e).
Quelle différence entre reverse shell et bind shell ?
Avec un reverse shell, la cible ouvre la connexion vers votre machine, ce qui passe la plupart des pare-feu qui ne filtrent que l’entrant. Avec un bind shell, la cible ouvre un port et attend votre connexion, ce qui échoue dès qu’un pare-feu ou un NAT bloque les connexions entrantes.
Comment stabiliser un shell ?
Lancez un pseudo-terminal avec python3 -c 'import pty; pty.spawn("/bin/bash")', suspendez le shell avec Ctrl+Z, passez votre terminal en mode raw avec stty raw -echo; fg, puis exportez TERM et réglez la taille avec stty rows et cols. Le panneau TTY de l’outil reprend chaque commande.
Pourquoi encoder un payload en Base64 ou en URL ?
Pour qu’il traverse un contexte qui interprète certains caractères, comme un paramètre d’URL ou un champ de formulaire. PowerShell attend aussi une commande en Base64 d’UTF-16LE avec -EncodedCommand. Un EDR décode ces formats sans difficulté, l’encodage ne sert donc pas à se cacher.
+Autres outils
- ⟲Forge
Recettes d’encodage et de décodage, à la CyberChef.
- {·}JWT Inspector
Décodez un JWT, lisez ses claims, repérez les faiblesses.
- #Hash Lab
Calculez des empreintes et identifiez un format de hash.