// 01
Resumen
Dancing es una máquina de dificultad muy fácil de la plataforma HackTheBox, diseñada específicamente para introducir el protocolo SMB (Server Message Block) y enseñar cómo enumerarlo y explotarlo cuando está mal configurado. La máquina corre sobre Windows y expone el servicio SMB en el puerto 445/TCP.
El vector de ataque es directo: el servidor SMB tiene habilitado el acceso
anónimo (también llamado null session)
en la share WorkShares. Esto permite conectarse sin
proporcionar usuario ni contraseña, navegar por los directorios de los empleados
Amy.J y James.P, y descargar archivos sensibles. La flag se encuentra en
James.P\flag.txt.
Esta máquina pone en práctica dos áreas fundamentales: Vulnerability Assessment (identificar la configuración débil de SMB) y Authentication (explotar credenciales por defecto / acceso anónimo), dos de los vectores más comunes en entornos corporativos Windows reales.
| Fase | Técnica / Herramienta | Resultado |
|---|---|---|
| Reconocimiento | Nmap -p- -sSCV + xsltproc | Puerto 445 SMB; OS Windows; SMBv3.1.1 |
| Enumeración SMB | smbclient -L (null session) | 4 shares: ADMIN$, C$, IPC$, WorkShares |
| Acceso anónimo | smbclient sin contraseña | Acceso a WorkShares como guest |
| Enumeración shares | dir / cd Amy.J / cd James.P | worknotes.txt y flag.txt descubiertos |
| Exfiltración | get Worknotes.txt / get flag.txt | Archivos descargados localmente |
| Flag | cat flag.txt | 5f61c10dffbc77a704d76016a22f1664 |
// 02
Reconocimiento
Lanzamos un escaneo exhaustivo sobre todos los puertos TCP del objetivo. Nmap combina detección de versiones, scripts NSE por defecto y exportación XML en un solo comando. El escaneo revela 11 puertos abiertos, la mayoría relacionados con servicios Windows típicos.
Los puertos más relevantes son:
Puerto 135 — MSRPC: Microsoft Remote Procedure Call. Servicio base de Windows para comunicación entre procesos en red. No lo explotaremos directamente, pero su presencia confirma que estamos ante un sistema Windows.
Puerto 139 — NetBIOS-SSN: NetBIOS Session Service. Protocolo legado de Microsoft para compartir archivos e impresoras en redes locales, predecesor del SMB moderno. Corre sobre TCP/IP en el puerto 139 (NBT — NetBIOS over TCP/IP).
Puerto 445 — microsoft-ds: Este es el puerto clave. Microsoft Directory Services / SMB directo sobre TCP. Es el puerto principal de SMB en Windows moderno (desde Windows 2000), sin necesidad de NetBIOS. Aquí es donde conectaremos con smbclient.
Puertos 5985 y 47001: Microsoft HTTPAPI / WinRM. Puerto 5985 es WinRM (Windows Remote Management) sobre HTTP, que podría usarse para administración remota vía PowerShell si tuviésemos credenciales.
Puertos 49664-49669: MSRPC dinámicos. Windows asigna puertos altos dinámicamente para servicios RPC adicionales.
Los scripts NSE de Nmap también revelan información crítica a través de
smb2-security-mode:
SMB 3.1.1 con message signing habilitado pero no requerido.
Esto es importante: significa que no se exigen firmas digitales en las comunicaciones SMB,
abriendo la puerta a ataques como NTLM relay. En nuestro caso, el problema es más básico:
acceso anónimo habilitado.
// DESGLOSE DEL COMANDO NMAP
sudo → Privilegios de root necesarios para el SYN scan (-sS) que opera a nivel de raw sockets.
-p- → Escanea los 65,535 puertos TCP. Sin esta flag Nmap solo revisa los 1000 más comunes, y podría omitir servicios en puertos no estándar como el 47001 de WinRM.
-sS → SYN Scan (Half-Open): envía paquetes SYN, si recibe SYN-ACK el puerto está abierto, responde con RST sin completar el handshake. Más rápido y menos detectable que un connect scan.
-sC → Scripts NSE por defecto: ejecuta scripts de enumeración automática como smb2-security-mode, smb2-time, clock-skew, que nos dan info del OS y configuración de SMB.
-sV → Detección de versiones: identifica el software exacto en cada puerto (Microsoft Windows RPC, Microsoft HTTPAPI 2.0, etc.).
-n → Sin resolución DNS: acelera el escaneo evitando queries DNS innecesarios.
-Pn → Sin ping previo: no verifica si el host está activo con ICMP antes de escanear. Útil cuando el firewall bloquea ICMP (muy común en Windows).
--min-rate=5000 → Mínimo 5000 paquetes/segundo. Agresivo pero rápido, apropiado en CTF donde no hay riesgo de saturar la red.
--open → Muestra solo puertos en estado OPEN, filtra los closed y filtered.
-oX dancing.xml → Exporta en formato XML estructurado para transformarlo en HTML con xsltproc.
// CLOCK SKEW: 3h59m59s — ¿QUÉ SIGNIFICA?
El script NSE clock-skew mide la diferencia horaria entre el reloj del servidor objetivo y el de nuestra máquina. Un desfase de casi 4 horas indica que el servidor Windows tiene su hora configurada en una zona horaria diferente (probablemente UTC, mientras Kali está en UTC-4). Esto es importante en escenarios reales: ciertos ataques Kerberos (como Pass-the-Ticket) requieren que el desfase horario sea menor a 5 minutos. En HTB, la máquina usa UTC y nuestra VM usa UTC-4, lo que explica exactamente los ~4 horas de diferencia.
Con el XML generado por Nmap en el paso anterior, aplicamos la hoja de estilos XSLT
oficial que viene incluida en Kali en /usr/share/nmap/nmap.xsl.
La herramienta xsltproc transforma el XML estructurado en una tabla HTML
navegable y visualmente clara. El resultado dancing.html
puede abrirse directamente en el navegador y muestra toda la información del escaneo
(puertos, servicios, versiones, scripts NSE) en formato tabular con filtros.
Documentar los escaneos en HTML es una práctica esencial en pentesting profesional: facilita incluir evidencias en informes de auditoría y permite al cliente revisar los resultados sin necesidad de interpretar texto crudo.
// DESGLOSE DEL COMANDO
xsltproc → Procesador XSLT de línea de comandos, parte del paquete libxslt. Transforma documentos XML usando hojas de estilo XSL.
/usr/share/nmap/nmap.xsl → Hoja de estilos XSLT oficial de Nmap. Define la transformación del XML de escaneo en una tabla HTML formateada con colores por estado de puerto.
dancing.xml → El archivo XML de entrada generado por nmap -oX en el paso anterior.
> dancing.html → Redirige el output estándar al archivo dancing.html. Sin esta redirección, el HTML se imprimiría en terminal.
// 03
Enumeración SMB — Listado de Shares
Con el puerto 445 identificado, el siguiente paso es enumerar qué
shares (carpetas compartidas) están disponibles en el servidor SMB.
Usamos smbclient -L, que envía una petición de listado
sin autenticación (null session). El flag -L
significa list shares: smbclient no intenta conectarse a una share específica,
solo solicita el catálogo de recursos compartidos.
Al ejecutar el comando, el sistema solicita una contraseña para el usuario
WORKGROUP\kali. Simplemente presionamos
Enter sin escribir nada, estableciendo una null session
(sesión nula). Si el servidor lo permite, responderá con la lista de shares aunque
no estemos autenticados.
El resultado muestra cuatro shares:
ADMIN$ — Share administrativa oculta (el $ indica que está
oculta en el listado de red de Windows). Apunta a
C:\Windows y se usa para administración remota.
Normalmente requiere privilegios de administrador.
C$ — Share administrativa oculta del disco C:. Acceso directo a la raíz del sistema de archivos. Requiere administrador.
IPC$ — Inter-Process Communication share. No contiene archivos sino que permite comunicación entre procesos remotos. Se usa para enumerar usuarios, grupos y políticas del dominio. Fue el mecanismo que permitió listar las shares sin credenciales (la null session funciona a través de IPC$).
WorkShares — Share de disco personalizada (no tiene $, por lo tanto es visible). Nombre sugerente: podría contener archivos de trabajo de los empleados. Este será nuestro objetivo.
// DESGLOSE DE SMBCLIENT -L
smbclient → Cliente SMB de línea de comandos incluido en el paquete Samba. Funciona de forma similar a un cliente FTP: permite listar shares, navegar directorios, subir y bajar archivos via SMB.
-L → List: solicita la lista de recursos compartidos del servidor. No intenta conectarse a ninguna share específica, solo enumera las disponibles.
10.129.1.12 → IP del servidor SMB objetivo. También puede usarse el hostname si está configurado en /etc/hosts.
[Enter en el password] → Establece una null session: autenticación sin credenciales. El protocolo SMB/CIFS permite este modo cuando el servidor no lo prohíbe explícitamente. Es el equivalente al login anónimo en FTP.
¿Por qué falla el workgroup listing? El error NT_STATUS_RESOURCE_NAME_NOT_FOUND al reconectar con SMB1 es normal: el servidor tiene SMBv1 desactivado (buena práctica de seguridad, ya que SMBv1 es vulnerable a EternalBlue/WannaCry). El listado de shares SMB2 ya fue exitoso antes de ese error.
// 06
Flag — Archivos Descargados
De vuelta en nuestra terminal local de Kali, leemos los archivos descargados.
Worknotes.txt del directorio de Amy.J
revela notas de trabajo internas del sistema Dancing. En un pentest real, este tipo
de archivos puede contener información sensible sobre la infraestructura: servicios
corriendo, tareas pendientes, credenciales temporales, o configuraciones que apuntan
a otros vectores de ataque.
El contenido revela tres ítems de la lista de tareas pendientes del equipo IT: levantar un servidor Apache en una máquina Linux, asegurar el servidor FTP, y configurar WinRM en Dancing. Información que en un engagement real nos indicaría vectores adicionales a explorar (FTP abierto en otra máquina, WinRM sin configurar).
// LECCIÓN DE SEGURIDAD — IMPACTO REAL DEL SMB ANÓNIMO
En un entorno corporativo real, esta misconfiguration permitiría a cualquier empleado (o atacante con acceso a la red interna) acceder a los archivos de trabajo de todos los usuarios en la share sin ningún tipo de autenticación. El daño potencial incluye: robo de información confidencial, credenciales en archivos de notas, datos de clientes, propiedad intelectual, y documentos estratégicos. La remediación es simple: requerir autenticación en todas las shares SMB, deshabilitar acceso de guest/anónimo, y aplicar el principio de mínimo privilegio — cada usuario solo accede a sus propios archivos. En Active Directory esto se gestiona con Group Policy Objects (GPO) y ACLs de NTFS.
// 07
Referencia de Comandos
- -p- → Todos los 65535 puertos
- -sS → SYN scan (half-open, requiere root)
- -sC → Scripts NSE por defecto (smb2-security-mode, etc.)
- -sV → Detección de versiones de servicios
- -Pn → No ping previo (útil en Windows que bloquea ICMP)
- --min-rate=5000 → Mínimo 5000 paquetes/segundo
- -oX → Output en formato XML
- nmap.xsl → Stylesheet oficial en /usr/share/nmap/
- > → Redirige el HTML resultante a un archivo
- -L → List shares del servidor
- -N → No password (alternativa al Enter vacío)
- -U usuario → Especificar usuario
- -p puerto → Puerto alternativo (default: 445)
- \\\\IP\\Share → Notación UNC doble-escapada para bash
- dir → Lista directorio actual
- cd [dir] → Navega a subdirectorio
- get [archivo] → Descarga archivo a local
- put [archivo] → Sube archivo al servidor
- mget *.txt → Descarga múltiples archivos
// 08
Glosario Técnico
Shares administrativas ocultas (terminan en $): creadas automáticamente por Windows, no visibles en el Explorador de red normal pero listables con smbclient -L. Ejemplos: ADMIN$ → C:\Windows (administración remota), C$ → C:\ (raíz del disco), D$ → D:\ (si existe), IPC$ → comunicación entre procesos (no tiene archivos).
Shares personalizadas (sin $): creadas por administradores para compartir recursos. Como WorkShares en Dancing. Sus permisos dependen completamente de la configuración del administrador. Pueden tener ACLs NTFS (control de acceso a nivel de archivo) y Share Permissions (control de acceso a nivel de share), siendo los permisos efectivos la intersección de ambos.
dir, cd), transferir archivos (get, put, mget, mput), ver información (ls, stat) y más. Es la herramienta más básica para interactuar con SMB desde Kali, aunque para enumeración más avanzada se usan enum4linux, crackmapexec, rpcclient o impacket.\\192.168.1.10\WorkShares (share raíz), \\servidor\C$\Windows\System32 (share administrativa). En bash, los backslashes deben escaparse: cada \ se escribe como \\, por lo tanto \\servidor\share se convierte en \\\\servidor\\share en la línea de comandos de bash. Alternativa: usar comillas simples para evitar el escape: '\\servidor\share'.Message signing enabled but not required — está habilitado (el servidor puede usarlo) pero no es obligatorio (los clientes pueden conectarse sin firmar). Esta configuración es vulnerable a SMB relay attacks: un atacante puede interceptar una autenticación NTLM y reenviarla a otro servidor sin conocer la contraseña real.Network access: Do not allow anonymous enumeration of SAM accounts and shares debe estar habilitado.Enter-PSSession o herramientas como evil-winrm. La nota en Worknotes.txt de Amy.J decía "setup winrm on dancing", sugiriendo que WinRM no estaba completamente configurado aún.