Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: pedrox@ en 13 Agosto 2008, 14:40 pm



Título: Duda con Remote File Disclosure
Publicado por: 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
  1. <?php
  2.  
  3. $filename = $_GET['filename'];
  4. $fp = fopen($filename, 'r');
  5. $doc = fread($fp, filesize($file));
  6. echo $doc;
  7.  
  8. ?>

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


Título: Re: Duda con Remote File Disclosure
Publicado por: Diabliyo en 13 Agosto 2008, 16:26 pm
Hola buenas.

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

Código
  1. <?php
  2.  
  3. $filename = $_GET['filename'];
  4. $fp = fopen($filename, 'r');
  5. $doc = fread($fp, filesize($file));
  6. echo $doc;
  7.  
  8. ?>

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
  1. <?php
  2. function seguridad_archivos( $archivo )
  3.     {
  4.     //aqui pondremos todas las comparaciones que debe pasar la variable
  5.     //strchr() es igual que stristr(), solo que stristr() ignora si son mayusculas o minusculas
  6.  
  7.     //en el caso que leamos del directorio actual, sin movernos, asi que no debera existir un /
  8.     if( stristr( $archivo, '/' ) )
  9.          return 0; //no pasa
  10.  
  11.     //esta seria en caso que deseamos leer de un directorio unicamente
  12.     //oviamente no utilizariamos el condicional anterior xD
  13.     else if( !stristr( $archivo, "carpeta/") )
  14.          return 0; //no paso
  15.  
  16.     return 1; //si paso
  17.     }
  18.  
  19. if( seguridad_archivos($_GET['filename']) )
  20.     {
  21.     $filename = $_GET['filename'];
  22.     $fp = fopen($filename, 'r');
  23.     $doc = fread($fp, filesize($file));
  24.     echo $doc;
  25.     }
  26. else
  27.     echo "Anti-Hack Activado jejejej :P";
  28.  
  29. ?>