Nuevos labs cada semana — Accede a todos desde 7,99€/mes

Labs de LFI

Local File Inclusion (LFI)

¿Qué es LFI?

El Local File Inclusion ocurre cuando una app incluye y procesa un fichero local cuya ruta controla el usuario. Más allá de leer ficheros sensibles, cuando el fichero se interpreta como código (include PHP) escala a RCE vía log poisoning, wrappers PHP o /proc.

¿Por qué practicar LFI?

El LFI sigue muy presente en apps PHP legacy y en frameworks que incluyen plantillas/idiomas por parámetro. Su atractivo es la escalada: de leer ficheros a RCE completa con técnicas como log poisoning o php://filter. Un LFI que llega a RCE es P1 con bounties de $3,000-$25,000.

¿Qué aprenderás con los labs de LFI?

Aprenderás a detectar parámetros de inclusión, leer ficheros con traversal y wrappers (php://filter para exfiltrar código fuente en base64), y las cadenas clásicas de LFI a RCE: envenenamiento de logs, /proc/self/environ, data:// y php://input, además de los bypasses de filtros y prefijos.

Tipos de LFI que cubrimos

  • LFI básico

    ?page=../../../../etc/passwd — inclusión de ficheros locales arbitrarios para lectura.

  • php://filter

    php://filter/convert.base64-encode/resource=index.php — exfiltra el código fuente PHP en base64 sin ejecutarlo.

  • Log poisoning → RCE

    Inyectas PHP en un log (User-Agent) y luego lo incluyes para ejecutarlo.

  • Wrappers data:// / php://input

    data://text/plain;base64,... o php://input para incluir código directamente y lograr RCE.

¿Cómo encontrar y explotar LFI?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Detectar el parámetro de inclusión

    Parámetros que cargan plantillas, idiomas o páginas (page, file, lang, include, template) son los candidatos a LFI.

    GET /index.php?page=home
  2. 2

    Confirmar lectura local

    Sustituye el valor por una ruta con traversal a un fichero conocido. Si su contenido aparece, hay inclusión local.

    ?page=../../../../../../etc/passwd
  3. 3

    Exfiltrar código con php://filter

    Usa el wrapper filter para que el PHP no se ejecute y se devuelva en base64; decodifícalo para leer el código fuente y buscar secretos.

    ?page=php://filter/convert.base64-encode/resource=config.php
  4. 4

    Saltar filtros y prefijos

    Si limpian ../ o fuerzan una extensión, usa secuencias anidadas, doble encoding o, en motores muy antiguos, el null byte.

    ....//....//etc/passwd   ·   %252e%252e%252f   ·   ...%00.php
  5. 5

    Escalar a RCE

    Envenena un log o la sesión con PHP y vuelve a incluirlo, o usa data://, php://input o /proc/self/environ para ejecutar tu código.

    User-Agent: <?php system($_GET['c']); ?>  →  ?page=/var/log/nginx/access.log&c=id

Aprende la teoría

Academy: File Upload Vulnerabilities

Preguntas frecuentes

¿Qué es el Local File Inclusion (LFI)?

Es una vulnerabilidad en la que la app incluye un fichero local cuya ruta controla el usuario. Permite leer ficheros sensibles y, cuando el fichero se interpreta como código (típico en PHP include), escalar a ejecución remota de comandos.

¿Cómo se explota un LFI?

Se manipula el parámetro de inclusión con traversal para leer ficheros (../../etc/passwd) o con wrappers como php://filter para exfiltrar código fuente. Para RCE, se envenena un log o la sesión con PHP y se incluye, o se usan wrappers data:// y php://input.

¿Cómo encontrar LFI en bug bounty?

Fuzzea parámetros que carguen páginas, plantillas o idiomas (page, file, lang) con payloads de traversal y wrappers. Apps PHP legacy y frameworks que incluyen vistas por parámetro son los objetivos más probables; php://filter ayuda a confirmar sin disparar errores.

¿Cómo prevenir el LFI?

No incluyas ficheros a partir de input del usuario; usa una allowlist de páginas/plantillas mapeadas server-side, canonicaliza y valida la ruta dentro del directorio permitido, y desactiva wrappers peligrosos y allow_url_include en PHP.

¿Diferencia entre LFI y RFI?

El LFI incluye ficheros LOCALES del servidor; el RFI (Remote File Inclusion) incluye un fichero REMOTO desde una URL del atacante (requiere allow_url_include). El RFI da RCE de forma más directa, pero hoy es raro porque esa opción suele estar deshabilitada; el LFI es mucho más común.

Empieza con labs de LFI

Practica Local File Inclusion (LFI) con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de LFI