Baby
Dificultad: Easy - OS: Windows
¯\_( ͡° ͜ʖ ͡°)_/¯ Machine info
La resolución de la máquina "Baby" se fundamenta inicialmente en una fase crítica de reconocimiento pasivo y activo sobre un entorno de Active Directory, donde el vector de ataque principal es la configuración insegura del protocolo LDAP (Lightweight Directory Access Protocol). La vulnerabilidad técnica central reside en la permisividad de consultas anónimas (Anonymous/Null Bind), lo que permite a un agente externo interrogar al controlador de dominio sin necesidad de credenciales previas. Este proceso facilita el descubrimiento de objetos del directorio, nombres de usuario y, de manera determinante, el acceso a atributos de información donde suelen filtrarse credenciales en texto claro. Bajo el marco de MITRE ATT&CK, estas acciones se encuadran en las categorías de Reconnaissance (T1594: Search Open Technical Databases) y Initial Access (T1078: Valid Accounts), demostrando cómo una debilidad en la política de exposición de datos puede comprometer la integridad de todo el perímetro de identidad.
Una vez establecido el acceso inicial mediante el uso de cuentas legítimas recolectadas, la intrusión progresa hacia la estabilidad del sistema mediante el aprovechamiento de servicios de gestión remota. El elemento principal en esta etapa es la explotación del servicio WinRM (Windows Remote Management) o el protocolo SMB (Server Message Block), utilizados para la ejecución de comandos con privilegios de usuario estándar. Esta fase se basa en la autenticación válida para obtener una shell interactiva, permitiendo la enumeración interna del sistema operativo. En el contexto de MITRE ATT&CK, este comportamiento se clasifica bajo las categorías de Execution (T1059.001: PowerShell) y Lateral Movement (T1021.006: Windows Remote Management).
Finalmente, la culminación del reto exige una escalada de privilegios locales para obtener control total sobre el controlador de dominio. Este proceso se apoya frecuentemente en la explotación de fallos de configuración en las Listas de Control de Acceso (ACLs) o en vulnerabilidades específicas del kernel de Windows. Entre los elementos técnicos más relevantes, se encuentran el CVE-2021-36934, que permite a usuarios no privilegiados acceder a las colmenas del registro (SAM, SYSTEM, SECURITY) para extraer hashes de administradores, y el CVE-2021-40449, un fallo de tipo Use-After-Free en el controlador Win32k.sys que facilita la ejecución de código con privilegios de SYSTEM.
Enumeración de puertos/servicios
┌──(root㉿kali)-[/home/securitylayer/Documentos/HTB/Baby]
└─# nmap -Pn -p- -sCV --open -v -n 10.129.4.226📌 Parámetros
-Pn→ Desactiva el descubrimiento por ping. Esto salta la fase de comprobación inicial (el Host Discovery) y pasa directo al escaneo de puertos.-p-→ Escanea todos los puertos (1-65535).sCV:-sC→ Ejecuta scripts de detección predeterminados → Usa los scripts denmapubicados 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.-v→ Modo verbose → Muestra más detalles sobre el progreso del escaneo.
Resultado:
En resumen:
De acuerdo con el output de Nmap y los scripts de enumeración (NSE), estos son los datos que nos pueden ayudar con la resolución de la máquina:
Identificación del Target:
Hostname:
BABYDCNombre de Dominio (FQDN):
baby.vl(visto en el certificado SSL y DNS).Sistema Operativo: Windows Server (identificado como Controlador de Dominio por los servicios activos).
Vectores de Ataque Iniciales:
LDAP (389)
SMB (445)
Kerberos (88)
Vectores de Intrusión/Acceso:
WinRM (5985)
RDP (3389)
Configuración de Seguridad:
SMB Signing: El escaneo indica
Message signing enabled and required, lo que significa que no podemos realizar ataques de SMB Relay.
Primero que nada vamos a agregar los dominios encontrados al /etc/hosts de nuestro equipo para que las tools puedan resolver correctamente los nombres de red
Enumeración DNS con dig
Seguimos enumerando registros del DNS objetivo para buscar alguna otra dirección de red que nos sirva para la máquina. Para este caso vamos a hacer uso de la tool dig:
Encontramos otro dominio más para agregar al /etc/hosts: babydc.baby.vl
Probamos la enumeración de recursos y usuarios con nxc sobre el servicio SMB para ver si encontramos algo útil:
Vemos que la enumeración via SMB falla, por lo que ahora probaremos con LDAP:
Anonymous Bind
En algunas ocasiones LDAP permite realizar consultas anónimas, lo que nos puede permitir sacarle información al controlador de dominio, como usuarios y atributos del directorio, sin tener credenciales previas. Para detectar este tipo de comportamientos en LDAP podemos probar los siguientes comandos de nmap y ldapsearch:
El script de nmap del primer comando interroga al servidor LDAP para obtener su "documento de identidad" básico, conocido técnicamente como RootDSE (Root DSA-specific Entry) y el segundo comando de ldapsearch con el parámetro -s base tambien nos permite extraer información básica del servidor (RootDSE), de forma rapida y sin causar tanto ruido. En este caso ambos comandos funcionan lo cual nos indica que podemos acceder a LDAP sin problemas.
El siguiente paso va a ser dumpear toda la información del LDAP hacia un archivo externo para analizarlo localmente y buscar usuarios y contraseñas expuestas.
📌 Parámetros
-x→ Activa la autenticación simple. Al no proporcionar credenciales adicionales, le indica al servidor que intente procesar la solicitud mediante un Anonymous Bind (conexión anónima).-H ldap://10.129.4.226→ Define el Host. Especifica la dirección IP y el protocolo de red para localizar el servidor objetivo en la red.-b "dc=baby,dc=vl"→ Establece el Base DN (Distinguished Name). Es la raíz o el punto de partida en la estructura jerárquica del árbol de directorios donde comenzará la búsqueda."(objectClass=*)"→ Es el filtro de búsqueda. El asterisco (*) funciona como un comodín universal, lo que obliga al servidor a devolver todos los objetos existentes (usuarios, grupos, computadoras, políticas, etc.).> full_ldap_dump.txt→ Redireccionamos la salida del comando hacia un archivo.txt. Es donde se guardará toda la información recolectada para que podamos buscar palabras clave como "password" o "description" de forma offline.
Como era de esperarse, en el dump encontramos varios usuarios que se encuentran en el archivo y una contraseña expuesta (BabyStart123!), ahora necesitamos saber a quién le pertenece tal contraseña. Otro detalle importante es que el grupo it es miembro de Remote Management Users. Esto confirma que cualquier usuario del departamento de IT tiene permiso legal para conectarse vía PowerShell Remoting (WinRM). Esto no es una vulnerabilidad per se, sino una configuración que permite convertir una credencial en una shell interactiva.
Password spraying con nxc
Para obtener todos los nombres de los usuarios que se encuentran en el archivo full_ldap_dump.txt vamos a filtrarlos por el flag CN= y luego creamos un diccionario para hacer el paswords spraying con nxc. Antes de usar el diccionario tenemos que cambiar el formato de los nombre CN, al formato de sAMAccountName
📌 Diferencias entre el CN y el sAMAccountName
CN (Common Name)
Es el "nombre común" del objeto. Es un atributo que forma parte del Distinguished Name (DN), que es la ruta completa del objeto en el directorio.
Formato: Suele ser el nombre completo (ej.
Ian Walker).Ubicación: Define cómo aparece el objeto dentro de una Unidad Organizativa (OU).
Unicidad: Solo tiene que ser único dentro de su propia OU. Puede haber dos "Ian Walker" en el dominio siempre que estén en carpetas diferentes.
sAMAccountName (Security Account Manager Name)
Es el nombre de inicio de sesión (el "Logon Name" de toda la vida). Fue introducido para mantener la compatibilidad con versiones antiguas de Windows (NT 4.0).
Formato: Suele ser corto y sin espacios (ej.
jbarnettojannet.barnett).Ubicación: Es un atributo del objeto usuario.
Unicidad: Debe ser único en todo el dominio. No pueden existir dos usuarios con el mismo
sAMAccountName.
¿Porque falla el password spraying si el diccionario no tiene los nombres formateados como sAMAccountName?
Los servicios de red (SMB, Kerberos, LDAP) no autentican contra el "Nombre Común". Si intentas loguearte como
CN=Enrique Perez, el servidor te rechazará porque espera el nombre de cuenta de seguridad (eperez)SMB y Kerberos utilizan el
sAMAccountNamepara mapear el usuario a su SID (Security Identifier). Sin elsAMAccountNamecorrecto, el controlador de dominio ni siquiera busca la contraseña.Como el
CNpuede tener espacios, tildes o caracteres especiales, es mucho más propenso a errores de formato. ElsAMAccountNamees una cadena limpia diseñada para sistemas de red.
El resultado nos muestra que la contraseña le pertenece al usuario Caroline.Robinson y que debe ser actualizada pronto (STATUS_PASSWORD_MUST_CHANGE).
Password Reset via SMB con impacket-smbpasswd / impacket-changepasswd
Para resetear la contraseña de Caroline Robinson podemos usar el script smbpasswd o el changepasswd de impacket
Aprovechando que tenemos credenciales para autenticarnos de forma legítima podemos consultar la password policy del sistema con el parametro --pass-pol de netexec. Este parametro consulta el objeto de política de dominio (Domain Policy) a través del protocolo SAMR (Security Account Manager Remote). Es una consulta administrativa legítima que un usuario autenticado puede realizar para conocer las restricciones de seguridad impuestas a su propia cuenta y a las de sus compañeros.
Una vez que ya tenemos las credenciales correctas podemos ver contra que servicios nos podemos autenticar usando el siguiente script que está disponible en mi github service_validation.sh
📌 ¿Porque es importante revisar la possword policy?
Evitar el Bloqueo de Cuentas (Account Lockout): Este es el dato más crítico para un atacante. En el output, el
Account Lockout ThresholddiceNone. Esto significa que podríamos hacer fuerza bruta o password spraying sin miedo a bloquear las cuentas. Si hubiera un número (ej. 5), sabríamos que al quinto intento fallido la cuenta se congela y levantarías alarmas.Ahorro de Tiempo en Cracking: El
Minimum password length: 7y el flagDomain Password Complex: 1nos dicen qué tipo de contraseñas debemos generar si decidimos atacar otros usuarios. Sabemos que no sirve de nada probar palabras de 6 letras o solo números.Vigencia de las Credenciales: El
Maximum password age: 41 daysindica cuánto tiempo tenemos antes de que la contraseña de Caroline expire de nuevo.Impedir el Reúso: El
Password history length: 24significa que el sistema recuerda las últimas 24 contraseñas. No podríamos cambiar la clave de Caroline por una que ya hubiera usado recientemente.
Remote code Execution con Evil-WinRM
Ahora que tenemos un usuario y sus credenciales podemos conectarnos al puerto 5985 de WinRM con la tool evil-winrm o su versión alternativa escrita en python3 evil-winrm-py.
Recolectando información sobre el usuario vamos a encontrar que pertenece al grupo Backup Operators de Windows y esto es una configuración de permisos peligrosa porque significa que tiene permisos especiales que se pueden usar para escalar privilegios hasta SYSTEM, incluso si este usuario no es administrador
📌 Backup Operators
¿Qué es el grupo "Backup Operators"?
Miembros de este grupo tienen los privilegios:
SeBackupPrivilege: les permite leer (backup) cualquier archivo del sistema, incluso si no tienen permisos NTFS normales sobre él.
SeRestorePrivilege: les permite escribir (restaurar) archivos en cualquier ubicación del sistema, ignorando permisos NTFS.
⚠ Estos privilegios no permiten ejecutar comandos directamente como SYSTEM, pero permiten eludir controles de acceso (ACLs) a archivos protegidos.
¿Por qué puede ser vulnerado?
Porque los Backup Operators pueden interactuar con archivos críticos del sistema de formas que un usuario normal no puede. Algunas formas comunes de explotar esto:
1. Leer archivos protegidos
Puedes copiar archivos sensibles como:
C:\Windows\NTDS\NTDS.dit(base de datos de usuarios y hashes de Active Directory).C:\Windows\System32\config\SAMySYSTEM(base de datos local de usuarios y claves del registro).
Luego puedes:
Extraer hashes y hacer cracking offline.
Usar herramientas como
secretsdump.py.
2. Privilege Escalation usando Restore
Si tenés SeRestorePrivilege, podés:
Sobrescribir binarios protegidos por el sistema (por ejemplo, un servicio que se ejecuta como SYSTEM).
Usar herramientas como
DiskShadowpara cargar VSS y restaurar archivos manipulados.
¿Cómo mitigar esto?
No asignar usuarios a este grupo si no es absolutamente necesario.
Usar herramientas de monitoreo (como Wazuh, Sysmon o Defender) para detectar uso de
SeBackupPrivilegeoDiskShadow.Activar restricciones de ejecución y aplicar control de acceso a herramientas como
robocopyydiskshadow.
Y si revisamos los privilegios especiales que tiene el usuario actual vamos a encontrar que tiene varios privilegios elevados habilitados, entre ellos dos que están relacionados con el grupo Backup Operators:
SeBackupPrivilegeSeRestorePrivilege
Estos privilegios solo se conceden automáticamente a ese grupo (y a Administradores).
¿Por qué importa esto?
Tener SeBackupPrivilege y SeRestorePrivilege nos permite:
Leer cualquier archivo (aunque no tengamos permisos
NTFS), como si fuéramosSYSTEM.Escribir o reemplazar archivos del sistema, incluso protegidos (por ejemplo: reemplazar un servicio que se ejecuta como
SYSTEM).
Estos privilegios pueden ser explotados para escalar a SYSTEM o para extraer información crítica, como:
Hashes de usuarios locales o del Active Directory (
NTDS.dit,SAM).Credenciales almacenadas.
Configuración de servicios para secuestrar ejecución de procesos como
SYSTEM
Ahora vamos a aprovechar el permiso SeBackupPrivilege para extraer los hashes de las contraseñas locales de Windows y buscar el hash del administrador
Continuar explicando que es reg
Last updated