PHP
penetration testing
seguridad web
LFI
hacking-etico
local-file-inclusion
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.
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)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.
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:/index.php?page=../../flag
El archivo flag.txt
podría ser leído si está al alcance de la ruta relativa utilizada.
En entornos reales, los archivos pueden requerir extensiones o tener filtros. Algunos métodos para evadir filtros incluyen:
../../flag%00
o ../../flag.txt%00
..%2f..%2f..%2fetc%2fpasswd
../../flag.txt.php
Importante: no todos los entornos permitirán leer archivos arbitrarios. El éxito depende de configuraciones del servidor y permisos.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.