基础知识
概述:Kerberos协议是一种网络认证协议,其设计目标是通过密钥系统为客户机/服务器应用程序提供强大的认证服务,该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意的读取、修改和插入数据。在以上的情况下,Kerberos作为一种可信任的第三方认证服务,是通过传统密码技术执行认证服务的。
Kerberos协议角色组成:
- 客户端:发送请求的一方
- 服务端:接收请求的一方
- 密钥分发中心(KDC):由AS(认证服务器)和TGS(票据授权服务器)组成
认证流程
1.首先用户把身份信息发送给KDC,身份信息内容如下:
2.KDC中的AS模块来校验用户身份信息,并返回TGT信息,TGT信息如下:
3.用户拿到TGT后会进行解密,但是只能解密上半部分(因为krbtgt用户没有),然后进行封装,发送给TGS
4.TGS验证TGT后,就会给用户发送ST
5.客户端收到TGS发送的ST之后,对其进行解密,并重新封装,发送给服务端
6.服务端收到ST后进行解密
数据包分析
环境准备
两台域内主机(Windows server 2019和Windows server 2003 R2),两台域内主机以及域控之间都要相互ping通才可以,不然后面有些操作会报错,还需要一个票据生成工具--kekeo。
AS-REQ和AS-REP数据包分析
AS-REQ:提供身份信息的数据包
AS-REP:发送TGT的数据包
首先进到kekeo的文件目录下
使用命令去请求一张TGT(tgt::ask /user:用户名 /domain:域名 /password:密码)
就会看到对应的文件目录下,已经有刚刚请求的TGT了
使用wireshark抓包,就可以看到AS-REQ和AS-REP数据包
AS-REQ;主要包含了用户的一些信息,是由客户端发送给AS的数据包,里面有几个重要信息:
- PA-DATA pA-ENC-TIMESTAMP使用用户的hash(这里可能会产生PTH攻击),或者AES key(这里可能会产生PTK攻击)加密时间戳生成value
- PA-DATA pA-PAC-REQUEST,是否包含了PAC
- kdc-option协商字段
- cname请求的用户名
- realm:域名
- sname:请求的服务名
AS-REP:当KDC收到AS-REQ之后解密PA-DATA pA-ENC-TIMESTAMP如果成功就返回AS-REP
- enc-part:TGT中由KRBTGT哈希值加密部分
- enc-part:TGT中由用户哈希值加密部分
该信息是使用krbtgt的Hash进行加密的,用户不能解密
该信息是使用用户的Hash进行加密的,用户可以解密
TGS-REQ和TGS-REP数据包分析
TGS-REQ:客户端发送给TGS数据包
TGS-REP:TGS发送给客户端数据包
同样的这里使用kekeo工具,请求票据
使用wireshark抓包可以看到有TGS-REQ和TGS-REP数据包
TGS-REQ:客户端发送给TGS数据包,其中包含:
- authenticator:使用CT-SK加密内容
- ticket:原始的TGT使用krbtgt加密
- cname:请求用户名
- sname:请求服务名
ticket里面的enc-part就是使用krbtgt的hash加密的内容
TGS-REP:TGS发送给客户端数据包,主要内容如下:
- ticket内容
- enc-part:ticket中的part是使用服务密钥加密的内容
- enc-part:外层的part是使用CT_SK加密的
AP-REQ和AP-REP数据包分析
AP-REQ:是客户端发送ST到服务端的数据
AP-REP:是服务端发送到客户端的数据(这个包是可选的)
但是这里去申请票据的时候需要注意,要使用administrator域管的账号进行申请票据,不然申请到的票据权限还不能访问到对方电脑
先把之前的票据缓存清楚
使用一下命令申请票据,并将它注入内存(注入内存的票据是不显示在相关文件目录下的)
远程访问ls电脑
AP-REQ数据包内容:
AP-REP数据包内容:
Kerberos协议安全问题
- AS-REQ:PTH攻击、PTK攻击、域内用户枚举、喷洒攻击(暴破密码)
- AS-REP:黄金票据、Roasting攻击
- TGS-REP:白银票据、Kerberoasting
- Kerberos扩展协议:委派、Kerberos bronze bit