Duda con Remote File Disclosure

Iniciado por pedrox@, 13 Agosto 2008, 14:40 PM

0 Miembros y 1 Visitante están viendo este tema.

pedrox@

Hola buenas.

¿De que manera podría parchear un Remote File Disclosure?
Ejemplo código:

Código (php) [Seleccionar]
<?php

$filename 
$_GET['filename'];
$fp fopen($filename'r');
$doc fread($fpfilesize($file));
echo 
$doc;

?>


Con este tipo de fallo el atacante podría leer cualquier archivo de texto plano:
http://localhost/archivovulnerable.php?filename=/etc/group

¿Qué formas habría de solucionar este fallo?

Salu2

Diabliyo

#1
Cita de: pedrox@ en 13 Agosto 2008, 14:40 PM
Hola buenas.

¿De que manera podría parchear un Remote File Disclosure?
Ejemplo código:

Código (php) [Seleccionar]
<?php

$filename 
$_GET['filename'];
$fp fopen($filename'r');
$doc fread($fpfilesize($file));
echo 
$doc;

?>


Con este tipo de fallo el atacante podría leer cualquier archivo de texto plano:
http://localhost/archivovulnerable.php?filename=/etc/group

¿Qué formas habría de solucionar este fallo?

Salu2

Pues la solucion depende de lo que quieres hacer con tu script, por ejemplo:

Digamos que ese script lo quieres para leer un datos o varios datos dentro del mismo directorio donde trabaja el script con la finalidad de obtener informacion que has ido resguardando, entonces solo utilizas un strchr(); para verificar la existencia de un caracter, de modo que evitas la existencia de carateres como '/'. Por otro lado si vas a leer archivos (sin saber el nombre) de un directorio en especifico, pues vuleves a utilizar strchr() para verificar que exista el nombre del directorio dentro del valor $_GET[].

Todo seria en cuestion de: Que quieres que haga ese script ?....

bye bye

Código (php) [Seleccionar]
<?php
function seguridad_archivos$archivo )
     {
     
//aqui pondremos todas las comparaciones que debe pasar la variable
     //strchr() es igual que stristr(), solo que stristr() ignora si son mayusculas o minusculas
     
     //en el caso que leamos del directorio actual, sin movernos, asi que no debera existir un /
     
if( stristr$archivo'/' ) )
          return 
0//no pasa

     //esta seria en caso que deseamos leer de un directorio unicamente
     //oviamente no utilizariamos el condicional anterior xD
     
else if( !stristr$archivo"carpeta/") )
          return 
0//no paso

     
return 1//si paso
     
}

if( 
seguridad_archivos($_GET['filename']) )
     {
     
$filename $_GET['filename'];
     
$fp fopen($filename'r');
     
$doc fread($fpfilesize($file));
     echo 
$doc;
     }
else
     echo 
"Anti-Hack Activado jejejej :P";

?>