VULNERABILIDADES DE APLICACIONES WEB: LA INCLUSIÓN LOCAL DE ARCHIVOS

16.01.2018 11:41
 
Como es habitual, graficaremos la vulnerabilidad con un ejemplo bien simple:
 
El archivo "adelante.html" es el siguiente:
 
<html>
<form action="atras.php" method="get">
   <select name="idioma">
      <option value="castellano">Castellano</option>
      <option value="quechua">Quechua</option>
   </select>
   <input type="submit">
</form>
</html>
 
y "atras.php"
 
<?php
   if ( isset( $_GET['idioma'] ) ) {
      include( $_GET['idioma'] . '.php' );
   }
?>
 
Obviamente en el mismo directorio que los dos archivos de arriba existen "castellano.php" y "quechua.php". Uno de los mismos será incluido cuando se seleccione una opción de idioma ya que en "atras.php" se estará reemplazando "idioma" por el valor seleccionado, por ejemplo:
 
include 'castellano.php';
 
ya que $_GET['idioma'] es reemplazado por "castellano" y el operador "." lo concatena con ".php".
 
Si en el mismo directorio que los otros cuatro archivos existiera uno llamado informacion.php con el siguiente contenido
 
<?php phpinfo() ?>
 
y en la barra de direcciones del navegador escribiéramos lo siguiente:
 
https://localhost/directorio/atras.php?idioma=informacion 
 
en "atras.php" include quedaría así:
 
include 'informacion.php';
 
Dado que la sentencia include incluye y evalúa el archivo especificado, "informacion.php" será ejecutado, dejando expuesta una gran cantidad de datos de sumo provecho para un pirata informático.
 
Por ahora dimos sólo un ejemplo muy simple de esta vulnerabilidad en la que próximamente profundizaremos y enseñaremos a prevenir.