← Regresar a lecciones

    PHP

  • penetration testing

  • seguridad web

  • LFI

  • hacking-etico

  • local-file-inclusion

Explorando LFI (Local File Inclusion)

¿Qué es LFI?

En esta lección nos sumergiremos en una de las vulnerabilidades más comunes y peligrosas en aplicaciones web: Local File Inclusion (LFI). Como siempre, lo haremos desde un enfoque técnico y práctico, pero sin dejar de lado la voz humana que acompaña cada línea. Aquí no solo aprendemos herramientas, sino también a pensar, a analizar, a conectar puntos.

¿Qué es LFI?

Local File Inclusion es una vulnerabilidad que ocurre cuando una aplicación web permite incluir archivos del sistema de archivos del servidor sin una validación adecuada. En otras palabras, si un parámetro dentro de una URL se utiliza directamente para incluir un archivo, y no se filtra o valida correctamente, es posible incluir archivos arbitrarios. Esto puede permitir que un atacante lea archivos confidenciales del sistema, como:

  • /etc/passwd (usuarios en sistemas Linux)
  • Archivos de configuración de aplicaciones
  • Logs del sistema
  • Archivos con credenciales o claves

¿Cómo identificar LFI?

Los parámetros sospechosos que cargan páginas o plantillas (como ?page= o ?file=) son posibles vectores.

Ejemplo de código vulnerable:

1<?php 2$page = $_GET['page'] ?? 'home'; 3include("pages/$page.php"); 4?>

Si accedemos a la URL con algo como:

http://example.com/index.php?page=about

El servidor incluirá el archivo pages/about.php. Pero ¿qué pasa si manipulamos el valor?

http://example.com/index.php?page=../../../../etc/passwd

Esto podría cargar el archivo /etc/passwd desde el sistema del servidor. Esto es Local File Inclusion.

¿Cómo se ve LFI en acción?

Imaginemos esta estructura de archivos en un servidor:

/var/www/html/
├── index.php
├── pages/
│   ├── home.php
│   └── about.php
├── flag.txt

Y una aplicación vulnerable accedida con:

1http://example.com/index.php?page=../../flag

El archivo flag.txt podría ser leído si está al alcance de la ruta relativa utilizada.

Bypasses comunes

En entornos reales, los archivos pueden requerir extensiones o tener filtros. Algunos métodos para evadir filtros incluyen:

  • Agregar comentarios al final: ../../flag%00 o ../../flag.txt%00
  • Usar encoding: ..%2f..%2f..%2fetc%2fpasswd
  • Añadir extensiones falsas: ../../flag.txt.php Importante: no todos los entornos permitirán leer archivos arbitrarios. El éxito depende de configuraciones del servidor y permisos.

Recomendaciones para evitar LFI

  • Validar y filtrar parámetros de entrada
  • Utilizar listas blancas (whitelists) de archivos permitidos
  • No incluir rutas desde parámetros directamente
  • Configurar permisos adecuados en el sistema de archivos

Cada vez que encuentras una vulnerabilidad como esta, no estás solo viendo una falla. Estás viendo cómo decisiones pequeñas, líneas de código no revisadas, se convierten en puertas abiertas. Estás entrenando tu mente para ver lo invisible, para leer lo que otros no leyeron. Eso es ser pentester. Y eso es crecer.