Pasos para encontrar una LFI
- Encuentra un punto de entrada que podría ser vía
GET,POST,COOKIEoHTTP. - Mete un input válido para ver cómo se comporta el servidor.
- Mete inputs inválidos para ver cómo es el manejo de errores.
- No siempre de fíes de los formularios. Puedes usar una herramienta como Burp Suite para ver qué pasa por detrás.
- Busca errores para encontrar la ruta de la aplicación. Si no hay errores, puede que tu mejor opción sea prueba y error.
- Entiende la validación de input y si hay filtros.
- Prueba a inyectar una entrada válida para leer archivos sensibles.
#1
Debes capturar la flag en /etc/flag1.
- Vamos a la página dada.

- El input
welcome.phpno hace nada.
- Mandamos
POST welcome.phppero no pasa nada asique vamos a ver qué está pasando en burpsuite.
- Volvemos a probar pero ahora con
intercept onen Burp Suite.
- En Burp Suite vemos que se está enviando por
GETy que no pasa nada, vamos a cambiar el método de envío:

- Vemos que en la respuesta se ha cargado el contenido de
welcome.php:
- Vamos a probar a cargar el contenido de
/etc/flag1:
- Obtenemos la flag.

#2
Debes capturar la flag en /etc/flag2.
- Vamos al laboratorio 2, donde vemos el siguiente mensaje:

- Miramos en las herramientas de desarrollador:

- Vamos a probar cambiando ese valor a "Admin". Al refrescar la página:

- Vemos que está intentando cargar el archivo "Admin.php":

- Vamos a intentar cargar el archivo
/etc/flag2:
- Parece que sólo comprueba que la cookie no sea
Guesty carga el nombre del archivo de lacookie + .php. Vamos a probar a usarNULL BYTE.
- Parece que nos hemos librado de la extensión
.phppero no puede llegar al directorio, haremos uso de../.
#3
Debes capturar la flag en /etc/flag3.
- Vamos al laboratorio indicado y probamos con un input válido
welcome:
- Probaremos con un input inválido
/etc/flag3.
- Vemos que se están suprimiendo las
/. Probaremos a meter dos (//etc//flag3):
- Vemos que también se borran, y que además hay extensión
.phpforzada. Vamos a probar con elNULL BYTE:

- Vamos a probar a ver si no filtra algún carácter.

- Probaremos en la URL la siguiente lista de los 128 caracteres ASCII URL-encodeados:
%00%01%02%03%04%05%06%07%08%09%0A%0B%0C%0D%0E%0F%10%11%12%13%14%15%16%17%18%19%1A%1B%1C%1D%1E%1F%20%21%22%23%24%25%26%27%28%29%2A%2B%2C%2D%2E%2F%30%31%32%33%34%35%36%37%38%39%3A%3B%3C%3D%3E%3F%40%41%42%43%44%45%46%47%48%49%4A%4B%4C%4D%4E%4F%50%51%52%53%54%55%56%57%58%59%5A%5B%5C%5D%5E%5F%60%61%62%63%64%65%66%67%68%69%6A%6B%6C%6D%6E%6F%70%71%72%73%74%75%76%77%78%79%7A%7B%7C%7D%7E%7F
- Los únicos caracteres no filtrados son a-z. Vamos a intentar cargar un php remoto para leer al flag.

- Cargamos un servidor python que liste el archivo:

- Probamos desde la URL:

- Vamos a probar con curl:
curl http://10.10.19.115/challenges/chall3.php -d "method=post&file=../../../../etc/flag3" --output -
- Vemos que sale con
.phpasí que probaremos elNULL BYTE:curl http://10.10.19.115/challenges/chall3.php -d "method=post&file=../../../../etc/flag3%00" --output -
