Mimikatz Explorer - Kerberos PTT & Purge
字数 1718 2025-08-06 12:21:02
Mimikatz Kerberos PTT & Purge 技术详解
1. 概述
Mimikatz 是一款功能强大的安全工具,其中的 Kerberos 模块提供了票据传递攻击(Pass-the-Ticket, PTT)和票据清除(Purge)功能。这些功能在渗透测试和红队操作中非常有用,能够帮助攻击者在Windows域环境中横向移动。
2. Kerberos::PTT (票据传递)
2.1 功能原理
kerberos::ptt 功能可以将现有的 Kerberos 票据提交到内存中,实现票据传递攻击。其核心是通过 Windows API LsaCallAuthenticationPackage 发送 KERB_SUBMIT_TKT_REQUEST 消息。
2.2 KERB_SUBMIT_TKT_REQUEST 结构
typedef struct _KERB_SUBMIT_TKT_REQUEST {
KERB_PROTOCOL_MESSAGE_TYPE MessageType;
LUID LogonId;
ULONG Flags;
KERB_CRYPTO_KEY32 Key; // key to decrypt KERB_CRED
ULONG KerbCredSize;
ULONG KerbCredOffset;
} KERB_SUBMIT_TKT_REQUEST, *PKERB_SUBMIT_TKT_REQUEST;
- MessageType: 必须设置为
KerbSubmitTicketMessage - Key: 用于解密 Kerberos 凭据(KRB_CRED)的加密密钥
- KerbCredSize: KRB_CRED 数据的大小(字节)
- KerbCredOffset: KRB_CRED 数据在整个消息中的偏移量
2.3 实现流程
-
票据文件读取:
- 检查输入参数是否为目录,如果是则查找所有
.kirbi文件 - 使用
kull_m_file_readData读取票据文件内容
- 检查输入参数是否为目录,如果是则查找所有
-
构建请求:
- 计算请求大小:
sizeof(KERB_SUBMIT_TKT_REQUEST) + 票据数据大小 - 设置
MessageType = KerbSubmitTicketMessage - 设置票据数据大小和偏移量
- 将票据数据追加到请求结构后面
- 计算请求大小:
-
提交请求:
- 调用
LsaCallKerberosPackage发送请求 - 处理返回状态
- 调用
2.4 使用示例
mimikatz.exe "kerberos::ptt 4-40850000-Administrator@LDAP~DC01.pentest.com~pentest.com-PENTEST.COM.kirbi" exit
3. Kerberos::Purge (票据清除)
3.1 功能原理
kerberos::purge 用于清除当前会话缓存的 Kerberos 票据,通过发送 KERB_PURGE_TKT_CACHE_REQUEST 消息实现。
3.2 KERB_PURGE_TKT_CACHE_REQUEST 结构
typedef struct _KERB_PURGE_TKT_CACHE_REQUEST {
KERB_PROTOCOL_MESSAGE_TYPE MessageType;
LUID LogonId;
UNICODE_STRING ServerName;
UNICODE_STRING RealmName;
} KERB_PURGE_TKT_CACHE_REQUEST, *PKERB_PURGE_TKT_CACHE_REQUEST;
- MessageType: 必须设置为
KerbPurgeTicketCacheMessage - LogonId: 登录会话标识符
- ServerName: 要删除票证的服务名称(设为0长度表示所有服务)
- RealmName: 要删除票证的领域名称(设为0长度表示所有领域)
3.3 实现流程
-
初始化请求:
- 设置
MessageType = KerbPurgeTicketCacheMessage - 将其他成员设为0或NULL,表示删除所有票证
- 设置
-
提交请求:
- 调用
LsaCallKerberosPackage发送请求 - 处理返回状态
- 调用
3.4 使用示例
mimikatz.exe "kerberos::purge" exit
4. 技术细节
4.1 票据传递的关键点
- 需要将
KERB_SUBMIT_TKT_REQUEST结构扩展以包含票据数据 - 票据数据必须正确放置在
KerbCredOffset指定的位置 - 需要
SeTcbPrivilege权限才能访问其他登录帐户的票证缓存
4.2 票据清除的关键点
- 当
ServerName和RealmName均为0长度时,会删除所有票证 - 否则只删除匹配
ServerName@RealmName的票证
5. 防御措施
- 限制特权账户使用: 限制具有
SeTcbPrivilege权限的账户 - 监控异常行为: 监控异常的票据请求和清除操作
- 限制票据有效期: 设置较短的票据有效期
- 启用高级审计: 启用Kerberos相关的事件日志记录
6. 总结
Mimikatz的Kerberos模块提供了强大的票据操作功能,理解其工作原理对于渗透测试和防御都至关重要。PTT攻击可以绕过密码验证直接使用窃取的票据,而Purge功能可以清除攻击痕迹。防御方应了解这些技术的实现细节,才能有效检测和防御此类攻击。