根据 “kerberos篇”的第一步AS_REQ,其发送了用户名,在第二步的校验包AS_REP中由于用户存在、用户不存在与密码错误返回的包不一样,所以可以用来枚举用户名。
用户名不存在:
error-code: eRR-C-PRINCIPAL-UNKNOWN (6)
密码错误:
error-code: eRR-PREAUTH-REQUIRED (25)
KDC_ERR_PREAUTH_FAILED(24)
udp/tcp
工具:
https://github.com/3gstudent/pyKerbrute
1. 用户名枚举:
|
|
2. 密码喷洒
由于域内策略,连续密码猜测会导致帐户被锁定,爆破的时候一般采用喷洒式的攻击,即密码一样,跑不同的用户名。 关于口令次数限制,默认为 5 次,具体设置在
\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
中
(1)DomainPasswordSpray
用 PowerShell 编写的工具,用于对域用户执行密码喷洒攻击。默认情况下,它将利用 LDAP 从域中导出用户列表,然后扣掉被锁定的用户,再用固定密码进行密码喷洒。
缺点是不能在域外使用。
https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1
(2)DomainPasswordSprayOutsideTheDomain
可在域外使用
3.SPN爆破
KRB_AS_REP Roasting
(知道即可) 对于域用户,如果设置了选项 “Do not require Kerberos preauthentication”,此时向域控制器的88端口发送AS_REQ请求,对收到的AS_REP内容(enc-part底下的ciper,因为这部分是使用用户hash加密session-key,我们通过进行离线爆破就可以获得用户hash)重新组合,能够拼接成”Kerberos 5 AS-REP etype 23”(18200)的格式,接下来可以使用hashcat对其破解,最终获得该用户的明文口令
使用 impacket 中的 GetNPUsers.py 直接获取即可 ,默认导出 hashcat 的格式,配合 hashcat 爆破即可