Kerberos黄金票据允许攻击者建立对Windows域的持久和隐蔽的身份验证访问。攻击的工作如下:
- 攻击者在域中获得管理员权限
- 攻击者提取域用户"krbtgt"的ntlm哈希,并获取目标域的SID
- 攻击者伪造kerberos票
- 此票据用于使用域管理员的权限进行身份验证
以下是关于如何在Kali Linux上使用黄金票据的详细说明。
我们从获取krbtgt ntlm哈希开始。我们使用一个编码版的mimikatz以防止触动AV(Antivirus),下载地址如下:
(https://github.com/artkond/batarmor/blob/master/examples/krbtgt.bat)
在krbtgt SID中去掉最后一组,即502,获取到的SID为 S-1-5-21-3251500307-1840725093-2229733580。
现在要生成票证,我们使用Impacket的ticketer.py实用程序:(https://github.com/CoreSecurity/impacket/blob/master/examples/ticketer.py)
差不多好了,需要导出系统变量,所以impacket的psexec.py可以使用票证。运行psexec.py时,使用-k键进行Kerberos身份验证:
除了psexec以外,还可以使用其他工具例如wmiexec.py(它比psexec.py更加隐蔽,因为它不会上传任何二进制文件并且不启动任何服务)或atexec.py(使用计划的任务执行代码):
到目前为止一切正常,但如果想上传一些文件怎么办?很可能你会想使用smbclient来完成这个任务。使用kerberos与smbclient有点复杂。我们必须将kerberos添加到位于/etc/krb5.conf的配置文件。如果没有krb5.conf,我们需要从发行版的repo安装krb5-user包。
代码语言:javascript复制[realms]
PENTESTO.LOC = {
kdc = tcp/dc01:88
}
TCP是最好的选择,因为能够通过socks代理将请求传送到kerberos服务器上。
在socks隧道上使用kerberos票据需要更多的额外工作。有可能不能直接访问活动目录服务器,因此我们必须编辑/etc/hosts文件。添加目标服务器,域控制器(也是kerberos服务器)和域的全名。这是必须的,因为Kerberos仅适用于主机名,如果指定IP地址,则将失败。
代码语言:javascript复制$ cat /etc/hosts
...
10.0.0.89 pentesto.loc
10.0.0.89 dc01
...
我们的目标服务器是域控服务器。编辑代理链,添加我们的socks代理和注释proxy_dns:
代码语言:javascript复制$ cat proxychains.conf
...
#Proxy DNS requests - no leak for DNS data
#proxy_dns
...
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks4 172.16.46.157 3128
如果我们正确设置了/etc/hosts和/etc/krb5.conf,那么运行smbclient或psexec.py就不会有问题了:
需要注意的一点是,psexec.py对我们提供的信息,域名和用户名应与我们使用ticketer.py伪造票据时输入的完全相同,这样才能保证成功。