Bugs y Exploits‎ > ‎Nivel Web‎ > ‎

Local File Disclosure


Mediante Local File Disclosure podemos acceder a leer el codigo fuente de un fichero, incluso de ficheros programados en PHP, asi pudiendo analizar su contenido en busca de otro tipo de vulnerabilidades o obteniendo información importante.

Un codigo vulnerable podria ser el mal uso de la función readfile() de PHP, cabe destacar que readfile() no es la única función que se puede presentar en un Local File Disclosure.


Ejemplo de codigo vulnerable a LFD 

//readfile.php
<?php
$file = $_GET['file'];
$readfile = readfile($file);
?>

Si quisieramos ver el codigo fuente de un fichero PHP, le damos de parametro el fichero del siguiente modo:

http://web.com/readfile.php?file=x7uk.php

Ahora podemos ver el contenido PHP de x7uk.php tan solo consultando su codigo fuente.

Obteniendo informacion importante 

//administracion.php
<?php
$usuario = $_GET['user'];
$pass= $_GET['pass'];
 
if($usuario == 'admin' && $pass == '1234'){
     echo 'Bienvenido a la administración';
   }Else{
     echo 'Usuario/contraseña incorrectos';
}
?>

http://web.com/readfile.php?file=administracion.php

¿Que mas se puede ver?

Podria ser el fichero /etc/passwd  y/o /etc/shadow (ficheros de contraseñas de Linux) ,sin embargo, no es todo lo que se puede ver, hay muchos ficheros interezantes que pueden ser de gran utilidad a un atacante, por ejemplo, el fichero /etc/hosts que es un archivo donde se especifica la ip de cierto domiño, es decir, si queremos entrar a cierta ip o domiño que este especificado en el host no necesitariamos consultar un DNS, lo hace directamente por el host.

También tenemos todos los ficheros /proc/ donde podemos encontrar informacion sobre el kernel, hardware, los procesos en ejecucion, etc
proporcionan informacion sobre el hardware del sistema:

/proc/interrupts
/proc/meminfo                      
/proc/mounts                       
/proc/cpuinfo                                            
/proc/partitions


informacion de configuracion del sistema
/proc/filesystems
/proc/kallsyms
/proc/cmdline
/proc/modules


El directorio /proc/sys proporciona informacion pero tambien (siendo administrador) se pueden activar o desactivar caracteristicas del kernel:

/proc/sys/fs
/proc/sys/dev/
/proc/sys/kernel/
/proc/sys/kernel/acct
/proc/sys/kernel/cap-bound
/proc/sys/kernel/domainname
/proc/sys/kernel/exec-shield
/proc/sys/kernel/exec-shield-randomize
/proc/sys/kernel/hostname
/proc/sys/kernel/hotplug
/proc/sys/kernel/modprobe
/proc/sys/kernel/version
/proc/sys/kernel/sysrq
/proc/sys/net/core/
/proc/sys/net/ipv4/
/proc/sys/vm/
/proc/sysvipc


El directorio /proc/net muestra información sobre la configuracion de red del sistema:

/proc/net/arp
/proc/net/atm
/proc/net/dev
/proc/net/dev_mcast
/proc/net/igmp
/proc/net/ip_conntrack
/proc/net/ip_tables_names
/proc/net/ip_mr_cache
/proc/net/ip_mr_vif
/proc/net/netstat
/proc/net/psched
/proc/net/raw
/proc/net/route
/proc/net/rt_cache
/proc/net/snmp
/proc/net/sockstat
/proc/net/tcp
/proc/net/tr_rif
/proc/net/udp
/proc/net/unix
/proc/net/wireless


Informacion de los drivers que estan siendo utilizados
/proc/driver


Otros Paths interesantes:
/dev/random
/proc/bus/
/proc/bus/usb/
/proc/bus/usb/devices
/proc/fs/nfsd/exports
/proc/tty/
/proc/tty/driver/serial
/proc/scsi/
/proc/ide/piix
/proc/ide/

Otros archivos con logs y archivos del sistema:
/etc/passwd
/etc/shadow
/etc/group
/etc/security/group
/etc/security/passwd
/etc/security/user
/etc/security/environ
/etc/security/limits
/usr/lib/security/mkuser.default
/apache/logs/error.log
/apache/logs/access.log
/apache/logs/error.log
/apache/logs/access.log
/apache/logs/error.log
/apache/logs/access.log
/etc/httpd/logs/acces_log
/etc/httpd/logs/acces.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/var/www/logs/access_log
/var/www/logs/access.log
/usr/local/apache/logs/access_ log
/usr/local/apache/logs/access. log
/var/log/apache/access_log
/var/log/apache2/access_log
/var/log/apache/access.log
/var/log/apache2/access.log
/var/log/access_log
/var/log/access.log
/var/www/logs/error_log
/var/www/logs/error.log
/usr/local/apache/logs/error_l og
/usr/local/apache/logs/error.l og
/var/log/apache/error_log
/var/log/apache2/error_log
/var/log/apache/error.log
/var/log/apache2/error.log
/var/log/error_log
/var/log/error.log

También podemosver archivos de configuracion como el php.ini el httpd.conf entre otros.

Como prevenir Local File Disclosure 

<?php
if ($_GET['page'] == "index"){
  readfile("index.php");
}
?>

Referencias 

http://www.milw0rm.com
http://php.net




Comments