域环境搭建参考下面这篇文章
注意:黄金票据是用来留后门的也叫做维持权限,前提条件是你已经拿到了域控的最高权限
一、在制作黄金票据之前,先了解什么是kerberos
Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。
在 Kerberos 认证中,最主要的问题是如何证明「你是你」的问题,如当一个 Client 去访问 Server 服务器上的某服务时,Server 如何判断 Client 是否有权限来访问自己主机上的服务,同时保证在这个过程中的通讯内容即使被拦截或篡改也不影响通讯的安全性,这正是 Kerberos 解决的问题。在域渗透过程中 Kerberos 协议的攻防也是很重要的存在。
在Kerberos协议中主要是有三个角色的存在:
-
访问服务的Client(以下表述为Client 或者用户):Kerberos客户端是代表需要访问资源的用户进行操作的应用程序,例如打开文件、查询数据库或打印文档。每个Kerberos客户端在访问资源之前都会请求身份验证。
-
提供服务的Server(以下表述为服务或者Server):域内提供服务的服务端,服务端都有一个独一的SPN。
-
KDC(Key Distribution Center)密钥分发中心 kerberos 测试工具介绍
其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。
kerberos的简化认证认证过程如下图:
详解:
- AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间戳
- AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。
- TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
- TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)
- AP_REQ: Client拿着TGS票据去请求服务
- AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。
在AS_REP里面的ticket的encpart是使用krbtgt的hash进行加密的,如果我们拥有krbtgt的hash,就可以给我们自己签发任意用户的TGT票据,这个票据也被称为黄金票据。
二、黄金票据制作
原理:
黄金票据伪造的是票据授予票据(TGT),TGT=krbtgt hash(session key,client info,end time)。TGT由AS返回给client,然后client用TGT来向TGS验证自己的身份,而client是不知道krbtgt hash的,只有AS与TGS知道krbtgt hash,所以要想伪造TGT就需要知道krbtgt hash。所以攻击者伪造黄金票据TGT的前提是获得管理员访问域控制器的权限并抓取到krbtgt hash。
而session key是由AS随机生成的,TGS在收到TGT之前并不知道,所以可以伪造。client info和end time也是可以自己定的。所以我们可以伪造由client发给TGS的TGS REQ,进而获得server ticket。
条件:
制作金票的条件:
1、域名称
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的
首先假设拿到了域控,然后从域控来导出hash,之后再进行TGT伪造的操作
(1)使用systeminfo命令获得域名
(2)使用whoami /all命令 获取SID 后面的500是权限数值不是sid值
(3)获得krbtgt账户的krbtgt:hash
使用mimikatz工具
工具简介
Mimikatz是法国人benjamin开发的一款功能强大的轻量级调试工具,本意是用来个人测试,但由于其功能强大,能够直接读取WindowsXP-2012等操作系统的明文密码而闻名于渗透测试,可以说是渗透必备工具。我们假设我们已经将mimikatz上传
使用管理员身份运行mimikatz
然后使用privilege::debug提升权限
然后在拿到的域控机子上执行mimikatz # lsadump::dcsync /user:krbtgt /csv
(4)制作黄金票据
mimikatz "kerberos::golden /domain:<域名> /sid:<域SID> /aes256:<aes256_hmac> /user:<任意用户名>
(4)测试
然后我们再把ticket.kirbi利用mimikatz 进行导入kerberos::purge
#清空已有票据kerberos::ptt 2.kiribi
#导入票据kerberos::list
# 查看票据
之后就会看到可以成功访问,也可以看到我们的票据
拿到TGT就可以请求任何服务的权限,所以就不需要再单独指定需要哪一个服务了,只要目标服务支持Kerberos认证我们就可以进行访问,而且是具有一定的权限的。此处直接将票据导入内存,也可以将票据存到文件中然后在需要使用的时候再导入到内存中。
在cmd中使用klist命令可以查看当前票据,这个时候我们就可以访问文件共享等服务了。
其实我们都拿到了域控的账号和密码,为什么还要写黄金票据,请参考文章: