Objectif
Après l’obtention d’un reverse shell, le terminal est souvent limité :
- pas d’auto-complétion ;
- gestion incorrecte de
Ctrl+C; - affichage cassé ;
- impossibilité d’utiliser correctement
nano,top,less, etc.
Cette recette permet d’obtenir un shell interactif beaucoup plus confortable et proche d’une véritable session SSH.
Sans stabilisation,
Ctrl+Cpeut fermer complètement le reverse shell.
Préparer le listener côté Kali
Deux possibilités peuvent être utilisées pour préparer le listener sur Kali : rlwrap ou un simple nc.
Listener avec rlwrap
rlwrap apporte immédiatement un meilleur confort d’utilisation, notamment pour l’édition de ligne et l’historique des commandes :
rlwrap -cAr nc -lvnp 4444
Cette commande convient bien lorsque tu souhaites disposer d’un shell plus agréable dès la réception de la connexion.
Listener avec nc
Tu peux également utiliser directement Netcat :
nc -lvnp 4444
Cette version est plus minimale, mais elle évite d’ajouter une couche supplémentaire entre le terminal local et le reverse shell. Elle peut donc être préférable lorsque tu comptes effectuer une stabilisation complète avec stty raw -echo.
En pratique :
- utilise
rlwrappour améliorer rapidement un shell simple ; - utilise
ncpour conserver un listener minimal avant une stabilisation complète.
Les méthodes présentées dans cette recette peuvent être utilisées avec les deux types de listeners.
Identifier les outils disponibles
Dans le reverse shell, commence par rechercher les outils disponibles sur la cible :
which python3 python script perl socat bash sh nc 2>/dev/null
Exemple :
/usr/bin/python3
/usr/bin/script
/usr/bin/perl
/bin/bash
/bin/sh
Tu peux ensuite utiliser la meilleure méthode disponible dans cet ordre :
python3pythonscript/bin/bash -i/bin/sh -i
Méthode 1 — Python
C’est la méthode standard en CTF dès que Python est disponible sur la cible.
Dans le reverse shell
Teste d’abord python3 :
python3 -c 'import pty; pty.spawn("/bin/bash")'
Si python3 n’est pas disponible :
python -c 'import pty; pty.spawn("/bin/bash")'
Mettre le shell en arrière-plan
Utilise la combinaison de touches suivante :
Ctrl+Z
Dans ton terminal Kali
Désactive l’écho local, passe le terminal en mode brut, puis ramène le reverse shell au premier plan :
stty raw -echo; fg
Après fg, il peut être nécessaire d’appuyer une fois sur Entrée pour retrouver l’invite du reverse shell.
Configurer le terminal distant
Deux variantes peuvent être utilisées.
Variante avec export TERM
Dans le reverse shell :
export TERM=xterm
Variante avec reset
Tu peux également réinitialiser le terminal avec :
reset
Lorsque reset demande le type de terminal, réponds :
xterm
Définis ensuite explicitement la variable TERM :
export TERM=xterm
Cette variante permet de réinitialiser un affichage devenu incorrect, puis d’indiquer clairement aux programmes interactifs que le terminal doit être traité comme un terminal xterm.
Adapter la taille du terminal
Définis ensuite le nombre de colonnes et de lignes :
stty cols 132 rows 34
Adapte
colsetrowsà la taille réelle de ton terminal local.
Tu peux obtenir ces valeurs dans un autre terminal Kali avec :
stty size
La commande affiche d’abord le nombre de lignes, puis le nombre de colonnes :
34 132
Tu peux alors utiliser :
stty rows 34 cols 132
Méthode 2 — script
Si Python n’est pas disponible, script permet souvent d’obtenir un véritable pseudo-terminal stable et propre.
Dans le reverse shell
script -qc /bin/bash /dev/null
Alternative :
script /dev/null -c bash
Mettre le shell en arrière-plan
Ctrl+Z
Dans ton terminal Kali
stty raw -echo; fg
Après fg, appuie une fois sur Entrée si l’invite du reverse shell ne réapparaît pas immédiatement.
Configurer le terminal distant
Tu peux définir directement le type de terminal :
export TERM=xterm
Tu peux aussi utiliser la variante avec reset :
reset
Lorsque le type de terminal est demandé, réponds :
xterm
Adapter la taille du terminal
stty cols 132 rows 34
Adapte
colsetrowsà la taille réelle de ton terminal local.
Méthode 3 — Fallback minimal avec bash -i
Si ni Python ni script ne sont disponibles, un shell interactif minimal peut malgré tout être obtenu.
Dans le reverse shell
/bin/bash -i
Si /bin/bash n’est pas disponible :
/bin/sh -i
Mettre le shell en arrière-plan
Ctrl+Z
Dans ton terminal Kali
stty raw -echo; fg
Après fg, appuie une fois sur Entrée si nécessaire.
Configurer le terminal distant
Utilise l’une des deux variantes suivantes.
Avec la variable TERM :
export TERM=xterm
Ou avec reset :
reset
Lorsque reset demande le type de terminal, réponds :
xterm
Adapter la taille du terminal
stty cols 132 rows 34
Adapte
colsetrowsà la taille réelle de ton terminal local.
Restaurer le terminal Kali après la fermeture du shell
Après la fermeture volontaire ou accidentelle du reverse shell, ton terminal Kali peut rester sans écho ou sembler bloqué à cause de la commande :
stty raw -echo
Dans ce cas, saisis la commande suivante, même si les caractères ne s’affichent pas :
reset
Appuie ensuite sur Entrée.
Si cela ne suffit pas, ferme le terminal concerné et ouvre-en un nouveau.
Alternatives supplémentaires
Certaines cibles peuvent également disposer d’outils utiles comme :
perl;socat.
socat permet notamment d’obtenir un shell très proche d’une véritable session SSH, mais nécessite généralement une configuration plus avancée.