viernes, 22 de julio de 2011

Local File Inclusion


                                                   Local File Inclusion 

Inclusión de archivos locales (también conocido como LFI) es el proceso de inclusión de archivos en un servidor a través
del navegador web.
Esta vulnerabilidad se produce cuando en una página no se incluyen apropiadamente la deteccion de errores, y acepta
los caracteres del directorio transversal a inyectar. 
Un ejemplo típico de un script PHP vulnerable a LFI es el siguiente: 

  <? Php                                             
    $ File = $ _GET ['file'];          
    if (isset ($ file))                       
    {                                                    
        include ("pages/$file");
    }                                                    
    else                                                
    {                                                    
        include ("index.php");               
    }                                                    
 >                                                    
La solicitud legítima hizo con el guión podría ser la siguiente: (URL posiblemente vulnerable)
  http://imationgroup.com/index.php?file=contactus.php

Pero si realmente es vulnerable se pordra salir de los directorios donde esta alojada la pagina y moverte por el sistema
operativo de esta forma:
  http://imationgroup.com/index.php?file=../../../../etc/passwd

Esto muestra los hashes de las contraseñas en MD5 en el servidor, que más tarde podría ser roto y se utiliza para obtener
acceso a archivos. (mirar tema de Cracker)
 

Crear un filtro  
La mayoría de los administradores de buena voluntad se han protegido contra los ataques de LFI de la forma más simple,
por lo que debe actualizar el script de esta forma. 

  <? Php                                                                
    $ File = str_replace ('../','', $ _GET ['file']);
    if (isset ($ archivo))                                           
    {                                                                       
        include ("pages/$file");                   
    }                                                                      
    else                                                                  
    {                                                                      
        include ("index.php");                                 
    }                                                                      
   >  
Ahora, nuestro sencillo ataque LFI ya no funcionará. Obviamente, no queremos ser disuadidos por esto, así que tenemos
que encontrar una manera para acceder a nuestro directorio transversal de trabajo, 
(se puede evadir los filtros).
Una forma de hacer esto es  codificar uno o más caracteres en hexadecimal.
Esto funciona porque el navegador decodifica la entrada, pero PHP no lo hace.
Nuestro nuevo LFI sería la siguiente: 

  http://example.com/index.php?file =..% 2F% 2F .. .. ..% 2F%% 2Fetc 2Fpasswd

Por lotanto el administrador de la pagina debe aplicar mas filtros.
 
 
Notas adicionales 
Los ataques de LFI se combinan a menudo con  Poison Null Bytes Attacks (ya lo posteare) , lo que les ayuda a pasar por
alto otras protecciones que se pueden poner en su lugar.

Informacion sacada de:
http://hakipedia.com/index.php/Local_File_Inclusion

Nota:
Casi identico porque es dificil esplicarlo mejor.
 --------------
Ejemplo practico
--------------
Escojemos una pagina con la terminacion de la url en: download.php?file=
Seleccionamos cualquier enlace para provar suerte....
Si todo va bien, deveria sarir algo asi:
bien, ahora se trata de probar con archivos que posiblemente existan como 'login.php, admin.php, registrer.php, index.php... todo lo que se os ocurra.
esto indica que no tiene filtro del directorio hacia delalante, me explico:
en la url, sabemos que se puede acceder a archivos del mismo directorio, aun no se puede saber si tiene alguno hacia atras...
si lo tubiera, no se podria acceder a ww.____.com.br/download.php?file=../../../../../../../../etc/passwd
pero eso mas tarde...
Ahora toca inspeccionar los archivos descargados:

lo que se suele hacer, es descargarse todo lo que se pueda y luego inspeccionar....
 Aqui se puede observer perfectamente en la ruta, que es de un sistema Linux y el nombre de usuario
esto puede servir , entre otros, de ayuda a la hora de ejecutar codigo arbitrario (SQL) en la maquina remota
así como buscar exploits, ect....
Curioseando en la pagina.. me he encontrado con la url de la imagen.
que, parte de ella esta en hexadecimal, esto quiere decir que tampoco existe nngun tipo de filtro para caracteres hexadecimales...

esto viene bien saberlo, porque si queremos ir hacia atras en los directorios y no deja y/o muestra mensaje de error, se puede provar a difrar la url en hexadecimal o otros lenguajes

puede que esto no funcione:
ww.____.com.br/download.php?file=../../../../../../../../etc/passwd
 pero tal vez esto si:
ww.____.com.br/download.php?file=%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/etc/passwd
o esta:
ww.____.com.br/download.php?file=%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E%2F%2E%2E/etc/passwd

o todas esas pero con Poison Null Bite
todo es ir provando...

hasta pronto!

No hay comentarios:

Publicar un comentario