文章目录
内网渗透之PPT票据传递攻击(Pass the Ticket)
本次实验环境靶场来自于暗月(moonsec)师傅,文中内容全由个人理解编制,若有错处,大佬勿喷,个人学艺不精;本文中提到的任何技术都源自于靶场练习,仅供学习参考,请勿利用文章内的相关技术从事非法测试,如因产生的一切不良后果与文章作者无关。
前言
在了解票据传递攻击之前我们先了解一下,Kerberos 协议& Kerberos 认证原理。以下都是一些理论知识觉得不喜欢的可直接跳到后面(其实我也没弄懂)。
Kerberos 协议& Kerberos 认证原理
Kerberos 协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。其设计目标是通过密钥系统为客户机与服务器应用程序提供强大的认证服务。该协议的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。Kerberos 协议在在内网域渗透领域中至关重要,白银票据、黄金票据、攻击域控等都离不开 Kerberos 协议。
为了让我们能够更轻松地理解后文对认证原理的讲解,你需要先了解以下几个关键角色:
-
角色 作用
-
Domain Controller 域控制器,简称 DC,一台计算机,实现用户、计算机的统一管理。
-
Key Distribution Center 秘钥分发中心,简称 KDC,默认安装在域控里,包括 AS 和 TGS。
-
Authentication Service 身份验证服务,简称 AS,用于 KDC对 Client 认证。
-
Ticket Grantng Service 票据授予服务,简称 TGS,用于KDC 向 Client 和 Server 分发
-
Session Key (临时秘钥)。
-
Active Directory 活动目录,简称 AD,用于存储用户、用户组、域相关的信息。
-
Client 客户端,指用户。
-
Server 服务端,可能是某台计算机,也可能是某个服务。
打个比方:当 whoami 要和 bunny 进行通信的时候,whoami 就需要向 bunny 证明自己是 whoami,直接的方式就是 whoami 用二人之间的秘密做秘钥加密明文文字生成密文,把密文和明文文字一块发送给 bunny,bunny 再用秘密解密得到明文,把明文和明文文字进行对比,若一致,则证明对方是 whoami。但是网络中,密文和文字很有可能被窃取,并且只要时间足够,总能破解得到秘钥。所以不能使用这种长期有效的秘钥,要改为短期的临时秘钥。那么这个临时秘钥就需要一个第三方可信任的机构来提供,即 KDC(Key Distribution Center)秘钥分发中心。
Kerberos 认证原理
首先我们根据以下这张图来大致描述以下整个认证过程:
- 首先 Client 向域控制器 DC 请求访问 Server,DC 通过去 AD 活动目录中查找依次区分 Client 来判断 Client 是否可信。
- 认证通过后返回 TGT 给 Client,Client 得到 TGT(Ticket GrantingTicket)。
- Client 继续拿着 TGT 请求 DC 访问 Server,TGS 通过 Client 消息中的 TGT,判断 Client 是否有访问权限。
- 如果有,则给 Client 有访问 Server 的权限 Ticket,也叫 ST(ServiceTicket)。
- Client 得到 Ticket 后,再去访问 Server,且该 Ticket 只针对这一个 Server有效。
- 最终 Server 和 Client 建立通信。
下面讲一下详细的认证步骤,大概分为三个阶段:
- ASREQ & ASREP
- TGSREQ & TGSREP
- AP-REQ & AP-REP
ASREQ & ASREP
该阶段是 Client 和 AS 的认证,通过认证的客户端将获得 TGT 认购权证。
当域内某个客户端用户 Client 视图访问域内的某个服务,于是输入用户名和密码,此时客户端本机的 Kerberos 服务会向 KDC 的 AS 认证服务发送一个 AS_REQ 认证请求。请求的凭据是 Client 的哈希值 NTLM-Hash 加密的时间戳以及 Client-info、Server-info 等数据,以及一些其他信息。
当 Client 发送身份信息给 AS 后,AS 会先向活动目录 AD 请求,询问是否有此Client 用户,如果有的话,就会取出它的 NTLM-Hash,并对 AS_REQ 请求中加密的时间戳进行解密,如果解密成功,则证明客户端提供的密码正确,如果时间戳在五分钟之内,则预认证成功。然后 AS 会生成一个临时秘钥 Session-Key AS,并使用客户端 Client 的 NTLM-Hash 加密 Session-key AS 作为响应包的一部分内容。此Session-key AS 用于确保客户端和 KGS 之间的通信安全。还有一部分内容就是 TGT:使用 KDC 一个特定账户的 NTLM-Hash 对 Session-keyAS、时间戳、Client-info 进行的加密。这个特定账户就是创建域控时自动生成的Krbtgt 用户,然后将这两部分以及 PAC 等信息回复给 Client,即 AS_REP 。PAC 中包含的是用户的 SID、用户所在的组等一