常见工具错误 - Kerberos
Andy Gill
2025年4月27日
3分钟阅读
当您执行最喜爱的Kerberos攻击时,比如传递票据(pass the ticket)、初始认证公钥加密(PKINIT)、影子凭证(Shadow Credentials)或Active Directory证书服务(AD CS)漏洞利用,但遇到了Kerberos错误,尽管进行了故障排除,仍然不知道该怎么办?这里快速介绍您可能遇到的不同错误、根本原因以及如何修复命令。
我原本打算写一篇包含所有不同错误、所有不同工具和所有不同结果的完整博客文章,但我觉得编写一个GitHub Pages应用程序可能更容易参考,因此这里是Kerberos错误索引:Kerberos错误索引
域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和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域中经常发生的问题相关,如密码更改、时间同步问题或配置错误的域信任。实际频率可能因环境设置和策略而异。