Inicio > PHP > Vulnerabilidad lfi

VULNERABILIDAD LFI

24/11/2017PHP

 

Hace poco descubría la vulnerabilidad LFI (Local File Inclusion) o la inclusión local de ficheros que consiste en incluir ficheros locales, es decir, archivos que se encuentran en el mismo servidor de la web. Esta vulnerabilidad permitiría a un atacante modificar los parámetros de lo que se incluye, por ejemplo, podría indicarle al sitio web que se incluyan otros archivos que también están en el servidor, comprometiendo la seguridad del mismo por completo. Un ejemplo sería el archivo de contraseñas, de configuración, etc...
Seguro que más de uno habéis visto páginas web que tienen un parámetro GET como page y donde el atacante podría cargar el fichero alojado en el servidor que quiera.

include $_GET[?pagina?];

Para evitar que esta técnica, sería importante montar el servidor con el mínimo privilegio posible, limitando la posibilidad de acceso a archivos del servidor dentro de su propia carpeta. Con esto se logra evitar el acceso a archivos del sistema, aunque no a ficheros propios de la aplicación. Si se desea hacer una protección mediante programación en lugar de tratar de controlar mediante permisos en el servidor, hay que tener en cuenta que las rutas a ficheros se pueden escribir de dos maneras:
  • Directa: Eliminar los caracteres "\" o "/" de los datos enviados por los usuarios.
  • Relativa: Subir hacia directorios superiores mediante el uso de "..\" o "../". Lo podríamos evitar excluyendo, además de lo anterior, los puntos.
Una solución sería:

$pagina = isset($_GET['pagina']) ? $_GET['pagina'] : 'home';
require $pagina . '.php';
Espero que sea de utilidad.