Kerberoasting

第一种利用

一、 Kerberos认证过程

  • Kerberoasting 当域内某个用户去请求同域内的某个服务实例时,请求会首先被 送达至KDSAS 中进行身份认证。
  • 通过后 AS 会返回一个由用户密码hash加密而成的TGT票据给用户,然后用户再拿着TGT票据去请求TGSTGS验证成功后会返回一个用对应服务账号的密码hash加密过**(RC4_HMAC_MD5)的票据TGS**
  • 用户拿着TGS通过目标服务实例验证后可以去访问对应的服务资源,
  • Kerberoasting攻击利用TGS票据加密算法已知这一条件,尝试穷举口令,对TGS进行对比,若TGS相同,则口令正确。得到对应服务实例的明文密码。

还有几点是需要大家明白的:

1.当域控查询某一个服务的SPN时

如果该SPN注册在机器账户computers下,将会查询所有机器账户的servicePrincipalName属性,找到所对应的账户。

如果是注册在域用户账户users下,将会查询所有域用户账户的servicePrincipalName属性,找到其所对应的账户。

找到对应的账户之后,使用它的NTLM hash生成TGS。

2.域内的所有主机都是可以查询SPN的

3.域内的任何用户都是可以向域内的任何服务请求TGS

对于破解的明文口令,只有域用户账户(Users)的口令存在价值,不必考虑机器账户的口令(无法用于远程连接)

所以,域内的任何一台主机,都可以通过查询SPN,向域内的所有服务请求TGS,然后进行暴力破解,但是对于破解出的明文,只有域用户的是可以利用的,机器账户的不能用于远程连接,所以我们的关注点主要就在域用户下注册的SPN。

利用思路如下:

  1. 查询SPN,找到有价值的SPN,需要满足如下条件
    • SPN注册在域用户账户下(Users)
    • 域用户账户的权限很高
  2. 请求TGS
  3. 导出TGS
  4. 利用字典破解TGS拿到明文密码

实验

实验环境:

​ 域:YUNYING.LAB

​ 域控:Windows Server 2008 R2 x64(DC)

​ 域内主机:Windows 7 x64(s1):用户 ts1

​ 域内主机:Windows Server 2008 R2 x64(s2):用户 tsvc

所需工具:

​ Kerberoast 工具包

​ Mimikatz

攻击流程:

一、在域内主机 s1 中通过 Kerberoast 中的 GetUserSPNs.ps1 或者 GetUserSPNs.vbs 进行 SPN 扫描。

image-20220213165249776

二、根据扫描出的结果使用微软提供的类 KerberosRequestorSecurityToken 发起 kerberos 请 求,申请 ST 票据。

https://docs.microsoft.com/enus/dotnet/api/system.identitymodel.tokens.kerberosrequestorsecuritytoken?redirectedfro m=MSDN&view=netframework-4.7.2

PS C:/> Add-Type -AssemblyName System.IdentityModel

PS C:/> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList “MSSQLSvc/s2:1433”

image-20220213165315175

可以看到这个过程通过 AS-REQ、AS-REP、TGS-REQ、TGS-REP 这四个认证流程,获取到 RC4 方式加密的票据。

image-20220213165332157

三、Kerberos 协议中请求的票据会保存在内存中,可以通过 klist 命令查看当前会话存储的 kerberos 票据。

image-20220213165400617

使用 mimikatz 导出。

image-20220213165411238

image-20220213165418178

使用 kerberoast 工具集中的 tgsrepcrack.py 工具进行离线爆破,成功得到 tsvc 账号的密码 admin1234!

1
https://github.com/nidem/kerberoast/blob/master/tgsrepcrack.py 项目地址

第二种利用 Kerberoasting后门利用

当我们取得SPN的修改权限后,可以为指定的域用户添加一个SPN,这样可以随时获得该域用户的TGS,经过破解后获得明文口令

例如为域用户administrator添加SPN NC/dc.de1ay.com

image-20220213170009198

此时为域内用户administrator添加了一个SPN,在域内任何一台主机上都可以获得本SPN,并能使用Kerberoast获得TGS

在后续需要使用时请求服务,获取TGS使用Hashcat破解即可


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!