白银票据与黄金票据构造分析


大家最好在看这篇文章之前,去看下我写的那篇关于认证协议分析的文章:NTLM与kerberos认证体系详解

(下面所说的Server hash指的是服务端机器用户的NTLM hash)
我们的白银票据和黄金票据主要是用来做权限维持的

白银票据

白银票据的特点:

  1. 不需要与DKC进行交互
  2. 需要服务端的计算机机器账户ntlm hash
  3. 只能针对一台机器

在我们那个认证协议分析的文章中介绍了整个基于kerberos协议认证的流程,其中说到了ST,而我们所说的白银票据其实就是我们伪造的ST。

在上一个文章中也讲了,ST的构成:
ticket=Server hash(Server session key+Client info+End Time)

根据我们讲协议那篇文章可知,当客户端与服务端进程认证时,客户端会使用server session key来加密客户端的信息和时间戳,并连同ST一同发给服务端,然后服务端会使用Server hash解密ST,得到ST里的end time,server session key等,所以在未发送ST之前,服务端是不知道Server Session Key是什么的,所以我们只要知道Server hash就可以伪造一个不经过KDC认证的ST,这也就是我们白银票据的原理。

在构造的时候,我们可以自定义一个Server session key并使用它加密客户端的信息和时间戳并伪造一个ST一同发送给服务端。

白银票据-mimikatz伪造演示

导出Server hash:

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

伪造票据:

在另外的机器上执行:

mimikatz.exe "kerberos::golden /domain:<域名> /sid:<域SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt" exit
/domain:域名
/sid:SID值
/target: 服务端计算机名
/service: 需要指定相关的服务名
/rc4: 服务端的计算机机器账户ntlm hash
/user: 要伪造的用户名,任意填写

成功:

补充:

因为ST 生成时指定了相关的服务名,所以因此只能用来访问相对应的服务。还有一些其他的服务:

服务名称                              同时需要的服务
WMI                                  HOST、RPCSS
PowerShell Remoting                  HOST、HTTP
WinRM                                HOST、HTTP
Scheduled Tasks                      HOST
Windows File Share                   CIFS
LDAP                                 LDAP
Windows Remote Server                RPCSS、LDAP、CIFS

白银票据防御
开启PAC

黄金票据

黄金票据特点:

  1. 需要与DC通信
  2. 需要krbtgt用户的hash

这里的krbtgt用户的hash指的就是之前协议那篇文章中讲的KDC Hash:

黄金票据实际上指的就是我们伪造的那些TGT,在我们知道KDC Hash以后,就可以利用构造出来的TGT去申请各种服务的,拿到ST以后就可以访问目标服务器。

我们在讲协议认证的那篇博客中,讲了TGT的构成:使用KDC hash 加密(session key ,客户端信息,客户端到期时间)后的密文

  • 在我们上篇文章讲到了,在获取ST的时候,客户端会拿着得到的TGT以及用session key加密的当前客户端的一些信息和时间戳,然后还有一些客户端的信息和要访问的服务端的信息这三块内容去获取ST。
  • 然后在服务端接受后它首先会使用KDC服务对应的用户的NTLM hash去解密TGT得到session key,再通过session key去解密客户端包装加密的信息,得到客户端的一些信息和时间戳,然后会比较这个时间戳和当前的时间戳是不是间隔的太久了,如果间隔超过一定时间则需要他重新从头开始验证,然后他还会通过接收到的这个客户端的信息和服务端的信息来判断当前客户端是否有权限去访问这个服务端。

所以黄金票据的原理就是伪造获取ST时发送的TGT和用session key加密的密文等”,而这些在我们知道KDC Hash以后,是都可以完成的,伪造成功以后通过DC的认证拿到ST就可以访问目标服务器。(伪造的时候,session key 我们自己定义一串字符就好)

伪造票据:

抓取域内hash:

域控执行:lsadump::lsa /patch

在另外的机器上执行:

mimikatz.exe "kerberos::golden /domain:<域名> /sid:<域SID> /rc4:<KRBTGT NTLM Hash> /user:<用户名> /ptt" exit
/domain:域名
/sid:SID值
/rc4: 域控的krbtgt账户ntlm hash
/user: 要伪造的用户名,任意填写

成功:

ticket总结


文章作者: wa1ki0g
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wa1ki0g !
  目录