Saltar al contenido principal

LFI

Bajo

Como dicho ataque consiste en poder cargar archivos locales, podemos ir a la url principal y buscar el robots.txt para las pruebas, si existe lo que tenemos que hacer es averiguar donde esta, esto lo hacemos entrando y saliendo de los directorios, por lo que si ponemos el siguiente codigo

../../robots.txt

Podemos observar que carga el fichero con los permisos para los robots.

Ataque básico fichero robots

Ahora lo que tenemos que hacer es seguir buscando los diferentes niveles de carpetas hasta llegar a información interesante como el /etc/passwd

../../../../../etc/passwd

Ataque básico fichero passwd

Medio

Cambiamos el nivel y si volvemos a probar la ruta de robots, vemos que esta vez no funciona

Fallo ataque medio

Si nos fijamos en el código , vemos que hace una sustitución con str_replace no dejándonos usar el ../ para movernos por los directorios

$file = str_replace( array( "../", "..\"" ), "", $file );

Pero como str_replace no es recursivo, podemos jugar con ello cambiando los el movimiento de carpetas por esto

....//

Lo que sucederá es que se eliminara el ../ dejando el que lo envuelve en su lugar, volviendo a funcionar el ataque.

Ataque medio

Alto

Vamos con el ultimo nivel, volvemos a probar los ataques de antes

Fallo ataque basico en nivel alto

Fallo ataque medio en nivel alto

Y como vemos no nos funcionan ninguno de los dos, al fijarnos en el código

if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}

vemos que usa la función fnmatch para comprobar si en la ruta existe la palabra file, por lo que podemos usar file:// que da acceso al sistema de ficheros local en php y contiene la palabra file

file:///var/www/html/robots.txt

Ataque alto robots

file:///etc/passwd

Ataque alto passwd