Kerbrute域内用户枚举与密码喷洒

2021-10-10
1 min read

根据 “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

https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E9%80%9A%E8%BF%87Kerberos-pre-auth%E8%BF%9B%E8%A1%8C%E7%94%A8%E6%88%B7%E6%9E%9A%E4%B8%BE%E5%92%8C%E5%8F%A3%E4%BB%A4%E7%88%86%E7%A0%B4

1. 用户名枚举:

1
2
3
4
EnumADUser.py <domainControlerAddr> <domainName> <mode> 
<mode>: tcp or udp 
Eg.  
EnumADUser.py 192.168.1.1 test.com user.txt tcp

image.png

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

https://github.com/3gstudent/Homework-of-Powershell/blob/master/Invoke-DomainPasswordSprayOutsideTheDomain.ps1

可在域外使用

image.png

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 爆破即可

Avatar
Oulaa 黑白之色,无间之守