LFI | Local File Include (Inclusion Local de Archivos)

LFI | Local File Include (Inclusión Remota de Archivos)

 
lfi local file include

¿Qué es LFI?

La vulnerabilidad LFI o en español inclusión local de archivos, son aquellas que permiten a un atacante robar datos, información, archivos o ejecutar código malicioso, pues esta vulnerabilidad permite a un atacante manipular los servidores web, por medio de parámetros vulnerables, mediante la inclusión de una URL, la cual haga de referencia para albergar código arbitrario, de este modo permitiendo la ejecución remota. 

En otras palabras, es una vulnerabilidad que permite cargar y ejecutar archivos locales, se da por un error de programación PHP, donde se carga un archivo, contenido en una variable.

"Gran parte de las vulnerabilidades web, se dan por una mala validación de datos, tanto entrantes como salientes en una aplicación" - Drok3r


Un ejemplo de código PHP vulnerable es aquel que utiliza las sentencias include o require por ejemplo:

 <?php
include $_GET['variable'];
?>

En la URL del sitio seria, donde en el código anterior, "variable" seria remplazado por pagar.html.

http://www.objetivo.com/view.php?page=pagar.html

Funciones PHP más usadas que permiten inclusión de ficheros:

include "fichero";
require "fichero";
include_once "fichero";
require_once "fichero";

La vulnerabilidad LFI permite ejecutar o descargar archivos locales del propio servidor, (en otro post veremos la vulnerabilidad RFI, lo contrario a LFI). Estos archivos pueden ser los de configuración, logs, passwords, etc. Los motivos por los cuales se da esta vulnerabilidad, son de error de programación, como ya lo había mencionado, pero especificado un poco, podemos decir que se da por: 

Utilizar las sentencias include o require, con una variable en lugar del archivo especifico.  No validar el contenido de la variable. (Algo común en la inyección de código)  

Explotando LFI Para detectar la vulnerabilidad lo podemos hacer, con solo ver la URL del sitio. Suponiendo que nuestro objetivo es el siguiente:

Http://www.banco.com.mx/view.php?sitio=login.php

Podemos ver que en la URL el archivo view.php tiene el parámetro "sitio", el cual tiene login.php. Donde el código PHP vulnerable seria:

 <?php
include $_GET['sitio'];
?>

Para explotar la vulnerabilidad se hace lo siguiente:

Http://www.banco.com.mx/view.php?sitio=/etc/passwd

De esta forma tendríamos acceso al directorio etc/passwd en sistemas linux.

Protección contra LFI

La protección que se debe implementar para evitar se víctima de este tipo de vulnerabilidad, es que el programador filtre la variable o en su defecto no utilice una variable con las sentencias.

✖️ CÓDIGO VULNERABLE
<?php
include $_GET['sitio'];
?>

☑️ CÓDIGO NO VULNERABLE
<?php
if ($sitio=="login")
include ($sitio.”.php”);
?>

Mejorando el código anterior es recomendable utilizar un if-else o switch para validar el contenido de la URL, también es recomendable utilizar la función file_exist

 <?php
if(!file_exists($_GET['page'])){
die(‘No existe’);
} else {
require_once($_GET[‘page’]);
?>


Publicar un comentario

0 Comentarios

Slider Parnert

Subscribe Text

¿Quieres estar al día con noticias?