domingo, 26 de julio de 2015

Fingerprinting en Joomla

¡Saludos!

<TL;DR;>

He hecho un script para sacar la versión de los Joomla, así como qué plugins con vulnerabilidades conocidas posee (y link al exploit). Ventajas frente a Joomscan, JoomlaScan, el escáner de Metasploit, etc.: está actualizado para hacer fingerprint a las versiones recientes de Joomla y la base de datos de componentes es mayor.

Kum0nga => https://github.com/0verl0ad/kum0nga

</TL;DR;>


Ahora vayamos al turrón.

Extraer la versión de Joomla

Prácticamente en todos los CMS el proceso de identificación de la versión que anda utilizando la página web objeto de la auditoría viene determinada por dos opciones:

  • Localizar ficheros donde explícitamente se indique la versión instalada
  • Detectar detalles que únicamente aparezcan en una determinada versión
El primer caso sería lo ideal, pero si el administrador de la web ha hecho bien sus deberes eliminará todos los puntos desde los cuales el auditor pueda extraer la información de forma directa.

En joomla podemos encontrar la versión, tal cual, en diferentes ficheros accesibles a través del navegador. Por ejemplo, un buen sitio donde mirar es en el archivo "joomla.xml" que queda alojado en la ruta /administrator/manifests/files/joomla.xml






Por otra parte los archivos XML generados en los packs de lenguajes también puede aportarnos información acerca de la versión, por ejemplo /language/en-GB/en-GB.xml






 En la imagen de arriba se observan también nombres de componentes, sobre eso hablaremos más tarde.

  Cuando estos archivos jugosos no se encuentran accesibles, o les han sido extirpados los datos relevantes, podemos recurrir a realizar un fingerprint de la plataforma. Para ello, lo ideal, es realizar un análisis a todas las versiones de Joomla para hallar diferencias que permitan acotar ante qué versión nos encontramos.

Para que nos entendamos, imaginemos que en la rama 2.X y 3.X en un archivo .JS aparece una determinada línea. Si comprobamos ese archivo en una web, y está sabremos que pertenece a la rama 2.X o a la 3.X (y si no lo está sabemos que no pertece a esas ramas). A continuación buscaríamos algo que sólo estuviese en una de esas ramas, y así continuamente, hasta dar con la versión instalada.

Por suerte para nosotros ya hay personas que han buscado estas diferencias y ya han hecho parte del trabajo (un buen punto de partida es este post https://www.gavick.com/blog/how-to-check-the-version-of-joomla . Esto que nos ahorramos.

Para ganar precisión (y actualizar a las nuevas versiones) procedí a descargarme todas las versiones de joomla publicadas y hacer diffing para encontrar diferencias. Fruto de ello es el script kum0nga que actualmente utilizo para la identificación de la versión. Todavía se podría llegar a afinar mucho más la versión (en muchos casos indico entre y qué versión puede estar, pero no la exacta), pero eso se lo dejo a la gente que quiera colaborar.

Cabe decir que a veces existen discrepancias entre las versiones extraídas directamente, ya que a veces al actualizar algunos ficheros no son cambiados y podemos encontrar que en archivo de lenguaje aparece una versión más antigua que en el joomla.xml, por ejemplo. Ante estos casos el fingerprint es la única salida para estar seguros.

Detectar componentes instalados

 Como vimos en la imagen anterior, a veces los plugins generan entradas en los archivos de lenguaje. Otras veces los ficheros que aparecen listados existen realmente pero no han sido linkeados al .xml, por lo que si accedemos (por ejemplo /language/en-GB.com_weblinks.ini) y vemos que existe el fichero, ese plugin estará instalado. 

  En el fondo, al igual que ocurre con el resto de los CMS, la detección de si un plugin se encuentra instalado o no se reduce al envío de peticiones HTTP a rutas de instalación, y comprobar la respuesta del servidor.

Las rutas habituales de instalación son /components/com_nombre del componete. Por ejemplo, si queremos saber si está instalado weblinks, mandaríamos una petición a url-falsa.com/components/com_weblinks.

En muchas ocasiones podemos llegar a determinar incluso la versión del componente instalado a través de ficheros .xml. Ficheros comunes son los manifest.xml, index.xml, y readme.xml. 

Kum0nga

Se trata de un pequeño script que he hecho para cuando me toca trabajar con Joomla. Básicamente realiza un fingerprint más acertado (aunque todavía queda mucho por mejorar) y actualizado que el resto de herramientas que se encuentran en internet (incluyendo el escaner de Metasploit). 

La lista de componentes que detecta está directamente extraída (scrapeada cutremente y que habría que añadir tropecientos plugins más vulnerables, pero eso lo iré haciendo poco a poco) de joomlaexploit.com. La idea es ir actualizando la base de datos cada dos semanas o mensualmente. 



Kum0nga => https://github.com/0verl0ad/kum0nga



 Espero que os sea de utilidad

Byt3z!

 

 
5 0verl0ad Labs: Fingerprinting en Joomla ¡Saludos! <TL;DR;> He hecho un script para sacar la versión de los Joomla, así como qué plugins con vulnerabilidades conocidas pos...

No hay comentarios:

< >