VULNERABILIDADES DE APLICACIONES WEB: LA INCLUSIÓN LOCAL DE ARCHIVOS (II)

17.01.2018 11:37
 
Cuidado, este archivo: 
 
<?php
   include( $_GET['pagina'] );
?>
 
permite enviar la siguiente URL:
 
https://127.0.0.1/directorio/atras2.php?pagina=C:\xampp\apache\logs\access.log
 
con lo que cualquier pirata informático obtendrá información de mucho provecho. De por sí el tener la ruta "C:\xampp\" es una pésima idea, pero lamentablemente es algo muy frecuente.
 
Si en la aplicación hubiera una vulnerabilidad tipo "Directory Traversal" todo podría empeorar. 
 
La mejor forma de prevenir la inclusión local de archivos en evitando la inclusión dinámica de los mismos en base al input del usuario. Si eso no fuera posible es necesario hacer una lista blanca con los nombres de archivos que pueden ser incluidos. Damos un ejemplo:
 
<?php  
$paginas = array('rojo', 'azul', 'verde');  
if(isset($_GET['pagina']) and in_array($_GET['pagina'], $paginas)) {  
  include $paginas[array_search($_GET['pagina'], $paginas)] . '.php';  
} else  
  die('No se ha especificado la página a mostrar o no existe en el servidor');  
?>
 
Algunas de las otras sentencias y funciones vulnerables son: include(); include_once(); require(); require_once(); file() y file_get_contents(), aunque se podría agregar alguna más a la lista.
 
Artículo relacionado: