常见工具错误 - Kerberos
当您在执行最喜爱的Kerberos攻击时,例如传递票据、公钥加密初始认证(PKINIT)、影子凭据或Active Directory证书服务(AD CS)漏洞利用,但遇到了Kerberos错误,尽管进行了故障排除,仍然不知道该怎么办?这篇快速文章将介绍您可能遇到的不同错误,它们的根本原因以及如何修复命令。
最初我打算写一篇包含所有不同错误、所有不同工具和所有不同结果的完整博客文章,但我觉得编写一个GitHub Pages应用程序可能更容易,便于参考,因此这里是Kerberos错误索引:[Kerberos错误索引](Kerberos Errorism Index)
域SID
在深入探讨Kerberos之前,您可能会发现运行Certipy或BloodHound类型的命令和工具时,最终会遇到未解析的SID。这里有一个方便的参考表来帮助您解决问题:
| 主体 | SID/RID |
|---|---|
| Administrator | S-1-5-21-*-500 |
| Guest | S-1-5-21-*-501 |
| krbtgt | S-1-5-21-*-502 |
| Domain Admins | S-1-5-21-*-512 |
| Domain Users | S-1-5-21-*-513 |
| Domain Computers | S-1-5-21-*-515 |
| Domain Controllers | S-1-5-21-*-516 |
| Enterprise Admins | S-1-5-21-*-519 |
| Group Policy Creator Owners | S-1-5-21-*-520 |
| Readonly Domain Controllers | S-1-5-21-*-521 |
在识别AD CS ESC*攻击时,这一点尤其重要,因为了解Domain Users的SID与Domain Admins的SID之间的差异通常会导致成功的权限提升!
Kerberos 101
如果您在执行攻击时收到过KRB-ERROR,这些消息是Kerberos协议的一部分,每条消息都包含一个错误代码,有助于识别特定的错误类型。您可能会遇到几种类型,下面的小节将分解每种错误、根本原因、可能遇到这些错误的工具,以及最重要的修复命令。
- KDC_ERR_NONE (0): 无错误。
- KDC_ERR_NAME_EXP (1): 客户端账户或密码已过期。
- KDC_ERR_SERVICE_EXP (2): 服务账户已过期。
- KDC_ERR_BAD_PVNO (3): 请求的协议版本不受支持。
- KDC_ERR_C_OLD (4) & KDC_ERR_S_OLD (5): 客户端或服务的密钥过于陈旧。
- KDC_ERR_CANNOT_USE (6): 在数据库中找不到客户端。
- KDC_ERR_MUST_USE_USER2USER (7): 表示需要用户到用户认证。
- KDC_ERR_SVC_UNAVAILABLE (9): 服务不可用。
- KDC_ERR_ETYPE_NOTSUPP (11): KDC不支持该加密类型。
- KRB_AP_ERR_BAD_INTEGRITY (14): 解密数据的完整性检查失败。
- KRB_AP_ERR_TKT_EXPIRED (15): 票据已过期。
- KRB_AP_ERR_TKT_NYV (16): 票据尚未生效。
- KRB_AP_ERR_REPEAT (17): 请求似乎是重放攻击。
- KRB_AP_ERR_NOT_US (18): 票据不是为所呈现的服务颁发的。
- KRB_AP_ERR_BADMATCH (19): 票据和认证器不匹配。
- KDC_ERR_MODIFIED (20): 通常在SPN配置错误或存在重复条目时遇到。
- KDC_ERR_CLIENT_REVOKED (31): 客户端账户已被撤销或禁用。
- KDC_ERR_SERVICE_REVOKED (32): 服务账户已被撤销。
- KDC_ERR_KEY_EXPIRED (36): 客户端(或服务)的密钥(通常反映密码)已过期。
- KDC_ERR_PREAUTH_FAILED (37): 预认证失败—通常由于时钟偏差、错误密码或禁用账户引起。
- KDC_ERR_PREAUTH_REQUIRED (38): KDC需要预认证。
- KDC_ERR_WRONG_REALM (39): 客户端尝试在错误的领域进行认证。
在大多数Windows(Active Directory)环境中,一些Kerberos错误往往更频繁地出现,因为它们直接与常见的配置问题、时间同步问题或账户状态相关。最常见的包括:
- KDC_ERR_PREAUTH_FAILED (37): 当提供的凭据(通常是密码)不正确、账户凭据过期或未按预期提供预认证数据时,通常会出现此错误。
- KRB_AP_ERR_TKT_EXPIRED (15): 当票据达到其过期时间时发生此错误,通常由于票据续订间隔过长。
- KRB_AP_ERR_TKT_NYV (16): 当客户端和域控制器之间存在时间偏差时,经常会遇到"票据尚未生效"错误。
- KDC_ERR_KEY_EXPIRED (36): 这表明用户或服务密钥(通常反映密码)已过期,导致认证失败。
- KDC_ERR_CLIENT_REVOKED (31): 当账户被禁用或撤销时会出现此错误,阻止客户端获取有效票据。
- KDC_ERR_WRONG_REALM (39): 域之间的错误配置或尝试向错误领域认证可能触发此错误。
这些错误最常见,因为它们直接与Windows域中经常发生的问题相关,例如密码更改、时间同步问题或配置错误的域信任。实际频率可能因环境设置和策略而异。