Dancing

HackTheBox — Windows · SMB Null Session → WorkShares Anonymous Access → flag.txt

● MUY FÁCIL HACKTHEBOX WINDOWS SMB ANONYMOUS ACCESS 📅 Junio 2026 · By Brandeiks

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.

FaseTécnica / HerramientaResultado
ReconocimientoNmap -p- -sSCV + xsltprocPuerto 445 SMB; OS Windows; SMBv3.1.1
Enumeración SMBsmbclient -L (null session)4 shares: ADMIN$, C$, IPC$, WorkShares
Acceso anónimosmbclient sin contraseñaAcceso a WorkShares como guest
Enumeración sharesdir / cd Amy.J / cd James.Pworknotes.txt y flag.txt descubiertos
Exfiltraciónget Worknotes.txt / get flag.txtArchivos descargados localmente
Flagcat flag.txt5f61c10dffbc77a704d76016a22f1664

Reconocimiento

1
ESCANEO DE PUERTOS CON NMAP Y EXPORTACIÓN XML

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.

NMAP
$ sudo nmap -p- -sSCV -n -Pn --min-rate=5000 --open 10.129.1.12 -oX dancing.xml

// 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.

Starting Nmap 7.99 ( https://nmap.org ) at 2026-06-04 03:22 -0400
Nmap scan report for 10.129.1.12
Host is up (0.12s latency).
Not shown: 65524 closed tcp ports (reset)
 
PORT       STATE SERVICE       VERSION
135/tcp    open   msrpc         Microsoft Windows RPC
139/tcp    open   netbios-ssn   Microsoft Windows netbios-ssn
445/tcp    open   microsoft-ds?
5985/tcp   open   http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp  open   http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
49664/tcp  open   msrpc         Microsoft Windows RPC
49665/tcp  open   msrpc         Microsoft Windows RPC
49666/tcp  open   msrpc         Microsoft Windows RPC
49667/tcp  open   msrpc         Microsoft Windows RPC
49668/tcp  open   msrpc         Microsoft Windows RPC
49669/tcp  open   msrpc         Microsoft Windows RPC
 
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
 
Host script results:
| clock-skew: 3h59m59s
| smb2-time:
|    date: 2026-06-04T11:24:12
|_  start_date: N/A
| smb2-security-mode:
|   3.1.1:
|_     Message signing enabled but not required
 
Nmap done: 1 IP address (1 host up) scanned in 82.81 seconds

// 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.

2
CONVERSIÓN DEL REPORTE NMAP A HTML CON XSLTPROC

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.

XSLTPROC
$ xsltproc /usr/share/nmap/nmap.xsl dancing.xml > dancing.html

// 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.


Enumeración SMB — Listado de Shares

3
LISTADO DE SHARES SMB CON SMBCLIENT -L (NULL SESSION)

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.

SMBCLIENT
$ smbclient -L 10.129.1.12
Password for [WORKGROUP\kali]: [Enter — null session]
 
        Sharename      Type       Comment
        ---------      ----       -------
        ADMIN$         Disk       Remote Admin
        C$             Disk       Default share
        IPC$           IPC        Remote IPC
        WorkShares     Disk      
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.129.1.12 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available

// 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.


Acceso Anónimo a WorkShares

4
CONEXIÓN A WORKSHARES SIN CONTRASEÑA

Intentamos conectarnos directamente a la share WorkShares usando smbclient con una null session. La sintaxis requiere doble backslash para indicar el servidor y luego el nombre de la share, todo escapado con barras adicionales para que bash no interprete los backslashes como caracteres de escape.

Al solicitar la contraseña, nuevamente presionamos Enter sin escribir nada. Si la share tiene acceso anónimo configurado, el servidor responderá con smb: \>, indicando que estamos dentro con una sesión de guest. La share WorkShares no requiere credenciales: esta es la misconfiguration que da nombre a la categoría Weak Authentication / Anonymous/Guest Access en la descripción de la máquina.

En entornos corporativos reales, este tipo de configuración se da cuando un administrador crea una carpeta compartida para facilitar el intercambio de archivos entre empleados sin restricciones, sin dimensionar el riesgo de exposición. Cualquier persona en la red (o con VPN al dominio) podría acceder a esos archivos sin autenticarse.

SMBCLIENT
$ smbclient \\\\10.129.1.12\\WorkShares # sin contraseña → Enter
Password for [WORKGROUP\kali]: [Enter]
Try "help" to get a list of possible commands.
smb: \>

// ¿POR QUÉ \\\\10.129.1.12\\WorkShares?

En bash, el backslash \ es el carácter de escape. Para incluir un backslash literal en un argumento de shell, necesitamos escaparlo: \\ produce un solo \. La ruta SMB correcta es \\10.129.1.12\WorkShares (notación UNC), pero como bash interpreta cada \, necesitamos escribir cuatro barras para obtener dos: \\\\10.129.1.12\\WorkShares\\10.129.1.12\WorkShares en la petición real.

UNC (Universal Naming Convention) es el formato estándar de Windows para rutas de red: \\servidor\recurso. Es el mismo formato que se usa en el Explorador de Windows al navegar a recursos de red.



Flag — Archivos Descargados

7
LECTURA DE WORKNOTES.TXT — INTEL INTERNO

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).

CAT
$ cat Worknotes.txt
- start apache server on the linux machine
- secure the ftp server
- setup winrm on dancing
8
LECTURA DE FLAG.TXT — OBJETIVO COMPLETADO
FLAG
$ cat flag.txt
5f61c10dffbc77a704d76016a22f1664
FLAG
5f61c10dffbc77a704d76016a22f1664
UBICACIÓN
WorkShares\James.P\flag.txt

// 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.


Referencia de Comandos

nmap
nmap -p- -sSCV -n -Pn --min-rate=5000 --open [IP] -oX scan.xml
Escaneo completo de todos los puertos TCP con detección de versiones y scripts NSE. Exporta a XML para posterior procesamiento con xsltproc.
  • -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
xsltproc
xsltproc /usr/share/nmap/nmap.xsl scan.xml > scan.html
Transforma el XML de Nmap en un reporte HTML navegable usando la hoja de estilos XSLT oficial. Ideal para documentar evidencias en pentests.
  • nmap.xsl → Stylesheet oficial en /usr/share/nmap/
  • > → Redirige el HTML resultante a un archivo
smbclient -L
smbclient -L [IP]
Lista todas las shares SMB disponibles en el servidor. Null session (Enter en password) permite enumeración anónima si el servidor lo permite vía IPC$.
  • -L → List shares del servidor
  • -N → No password (alternativa al Enter vacío)
  • -U usuario → Especificar usuario
  • -p puerto → Puerto alternativo (default: 445)
smbclient (conexión)
smbclient \\\\[IP]\\[Share]
Conecta a una share SMB específica. Abre una sesión interactiva tipo FTP para navegar y transferir archivos.
  • \\\\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

Glosario Técnico

SMB — Server Message Block
Protocolo de red de Microsoft para compartir archivos, impresoras y otros recursos entre nodos de una red. Originalmente desarrollado por IBM en 1983 y adoptado por Microsoft, operaba sobre NetBIOS (puertos 137-139). A partir de Windows 2000, Microsoft reimplementó SMB para funcionar directamente sobre TCP/IP en el puerto 445, eliminando la dependencia de NetBIOS. Las versiones principales son: SMBv1 (antiguo, vulnerable a EternalBlue/WannaCry, debe estar desactivado), SMBv2 (Windows Vista/Server 2008, mejoras de rendimiento), SMBv3 (Windows 8/Server 2012, encriptación end-to-end). La implementación open-source de SMB para Linux/Unix se llama Samba.
Null Session (Sesión Nula SMB)
Una null session es una conexión anónima al servicio SMB que no proporciona credenciales de usuario ni contraseña. Históricamente permitida por defecto en Windows NT/2000/XP para facilitar la enumeración de red en dominios Windows. Una null session establece una conexión a través de la share IPC$ (Inter-Process Communication) que permite listar shares, enumerar usuarios, grupos, políticas y en algunos casos acceder a recursos no protegidos. Windows XP SP2 y posteriores lo deshabilitaron por defecto, pero muchas instalaciones corporativas heredadas lo mantienen activo, y como vemos en Dancing, algunos servidores permiten acceso de guest a shares específicas sin autenticación.
SMB Shares — Tipos y Características
Una share SMB es un recurso de red expuesto a través del protocolo SMB. Tipos principales:

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.
smbclient — Cliente SMB de Samba
smbclient es una herramienta de línea de comandos incluida en el paquete Samba que permite interactuar con servidores SMB/CIFS desde Linux. Funciona como un cliente FTP interactivo: una vez conectado a una share, ofrece comandos para navegar (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.
UNC — Universal Naming Convention
Estándar de Microsoft para especificar la ubicación de recursos en una red. El formato es \\servidor\recurso\ruta\archivo. Ejemplos: \\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'.
NetBIOS y su Relación con SMB
NetBIOS (Network Basic Input/Output System) fue desarrollado por IBM en 1983 como una API de red para aplicaciones. Microsoft lo implementó sobre TCP/IP (NBT — NetBIOS over TCP/IP) en los puertos 137/UDP (resolución de nombres), 138/UDP (datagramas) y 139/TCP (sesiones). El puerto 139 fue históricamente el puerto SMB sobre NetBIOS. Windows 2000 introdujo SMB directo sobre TCP en el puerto 445, independiente de NetBIOS. En el escaneo de Dancing vemos ambos puertos abiertos: 139 (legado) y 445 (moderno), lo cual es común en Windows Server para compatibilidad retroactiva con clientes antiguos.
SMB Message Signing — Seguridad de Integridad
El SMB message signing (firma de mensajes SMB) es un mecanismo de seguridad que añade una firma digital criptográfica a cada paquete SMB, garantizando la integridad y autenticidad del mensaje. Cuando está habilitado y requerido, todos los paquetes deben estar firmados o la conexión se rechaza, previniendo ataques de NTLM relay. En Dancing, Nmap detectó 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.
Weak Authentication y Anonymous/Guest Access
Las categorías de vulnerabilidad de Dancing son Weak Authentication y Anonymous/Guest Access, ambas parte del OWASP Top 10 A07 (Identification and Authentication Failures). Anonymous Access: el servidor permite conexiones sin credenciales, como las null sessions en SMB o el login anónimo en FTP. Guest Access: el servidor tiene una cuenta "guest" sin contraseña que puede acceder a ciertos recursos. Default Credentials: usar las credenciales por defecto del fabricante sin cambiarlas. En entornos Windows corporativos, estas configuraciones se previenen con Group Policy: Network access: Do not allow anonymous enumeration of SAM accounts and shares debe estar habilitado.
MSRPC y WinRM — Servicios Windows Adicionales
MSRPC (Microsoft Remote Procedure Call): protocolo de Windows que permite a programas solicitar servicios de otros programas en la red. Corre en el puerto 135 (endpoint mapper) y en puertos dinámicos altos (49664-49669 en Dancing). Es la base de muchos servicios Windows: DCOM, WMI, Active Directory. WinRM (Windows Remote Management): implementación de Microsoft del protocolo WS-Management para administración remota de sistemas. Puerto 5985 (HTTP) y 5986 (HTTPS). Permite ejecutar comandos PowerShell remotamente con 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.