【渗透测试笔记】之【内网渗透——彻底理解Kerberos认证和黄金白银票据】

目录

Kerberos

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

参与角色

  • Client
  • Server
  • KDC(Key Distribution Center):
    • AS(Authentication Service)
    • TGS(Ticket Granting Service)

在这里插入图片描述

粗略认证流程

  1. client 向kerberos 服务请求,希望获取访问server 的权限。
    kerberos 得到了这个消息,首先得判断client 是否是可信赖的,也就是白名单黑名单的说法。
    这就是AS 服务完成的工作,通过在AD 中存储黑名单和白名单来区分client。
    成功后,返回ASTGT给 client。
  2. client 得到了TGT 后,继续向kerberos 请求,希望获取访问server 的权限。kerberos 又得到了这个消息,这时候通过client 消息中的TGT,判断出了client 拥有了这个权限,给了client 访问server 的权限ticket
  3. client 得到ticket 后,终于可以成功访问server。
    这个ticket 只是针对这个server,其他server 需要向TGS 申请。

详细过程

1. Client发送认证请求

  • 首先Client 向KDC 的AS 发送KRB_AS_REQ
    • Pre-authentication data(Client Hash(Timstamp)
    • Client Info
    • Server Info
      在这里插入图片描述

2. AS 返回响应信息

  • KDC 的AS(Authentication Service) 收到KRB_AS_REQ后:
    • 首先生成一个随机的Session Key
    • 然后根据Client InfoAD(Account Database)中查找到Client 对应的Client Hash(NTLM Hash)用于加密这个Session Key,得到Client Hash(Session Key)
    • 接着使用KDC的一个特殊用户(krbtgt用户)的NTML Hash即KDC Hash加密TGT,得到KDC Pass Hash(TGT)
      • TGT(Ticket Gtranting Ticket) = Session Key+Client Info
    • 最后向Client 发送KRB_AS_REP
      • Client Pass Hash(Session Key)
      • KDC Pass Hash(TGT)
        在这里插入图片描述

3. Client 向AS发送身份验证信息

  • Client 收到KRB_AS_REP后:
    • 首先使用本地的NTLM Hash解密Client Hash(Session Key),得到Session Key
    • 然后使用这个Session key加密Client Info+Timestamp,得到Session Key(Client Info+Timestamp)
    • 最后向AS 发送:
      • Session Key(Client Info+Timestamp)
      • Client Info+Server Info
      • KDC Hash(TGT)

4. AS 验证身份

  • AS收到后:
    • 首先解密KDC Hash(TGT)得到TGT,并从TGT中得到Session Key
    • 然后使用Session key解密Session Key(Client Info+Timestamp)得到Client Info+Timestamp
    • 最后比较解密出的Client Info+Timestamp与第一步收到的Client Info+Timestamp,如果一致则认证通过。

5. TGS 发送被加密的Ticket

  • AS认证通过后,TGS开始工作:
    • 首先随机生成Server Session Key,并使用Session Key加密,得到Session Key(Server Session Key)
    • 然后生成一个Ticket,并使用Server Info所对应的Server Hash加密,得到Server Hash(Ticket)
      • Ticket 中包含Server Session KeyClientInfoEnd Time
      • TicketTGT的区别:将Session Key变为了Server Session Key
    • 最后向Client 发送:
      • Session Key(Server Session Key)
      • Server Hash(Ticket)

在这里插入图片描述

6. Client 使用被加密的Ticket 向Server 发起请求

  • Client 收到Session Key(Server Session Key)Server Hash(Ticket)后:
    • 首先使用Session Key解密Session Key(Server Session Key),得到Server Session Key
    • 然后使用Server Session Key加密Client Info+Timestamp,得到Server Session Key(Client Info+Timestamp
    • 最后向Server 发送Server Hash(Ticket)Server Session Key(Client Info+Timestamp)

7. Server 收到请求后做验证

  • Server 收到后:
    • 首先使用本地Server Hash解密Server Hash(Ticket),得到Ticket
    • 然后从Ticket中得到Server Session KeyClient Info+Timestamp;
    • 接着使用Server Session Key解密Server Session Key(Client Info+Timestamp,得到Client Info+Timestamp
    • 最后将解密出来的Client Info+TimestampTicket中获取的Client Info+Timestamp对比,一致则认证通过;

在这里插入图片描述

黄金白银票据

白银票据

  • 原理(伪造Server Hash被加密的Ticket)
    • 第6步Client 向Server 发起请求的时候,票据为Server Hash(Ticket)Server Session Key(Client Info+Timestamp)而Server 除了Server Hash以外,其他都是不知道的;
    • 从而,一旦知道了Server Hash后,就可以伪造Server Session Key并生成伪造的Ticket和伪造的Server Session Key(Client Info+Timestamp)
    • 将伪造的Ticket使用Server Hash加密,就得到了伪造的Server Hash(Ticket)
    • 最后将伪造的Server Hash(Ticket)Server Session Key(Client Info+Timestamp)发送给Srever 即可以验证通过。
  • 特点
    • 需要目标服务的NTML Hash,即Server Hash
    • 不需要与KDC 交互;
    • 只能访问指定服务器;

黄金票据

  • 原理(伪造被krbtgt Hash加密的TGT)
    • 在第三步向AS 发送验证信息的时候,验证消息为:
      • Session Key(Client Info+Timestamp)
      • Client Info+Server Info
      • KDC Hash(TGT)
    • AS 又是使用KDC Hash(krbtgt Hash)解密KDC Hash(TGT)得到TGT,并从TGT中获得session Key
    • 最后再利用Session Key去解密Session Key(Client Info+Timestamp)获得Client Info+Server Info,去对比未加密的Client Info+Server Info是否一致从而验证客户端身份;
    • 所以,如果知道了KDC Hash(krbtgt Hash)就可以伪造session Key,从而伪造KDC Hash(TGT),进而发送伪造的:
      • Session Key(Client Info+Timestamp)
      • Client Info+Server Info
      • KDC Hash(TGT)
    • 最终达到身份验证的目的;
  • 特点
    • 需要KDC Hash(krbtgt Hash)
    • AS直接验证通过;
    • 可以访问任意服务器;

参考:https://www.bilibili.com/video/BV1S4411q7Cw

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值