TGS-REP Roasting (Kerberoasting)

Esta tecnica consiste en obtener el Ticket de servicio del Servidor (TGS), para despues intentar crackearlo de forma offline, esto en un entorno real es posible ya que muchos servicios que estan creados por los asministradores y gestionados por ellos les suelen poner contraseñas debiles para que no se les olviden y es una practica muy comun, esta claro que los servicios que vienen por defecto no pasaria esto ya que vienen con contraseñas exageradamente largas, pero los creados por los asministradores si se podria porbar.

Antes de realizar la tecnica tendremos que identificar el serviceprincipalname de un equipo, en este caso lo haremos del WS01 de la siguiente forma con PowerView:

cd .\Desktop\
. .\new_powerview.ps1
Get-NetComputer -Identity WS01

Info:

logoncount                    : 47
badpasswordtime               : 01/01/1601 1:00:00
distinguishedname             : CN=WS01,CN=Computers,DC=corp,DC=local
objectclass                   : {top, person, organizationalPerson, user...}
badpwdcount                   : 0
displayname                   : WS01$
lastlogontimestamp            : 05/01/2025 19:05:38
objectsid                     : S-1-5-21-3352250647-938130414-2449934813-1106
samaccountname                : WS01$
localpolicyflags              : 0
lastlogon                     : 16/01/2025 9:22:00
codepage                      : 0
samaccounttype                : MACHINE_ACCOUNT
countrycode                   : 0
cn                            : WS01
accountexpires                : NEVER
whenchanged                   : 05/01/2025 18:05:38
instancetype                  : 4
usncreated                    : 16477
objectguid                    : 2dce0dd7-5b41-4809-adeb-8afb66039f26
operatingsystem               : Windows 10 Pro
operatingsystemversion        : 10.0 (19045)
lastlogoff                    : 01/01/1601 1:00:00
objectcategory                : CN=Computer,CN=Schema,CN=Configuration,DC=corp,DC=local
dscorepropagationdata         : {12/01/2025 16:31:12, 01/01/1601 0:00:01}
serviceprincipalname          : {RestrictedKrbHost/WS01, RestrictedKrbHost/WS01.corp.local, HOST/WS01,
                                HOST/WS01.corp.local}
ms-ds-creatorsid              : {1, 5, 0, 0...}
iscriticalsystemobject        : False
usnchanged                    : 16485
useraccountcontrol            : WORKSTATION_TRUST_ACCOUNT
whencreated                   : 05/01/2025 18:05:38
primarygroupid                : 515
pwdlastset                    : 05/01/2025 19:05:38
msds-supportedencryptiontypes : 28
name                          : WS01
dnshostname                   : WS01.corp.local

De esta informacion nos quedamos con el serviceprincipalname ya que es el que nos interesa para poder realizar la tecnica de kerberoasting, pero todos los servicios que vemos que tienen asociados estan creados por defecto, por lo que tendran una clave muy larga asociada, por lo que vamos a simular que nosotros como administradores vamos a crear un nuevo servicio en nuestra infraestructura de la siguiente forma:

Nos iremos a nuestro DC -> Servidor del Administrador -> Usuarios y equipos de Active Directory -> Users -> Crear usuario -> ponemos como nombre MailSrvc (Ya que lo vamos a simular como si fuera servicio de correo electronico), en el nombre de inicio de sesion pondremos lo mismo MailSrvc -> Siguiente -> pondremos como contraseña password y marcaremos que la contraseña nunca expire -> Siguiente -> Finalizar

Con esto ya tendriamos el usuario de servicio creado correctamente.

Ahora si queremos asociarle un serviceprincipalname a esta cuenta de servicio en concreto uno de correo, podremos hacerlo de la siguiente forma.

Abriremos un PowerShell en el DC y pondremos lo siguiente:

Con la parte de MailSrvc/MS01.corp.local lo que le estamos indicando es que apunte al serivicio que este corriendo en el MS01 que en nuestro caso no existe, pero si existiera tendria que ser donde este corriendo el serivicio, no pasa nada si no existe, se puede poner tambien. En la parte de MailSrvc le indicamos el nombre de usuario al que le queremos establecer todo lo anterior (El servicio).

Info:

Y con esto veremos que lo habremos registrado correctamente.

Ahora si buscamos por serviceprincipalname con dicho usuario con el PowerView veremos lo siguiente:

Info:

Veremos que pone MailSrvc/MS01.corp.local en el serviceprincipalname por lo que esta todo correcto.

Para nosotros poder identificar los usuarios de servicio que hay en el dominio, podremos hacerlo con el siguiente comando:

Info:

Y vemos que nos saca 2 usuarios uno que esta por defecto que es el krbtgt y el otro que hemos creado que es el MailSrvc.

O si lo queremos ver filtrado con la informacion que realmente nos importa seria de la siguiente forma:

Info:

Lo que vamos hacer para realizar la tecnica sera solicitar el Ticket-Granting Ticket del empleado1 y ya despues utilizarlo para obtener e interceptar el Ticket de servicio.

De primeras vamos a realizarlo con el Rubeus.exe.

Info:

Lo que hace esta herramienta de forma automatica es buscar las cuntas de servicio que ha creado el Administrador y dejar fuera las que vienen por defecto ya que son imposibles de crackear, por lo que nos ha sacado el de MailSrvc.

A nivel de red lo que ha echo la herramienta es que como empleado1 que ya tenemo el TGT al iniciar sesion, es solicitar al TGS el Ticket de servicio de MailSrvc y este mismo le ha respondido con todo el proceso que ya vimos anteriormente, por lo que la herramienta captura ese hash del Ticket de servicio.

Y ya lo que podriamos intentar con esto seria crackearlo con john en nuestro kali.

Lo buento de esta tecnica es que nosotros no necesitamos tener ningun privilegio, ni tenemos que tener nada especial, solamente tener las credenciales de cualquier usuario y asi podremos obtenerlo de esta forma.

Ahora si nosotros quisieramos obtenerlo desde kali podremos hacerlo con la siguiente herramienta:

Info:

Si queremos volcarlo a un fichero para despues crackearlo lo haremos de la siguiente forma:

Info:

Y con esto veremos que nos lo volco correctamente, si lo comprobamos:

Info:

Por lo que vamos a intentar crackearlo con john de la siguiente forma:

Info:

Y como vemos nos saca la contraseña.

Forzar un Kerberoasting

En otro caso pongamos que no conseguimos crackear el de MailSrvc, si nosotros tenemos una DACL que nos permita escribir a un usuario en concreto o algunos usuarios dentro de un grupo o algunos de estos tipos, lo que podremos hacer sera asociar un servicio cualquiera que nos inventemos o que exista realmente para asi conseguir el Ticket de servicio del usuario que en realidad seria la contarseña del usuario para asi crackearla de forma offline, a esto se le llama forzar un Kerberoasting.

Las ACLs que puedem hacer esto anterior seria un GenericWrite o GenericAll.

Vamos a preparar un usuario para que tenga esa vulnerabilidad respecto al empelado1 y podamos forzar un kerberoasting.

Nos iremos a nuestro DC -> Servidor del Administrador -> Usuarios y equipos de Active Directory -> Users -> seleccionamos uno cualquiera en mi caso sera el llamado ali.alix -> click derecho y Propiedades -> Seguridad -> Opciones avanzadas -> Agregar -> le damos a Seleccionar una entidad de seguridad ponemos empleado1 -> Aceptar -> bajamos abajo del todo y pulsamos Borrar todo -> seleccinamos solamente la casilla llamada Escribir todas las propiedades (GenericWrite) -> Aceptar -> Aplicar -> Aceptar.

Una vez configurado todo esto haremos lo siguiente.

Imaginemos que ya hemos identificado que tenemos esa DACL respecto a dicho usuario, pues lo que haremos sera establecerle un serviceprincipalname para que sea reconocido como un usuario de servicio y forzar lo que queremos:

Info:

Ahora si filtramos por los usuarios de servicio que haya en el dominio:

Info:

Vemos que ahora ali.alix se esta comportando como un usuario de servicio.

Ahora si nos volvemos a kali y volcamos los tickets de servicio de los usuarios de servicio haciendo un kerberoasting veremos lo siguiente:

Info:

Vemos que ahora nos ha volcado tambien la clave del usuario ali.alix y si lo comprobamos en el archivo:

Info:

Vemos que efectivamenten tendremos el hash de la clave privada del usuario ali.alix por lo que podremos intentar crackearlo.

Last updated