Unconstrained Delegation

La «delegación» de Kerberos es una función que permite a un principal (como un usuario o un equipo) solicitar acceso a recursos en nombre de otro principal. Creo que si estas aqui es porque sabes algo del tema. Asique me salto la charlita de intro. okey?? me da igual si piensas que no okey

Cómo se Habilita la Unconstrained Delegation?

Este tipo de delegación se habilita estableciendo un indicador llamado TRUSTED_FOR_DELEGATION en el atributo UserAccountControl del objeto de equipo en Active Directory.

Podemos buscar equipos con este indicador habilitado usando un filtro LDAP. El valor 524288 corresponde a la bandera TRUSTED_FOR_DELEGATION.

beacon> ldapsearch (&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288)) --attributes samaccountname
sAMAccountName: [SERVIDOR_EJEMPLO_1]$
sAMAccountName: [SERVIDOR_EJEMPLO_2]$

Ataqueeee

Cuando un cliente solicita un ticket de servicio (TGS-REQ) para un SPN que se ejecuta en el contexto de esta cuenta de equipo (por ejemplo, el servicio HTTP en [SERVIDOR_WEB_1]$), el controlador de dominio ve la bandera TRUSTED_FOR_DELEGATION.

Como resultado, el DC establece un indicador en el ticket de respuesta (TGS-REP) llamado ok-as-delegate.

Esto le indica al cliente solicitante que el servidor especificado en el ticket es confiable para la delegación. Por lo tanto, cuando el cliente envía su solicitud de autenticación (AP-REQ) al servicio web, incluye tanto el ticket de servicio como una copia completa del TGT del usuario.

El equipo que ejecuta el servicio ([SERVIDOR_EJEMPLO_2]$) podrá entonces almacenar en caché el TGT del usuario en la memoria y utilizarlo para solicitar tickets de servicio en su nombre a cualquier otro servicio en el futuro.

Explotación con cobalttttt

La herramienta Rubeus tiene un comando monitor que captura y muestra periódicamente los TGTs a medida que los usuarios se autentican en el servicio comprometido.

beacon> execute-assembly C:\Tools\Rubeus\Rubeus\bin\Release\Rubeus.exe monitor /nowrap

El resultado podría ser algo como esto:

[*] 19/02/2025 14:56:32 UTC - Found new TGT:
  User                  :  [USUARIO_ADMIN]@[DOMINIO.COM]
  StartTime             :  19/02/2025 14:56:16
  EndTime               :  20/02/2025 00:56:16
  RenewTill             :  26/02/2025 14:56:16
  Flags                 :  name_canonicalize, pre_authent, renewable, forwarded, forwardable
  Base64EncodedTicket   :    doIFj[...snip...]kNPTQ==

Este resultado muestra que hemos capturado un TGT de un administrador de dominio, [USUARIO_ADMIN]. Con este ticket, el atacante ahora puede hacerse pasar por [USUARIO_ADMIN] en cualquier parte del dominio.

Para terminar la tarea de monitoreo en Rubeus (ejecutado a través de Cobalt Strike), utiliza los comandos jobs y jobkill.

Despues ya seria tan sencillo como con el ticket capturado injectarlo con rubeus de esta forma:

Despues en el caso de cobaltstrike hay que impersonar usando steal_token

Y ya estaria. tenemos un ticket totalmente valido.

Última actualización