Desarrollo de módulos auxiliares HTTP en Metasploit - Vulnerabilidad Highlight Joomla

Continuando con los tutoriales para la construcción de módulos auxiliares en metasploit (Click aquí para ver la primera entrega), el siguiente tutorial ilustra la construcción de un módulo para explotar una vulnerabilidad de Joomla versiones anteriores a 2.5.8 o 3.0.2.

Estas versiones del CMS Joomla no validan correctamente el parámetro hightligth, el luego el valor de este parámetro se pasa a la función unserialize

Desarrollo de módulos Metasploit-1

El peligro de utilizar la función unserialize es que permite la instancia de clases, esto quiere decir que si como parámetro enviamos el nombre de una clase, esta función internamente crea la instancia de la clase y ejecuta sus funciones de construcción y destrucción.
Para mayor información sobre los peligros del método unserialize de PHP favor remitirse a los siguientes enlaces.

El investigador Marcin "redeemer" Probola público un script realizado en Python, el cual aprovecha la vulnerabilidad y el cual vamos a utilizar como base para la creación de nuestro módulo en Metasploit.

Desarrollo de modulos Metasploit-2

Marcin "redeemer" Probola hace uso de una clase en Joomla que se llama JStream esta clase cuenta con las características necesarias para invocarla desde la función unserialize y cuenta con un método adicional llamado close el cual se invoca una vez se llama el método destructor de la clase JStream.

Desarrollo de modulos Metasploit-3

El script de redeemer se utiliza para crear una conexión ftp con un servidor que pasamos por parámetro y la función close como es invocada al destruir la clase permite ampliar lo que es una petición normal http a una ftp con comando de escritura de permisos. Lo cual es aprovechado para hacer denegación de servicio (DOS) del servicio http.

Vamos a empezar a crear nuestro modulo en metasploit y como siempre lo primero es la definición y los parámetros:

Nombre, descripción, autor ......

Y como parámetro la url del Joomla, dado que a veces es utilizado como un sub-sitio.

Desarrollo de modulos Metasploit-4

Las dos primeras funciones son funciones auxiliares que nos van ayudar a definir los valores de las variables de la url de joomla y el protocolo. Si requieren más información de esta asignación pueden remitirse al primer tutorial de Desarrollo de Módulos Metasploit

Desarrollo de modulos Metasploit-5

Vamos a centrarnos en las funciones run_host y una función creada para el ataque do_request

La función run_host es la que se llama por defecto cuando ejecutamos el comando run desde la consola de Metasploit.

Como el ataque es de Denegación de servicio, el siguiente código realiza dos ciclos, uno de 1 a 15 y el otro de 0 a 9, esto con el fin de generar 150 peticiones. A su vez utilizo la función framework.threads.spawn para generar los hilos y que las peticiones sean en paralelo y no en serie, con esto conseguimos que cada uno de los 15 hilos lance su 10 peticiones en paralelo.

Como se puede observar en la imagen en la línea 59, se hace el llamado de la función do_request.

Desarrollo de modulos Metasploit-6

Ahora vamos a enfocarnos en la función do_request. Esta función se encarga de hacer la petición al servidor y amplificar el ataque enviando el parámetro highlight envenenado.

Lo primero que se hace es definir los parámetros de la conexión FTP, para este ejemplo voy a enrutar el ataque hacia el mismo servidor por esta razón creo una conexión apuntando a localhost con un usuario "u" y un password "p", lo cual va a generar peticiones invalidas pero convenientes para nuestro ataque de DOS. Después lo que se realiza es la inicialización de la clase JStream con todos sus valores por defecto. Por favor compare las dos siguientes imágenes para entender la relación del código del exploit (líneas 79 - 100) con la Clase Jstream de Joomla.

Desarrollo de modulos Metasploit-7

Clase JStream de Joomla

Desarrollo de modulos Metasploit-8

Algunos se preguntaran por que se crea la petición en formato Json y es debido a la falla de seguridad que recibe el parámetro lo decodifica en base 64 y lo interpreta con la función unserialize, sin ningún tipo de validación.

Desarrollo de modulos Metasploit-9

Por último se envía la petición http con la función send_request_cgi, haciendo uso del método GET y con la variable highlight previamente construida (Línea 110).

Desarrollo de modulos Metasploit-10

En la siguiente imagen se puede observar como aumenta el consumo de la CPU y recursos del servidor una vez se efectúa el ataque.

Desarrollo de modulos Metasploit-11

Espero sus comentarios, perdón si no me supe explicar bien.

Artículo escrito por Luis Hernández, Especialista Seguridad Informática @luisco100 para La Comunidad DragonJAR.

Subir