Tutorial de Inclusion de Archivos

Hola a todos!!! Esta semana vamos a hablar de una vulneribilidad muy conocida llamada Inclusion de Archivo.

Inclusion de Archivos es una vulnerabilidad que afecta a aplicaciones web. Las aplicaciones que padecen de esta vulnerabilidad erran en sanitizar apropiadamente datos provistos por el usuario. Esta vulnerabilidad se encuentra en la manera en la que la aplicacion web procesa o accesa a archivos.

Analizemos el siguiente codigo en PHP:

  if (!isset($_GET['pagina'])) {
  	$_GET['pagina'] = "inicio.php";
  }
  include($_GET['pagina']);
  

En el codigo anterior podemos ver que primero se verifica si el parametro pagina fue provisto por el usuario, en caso de no ser asi se le asigna el valor de inicio.php, seguidamente se procede a incluir la pagina que se especifico en el arreglo $_GET.

Evidentemente este codigo es vulnerable a un ataque de inclusion de archivos, dado que el codigo no verifica lo que el usuario ha ingresado. Asi pues, si enviamos al servidor vulnerable un URL http://ejemplo?pagina=index.php, el servidor entonces funcionaria correctamente, pero en el caso de que nosotros enviaramos un URL con el nombre de otro archivo, como /etc/passwd o /etc/apache2/log/error.log, y el servidor web nos sirviera alguno de los archivos anteriores, entonces confirmanos una vulnerabilidad de inclusion de archivos.

Tipos de Vulnerabilidad

Existen dos tipos de vulnreabilidad en ataque de inclusion de archivos: inclusion local e inclusion remota.

  • Inclusion Local de Archivos (Local File Inclusion - LFI)
    En este caso, un atacante solo puede acceder a archivos locales dentro del servidor vulnerable.
  • Inclusion Remota de Archivos (Remote File Inclusion - RFI)
    En este caso, el atacante puede acceder a archivos remotes, es decir otros servidores

Un Ejemplo

Analizemos el siguiente escenario. Tenemos un servidor web en la direccion IP 192.168.56.102 en el puerto TCP 80, y nuestro ordenadior Kali Linux tiene la direccion IP 192.168.56.101. si navegamos a la aplicacion web en http://192.168.56.102/lfi con nuestro navegador podemos ver la siguiente lo siguiente:

Parece un Landing Page de una empresa llamada Super Compania. Si damos click en el link de servicios podemos ver que nos redirecciona a pagina de los servicios de esta empresa.

Si revisamos el area del URL en nuestro navegador, nos podemos dar cuenta de que el cambio de pagina es dado a la entrada provista por el usuario en el parametro pagina.

Ahora si nosotros usaramos otro valor para este paremetro, como por ejemplo /etc/passwd que es basicamente una lista de usuarios para sistemas Linux talvez lograriamos que la aplicacion web accederia a un archivo que no esta planeado dentro de su diseno. Ahora para poder utilizar el payload correcto, necesitamos brincar a varios directorias hacia atras para llegar al directorio raiz. He aqui entonces nuestro payload:

 ../../../../etc/passwd 
 

Si ponemos nuestro payload en el parametro de pagina, entonces la aplicacion nos mostrara dicho archivo. Efectivamente descubriendo una vulnerabilidad de inclusion de archivos.

Desde aqui, podriamos intentar acceder a otros archivos que nos pudiesen dar Ejecucion Remota (RCE), como archivos con contrasenas, las llaves privadas para Secure-Shell (SSH), respaldos, o archivos de registros para intentar un ataque de envenamiento de registro (Log Poison).

Conclusion

Una vulnerabilidad de Inclusion de Archivos generalmente tiene riesgo alto, es importante siempre snaitizar cualquier entrada de el usuario para evitar crear oportunidades de ataque.

Comentarios

Entradas más populares de este blog

Tutorial para Instalar Visual Studio 2019 (Community Edition) en Windows.

Tutorial de Burpsuite

Tutorial de Inyeccion de SQL