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
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.
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.
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.
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
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.
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.
Clase JStream de Joomla
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.
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).
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.
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.