Kerberos协议
协议简介
Kerberos协议是一种网络认证协议,设计目的是通过密钥系统为客户机/服务器应用程序提供强大的认证服务。
认证过程中的实现不依赖于主机操作系统的认证,不需要基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意读取、修改和插入数据。
Kerberos协议作为一种可信任的第三方认证服务,是通过传统的密码技术(如共享密钥)执行认证服务的。
角色划分
- 客户端(client):发送请求的一方
- 服务端(server):接收请求的一方
密钥分发中心(key distribution center,KDC),密钥分发中心分为两部分:
AS(authentication server):认证服务器,专门用于认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
TGS(ticket granting ticket):票据授予服务器,用于发放整个认证过程以及客户端访问服务端时所需的服务授予票据(ticket)
认证流程
大致流程
客户端与AS通信原理
客户端拿着身份信息去AS服务器认证,认证通过后返回一张用于访问TGS的TGT
身份信息内容包含如下
- name(用户名)
- IP地址
- Time(当前时间)
TGT包含的内容如下图
提供身份信息的数据包为AS-REQ(AS-require),发送TGT的数据包为AS-REP(AS-response)
当用户收到TGT后,会对TGT进行解密
客户端与TGS通信原理
票据信息内容
客户端与服务端通信原理
客户端拿着ST去找WEB系统
服务端收到客户端发过来的ST之后进行解密
- 首先使用本机的机器用户HASH值解密ST得到CS_SK
- 再使用CS_SK解密第一部分信息
- 最后进行对比,对比成功后建立信任
AS数据包分析
客户端与认证服务器(AS)进行通信的数据包,提供身份信息的数据包为AS-REQ(AS-require),发送给TGT的数据包为AS-REP(AS-response)。
环境准备
两台Windows server 2008机器
机器名 | 当前登录用户 | IP地址 |
---|---|---|
hd | hd | 192.168.110.8 |
lm | lm | 192.168.110.7 |
使用kekeo工具完成kerberos攻击,工具命令如下
tgt::ask /user:域用户 /domain:域名 /password:密码
在hd机器上使用该条命令同时进行Wireshark抓包,生成TGT
AS-REQ
主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息
PA-DATA pA-ENC-TIMESTAMP:使用用户的hash值或者AES key加密时间戳生成的key
PA-DATA pA-PAC-REQUEST:是否包含有pac(PAC 包含用户的SID、用户所在组等信息)
- kdc-options:协商字段
- cname:请求的用户名
- realm:域名
- sname:请求的服务名
AS-REP
当KDC收到AS-REQ之后,解密其中的PA-DATA pA-ENC-TIMESTAMP ,如果成功返回AS-REP。
第一个enc-part值是由krbtgt用户hash值加密部分
第二个enc-part值是由用户hash值加密部分
AS发送到客户端的TGT为:
TGS数据包分析
客户端与票据授予服务器(TGS)的通信数据包,TGS-REQ是客户端发送给TGS的数据包,TGS-REP是TGS发送给客户端的数据包。
环境准备
使用kekeo工具本地生成ST票据,同时进行Wireshark抓包。
kekeo工具命令如下
tgs::ask /tgt:tgt票据 /service:服务名/域名地址
例如:tgs::ask /tgt:TGT_lm@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com
筛选下数据包
TGS-REQ
客户端解密AS发送过来的TGT后,再重新封装TGT
客户端发送给TGS的数据包,其中包含如下内容:
- authenticator:使用CT_SK加密内容
- ticket:原始的TGT,使用krbtgt加密
- cname:请求的用户名
- sname:请求的服务名
TGS-REP
TGS发送给客户端的信息,其中包含有:
- ticket:票据内容
- 第一个enc-part:ticket中的part值为服务密钥加密的内容
- 第二个enc-part:外层的part值为CT_SK加密内容
TGS封装后发送的ST
AP数据包分析
客户端与服务端的通信数据包,AP-REQ是客户端发送ST给服务端的数据包,AP-REP是服务端发送给客户端的数据。
客户端接收到TGS发送过来的ST之后,会对其进行解密,认证再重新封装ST
环境准备
两台Windows server 2008机器
机器名 | 当前登录用户 | IP地址 |
---|---|---|
hd | hd | 192.168.110.8 |
lm | lm | 192.168.110.7 |
登录hd的计算机,使用域控administrator账户申请票据,使用kekeo工具
注意:申请票据得用高权限用户!!!
相关命令如下
# 申请TGT票据
tgt::ask /user:域用户 /domain:域名 /password:域用户密码
# 申请ST并注入到内存中
# tgs::ask /tgt:tgt票据 /service:服务名\域名地址 /ptt
tgt::ask /user:administrator /domain:xbxaq.com /password:a1b2c3..
tgs::ask /tgt:TGT_administrator@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com /ptt
查看当前计算机的票据
wireshark中搜索smb or smb2
AP-REQ数据包
客户端发送给服务端的票据,其中包含有如下内容:
- ticket:包含服务端hash加密内容
- authenticator:包含CS_SK加密内容
AS-REP数据包
服务端发送给客户端的信息,其中包含客户端验证服务端信息
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论