a pues que si le dices que inluya "X" archivo lo incluye
pasa por el include por que las barras estan permitidas en este, o sea
Código :
<?php
include(../informes/hoy.php);
?>
entonces, cuando tu haces un
Código :
<?php
include(/etc/passwd);
?>
lo toma como una ruta correcta y lo incluye
para evitar este tipo de ataques (Remote File Inclusion) tienes que limpiar tus variables y especificar un directorio por defecto
Código :
<?php
$directorio_base = 'informes';
$archivo = $_GET['pag'];
include($directorio_base."/".$archivo.".php");
?>
y, antes, debes quitar las barras, dos puntos, y barras invertidas, yo tengo una funcion para ello
Código :
<?php
function limpia($var){
$malo = array("\\","/",";","\'","<",">","'",":");
$i=0;$o=count($malo);
while($i<=$o){
$var = str_replace($malo[$i],"",$var);
$i++;
}
return $var;
} ?>
con esta tambien evitas ataques de XSS (Cross Site Scripting)
y, tambien podrias agregar a l array de
$malo el punto, de esa forma ya no podran agregar un archivo externoo, con extencion [...]
quito los dos puntos ":" por que algunas veces no sabes que SO es el servidor(seria gracioso estar atacando un server yno saber que SO es xDDDD) entonces pueden insertar una shell remota
[...]
espero que te sirva de ayuda esto y saludos