Reverse Shells 101

Table des matières :

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).

Classical shell connection scheme

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!

Schéma de connection du reverse shell

Composants

Une coque inversée peut être décomposée en plusieurs composants:

Composants d’un reverse shell

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 :

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 :

Components in the payload