通过 Kerberos Pre-Authentication 进行域用户帐户枚举和口令爆破

本文主要记录了通过 Kerberos Pre-Authentication 进行域用户帐户枚举和口令爆破.

简介

Kerberos Pre-Authentication 对应的端口默认为 88.

kerbrute 使用 UDP 协议实现 Kerberos Pre-Authentication, 用来进行域用户帐户枚举和口令爆破.

kerbrute 的适用场景

没有域用户帐户的口令, 且当前不在域内, 从域外对域用户帐户进行用户枚举和密码喷洒.

工具利用

用户枚举

该功能对应的参数是: userenum.

用来验证用户帐户是否存在, 结果会输出到 results.txt 文件中.

kerbrute_windows_amd64.exe userenum --dc dc.missyou.com -d missyou.com -o results.txt username.txt

这会生成一个 Windows 事件 ID: 4768.

这不会导致任何登录失败, 因此不会锁定任何帐户.

WireShark 分析

使用 WireShark 抓取 Kerbrute 用户枚举功能产生的数据包可以看到, kerbrute 发送的数据包使用的是 UDP 协议.

如果 KDC 返回 ERR_PREAUTH_REQUIRED, 则说明该用户帐户存在, 指示客户端需要提供更多凭据来进行身份验证.

如果 KDC 返回 ERR_C_PRINCIPAL_UNKNOWN, 则说明 KDC 无法识别给定的主体名称, 此处表示该用户帐户不存在.

密码喷洒

该功能对应的参数是: passwordspray.

在确定了哪些域用户帐户存在后, 可以使用这个功能来验证密码是否正确.

kerbrute_windows_amd64.exe passwordspray --dc dc.missyou.com -d missyou.com -o results.txt username.txt asd123!

比较实用的情景是: 当我们拥有大量域用户帐户时, 对于测试一个或两个常用密码很有用.

注意: 这会增加域用户帐户登录失败的计数, 当域用户帐户登录失败的次数达到域内 “帐户锁定策略” 中设置的失败次数上限时, 该域用户帐户会被锁定.

这将生成两个事件 ID:

WireShark 分析

如果密码错误, 则 KDC 会返回错误: eRR_PREAUTH_FAILED.

如果密码正确, 则 KDC 会返回正常的 AS_REP 响应, 其中包含 TGT.

Brute User

该功能对应的参数是: bruteuser.

kerbrute_windows_amd64.exe bruteuser --dc dc.missyou.com -d missyou.com -o results.txt passwords.txt ligang

这个功能就是传统的针对域用户帐户进行暴力破解密码.

注意: 如果域内有 “帐户锁定策略”, 爆破密码会导致对应的域用户帐户锁定, 仅当确定没有 “帐户锁定策略” 时才运行此命令!

这将生成两个事件 ID:

Brute Force

该功能对应的参数是: bruteforce.

这个模式只是从文件中读取用户名和密码组合, 格式为 username:password.

wanghong:wanghong
ligang:123456
yunwei:88888
wangwei:999999
ligang:ligang
kerbrute_windows_amd64.exe bruteforce --dc dc.missyou.com -d missyou.com -o results.txt lists.txt

这个功能将跳过任何 “空白行” 或带有空白 “用户名/密码” 的行.

这将生成两个事件 ID:

注意: 如果域内有 “帐户锁定策略”, 爆破密码会导致对应的域用户帐户锁定, 仅当确定没有帐户锁定策略时才运行此命令!

总结

其实比较常用的功能就是 “用户枚举” 和 “密码喷洒”, 因为这两个功能并不会导致用户帐户被锁定.

感谢耐心阅读, 文章仅供参考, 本人学艺不精, 不足之处欢迎师傅们指点和纠正!

参考

渗透技巧-通过Kerberos-pre-auth进行用户枚举和口令爆破

0%