Reverse Shells 101
Introduction
Lorsque vous faites des pentest, des challenges ou des Capture the Flag (CTF), vous devez souvent obtenir un accès shell à une machine compromise. Dans un accès shell classique comme SSH, votre machine (agissant en tant que client) se connecte à une autre machine (agissant en tant que serveur).
Une coque inversée est … eh bien, le contraire. Au lieu de vous connecter à une machine, vous vous connecterez à nouveau à la machine cible. Cela permet d’obtenir un accès shell sur les machines d’un réseau local derrière un routeur avec accès internet par exemple!
Composants
Une coque inversée peut être décomposée en plusieurs composants:
Nous explorerons plus en détail les blocs suivants dans les sections suivantes.
Bloc | Fonctionnalité |
---|---|
lanceur | Le lanceur est le bloc qui démarre la payload. Il peut être considéré comme le point d’entrée de la coque inversée. |
Payload | La payload est le code d’exploitation complet utilisé pour créer le reverse shell. Il est différent du lanceur qui démarre la payload. |
Liaison descendante | La liaison descendante est utilisée par la machine cible pour recevoir les commandes à exécuter de l’attaquant. |
Liaison montante | La liaison montante est utilisée par la machine cible pour renvoyer les résultats de la commande à l’attaquant. |
Exécuteur | L’exécuteur est l’élément exécutant les commandes reçues de la liaison descendante. |
Analyse d’un reverse shell en python2
Launcher et payload :
In this reverse shell, the launcher is python2
, whereas the payload is import ... subprocess.call(["/bin/sh","-i"]);
.
Composants dans la payload :