Definición de gestor de contenido (CMS)
Un gestor de contenido, también conocido como CMS es una aplicación o software que facilita la creación, administración y publicación de contenido en línea. Está diseñado para permitir a los usuarios, incluso aquellos sin conocimientos avanzados de programación, crear y gestionar contenido de manera eficiente. Dentro de los gestores de contenidos mas comunes se pueden nombrar a Wordpress, Drupal, Joomla, Magento. Estos gestores corren a través de servidores web como Apache, Nginx, etc, de los cuales podemos hallar al realizar una Enumeración de Servicios.
WordPress
Definición
WordPress se destaca por su facilidad de uso y flexibilidad. Con WordPress, los usuarios pueden crear y personalizar sitios web sin necesidad de conocimientos de programación avanzados. Además, cuenta con una amplia variedad de plantillas y plugins que permiten añadir funcionalidades adicionales al sitio.
Despliegue con Docker-Compose
Utilizaremos un contenedor con Docker-Compose para poder montar un servidor con Wordpress a modo de ejemplo para su enumeración. https://github.com/vavkamil/dvwp
Cuando ejecutemos el segundo de los comandos dado docker-compose up -d --build
veremos que nos aparecerá al principio Creating volume
, esto significa que se está creando una especie de BackUP del contenedor, y que por mas que borremos el contenedor y la imagen, esto seguirá guardado. Para ver los volúmenes debemos escribir docker volume ls
y para borrarlos docker volume rm
.
Podremos ver que se nos crearan varios contenedores, específicamente en el puerto 31337 tendremos el Servidor de Wordpress.
Ingresaremos por la web localhost:31337
y nos registraremos.
A continuación vamos a deslogearnos para luego ejecutar el ultimo comando de GITHUB docker-compose run --rm wp-cli install-wp
para instalar los plugins necesarios.
En el siguiente apartado observaremos algunos de los diferentes métodos de enumeración existentes para Wordpress
Métodos de enumeración en Wordpress
Enumeración de usuarios
Podemos intentar enumerar usuarios dentro de la web, buscando algún perfil y prestando atención si en el directorio a un lado del dominio aparece lo siguiente http://localhost:31337/?author=1
, de esta manera podríamos comenzar a cambiar el valor de =1
para ver si existen otros usuarios dentro de la web.
Enumeración de usuarios /wp-admin
Podemos ver si está activo el panel de administrador colocando http://localhost:31337/wp-admin
y de ser así podríamos intentar ingresar con el usuario admin
y la clave admin
para prestar atención al mensaje de “Error
”, ya que Wordpress te indica si el usuario no existe, o si solo te equivocaste en la contraseña. De esta forma también podríamos aplicar fuerza bruta al usuario para identificar si existe o no, ayudándonos de la respuesta que Wordpress nos da.
De esta manera, ya sabiendo que el usuario “C4sp
” es válido, nuestro objetivo como atacante sería hackear el servidor para ganar acceso a la maquina que aloja y hostea todo el servicio web o ganar acceso a la interfaz administrativa en el panel de autenticación (Fuerza bruta).
Enumeración de usuarios con Herramientas
Hay formas potenciales de enumerar usuarios con herramientas, como por ejemplo con searchsploit
Primero la instalaremos con apt install exploitdb
que está sincronizada con la web https://exploit-db.com
Podemos usar lo siguiente.
searchsploit wordpress user enumeration
Para buscar desde consola como si estuviésemos en la webwordpress user enumeration
y si encontramos alguno que nos sirva lo podemos usar, también tenemos que tener en cuenta que no siempre vamos a saber que versión de Wordpress posee el servidor, por ende en esos casos no nos cuesta nada probar el exploit igual.
Con el parámetro -x identificador-exploit
podemos examinar el código del exploit que nos interese.
Otra herramienta es wpscan
que emplea varias técnicas para recolectar información, plugins vulnerables, usuarios, etc.
Un ejemplo sería wpscan --url http://127.0.0.1:31337
para ver toda la información de la web que montamos con Docker-Compose
.
Si deseamos ver toda la información completa con vulnerabilidades incluidas, tenemos que otorgar un API TOKEN
, que se consigue en wpscan.com
una vez que nos registremos en nuestro perfil, y se puede usar agregando el parámetro --api-token "token-entre-comillas"
-e
Con este parámetro podemos enumerar diferentes cosas, entre ellas vp
Vulnerable plugins, ap
All plugins, p
Popular plugins, -u
User
Un ejemplo sería
wpscan --url http://127.0.0.1:31337 -e vp,u
Acá enumeramos Vulnerable plugins, y usuarios.
Le agregamos el API TOKEN
wpscan --url http://127.0.0.1:31337 -e vp,u --api-token "aU2ks4DP6wR5XLG1O6LMr8rGHtna5NG79WDrjxHKRo4"
Siempre tenemos que tener en cuenta que a veces puede ser que el Wordpress este actualizado, pero que algún plugin no lo esté, por ende podemos atacar los plugins vulnerables.
Enumeración de plugins /wp-content/plugins
y Directory Listing
Podemos hacer lo siguiente con procedimiento manual para poder encontrar plugins, ya que hay ocasiones que hay una ruta donde se almacenan los plugins, la cual es wp-content/plugins
esto lo podemos colocar en la web, en esta caso la nuestra montada http://127.0.0.1:31337/wp-content/plugins si se queda en negro o sale un “Forbidden
” es que no tenemos capacidad de Directory Listing que significa que no nos podamos meter y listar los directorios y recursos existentes en una ruta especifica.
Enumeración de directorios/plugins con curl
Podemos hacer uso de curl -s -X GET http://127.0.0.1:31337/
para ver si podemos listar algún directorio, y como en este caso podemos, filtramos con GREP
con la palabra plugins para poder enumerarlos,
en este caso utilizamos expresiones regulares a si que vamos a mostrar como las uso pero nos conviene investigar para poder saber mas del tema, de esta forma pude llegar a obtener el nombre de los plugins instalados en el servidor.
curl -s -X GET "http://127.0.0.1:31337/" | grep -oP "plugins/\K[^/]+" | sort -u
De esta manera obtendremos los nombres de los plugins instalados, por ende podríamos buscar información acerca de estos para poder buscar posibles vulnerabilidades con la herramienta anterior vista searchsploit
Validación del archivo xmlrpc.php
Este archivo es una característica de WordPress que permite la comunicación entre el sitio web y aplicaciones externas utilizando el protocolo XML-RPC.
El archivo xmlrpc.php
es utilizado por muchos plugins y aplicaciones móviles de WordPress para interactuar con el sitio web y realizar diversas tareas, como publicar contenido, actualizar el sitio y obtener información.
Este archivo también puede ser abusado para aplicar fuerza bruta y descubrir credenciales válidas de los usuarios del sitio. Esto se debe a que xmlrpc.php
permite a los atacantes realizar un número ilimitado de solicitudes de inicio de sesión sin ser bloqueados, lo que hace que la ejecución de un ataque de fuerza bruta sea relativamente sencilla.
Podemos chequear si el xmlrpc.php
está expuesto, http://127.0.0.1:31337/xmlrpc.php, si esto es así hay una forma de enumerar credenciales validas, primero tenemos que ver que tipo de petición acepta, en este caso es de tipo POST
Ahora podemos hacer lo mismo pero con el uso de la consola tramitándolo nuevamente con un POST
curl -s -X POST "http://127.0.0.1:31337/xmlrpc.php"
Ahora lo que debemos hacer es buscar información en google de tipo “**Abusing XML-RPC.PHP Wordpress**
”
https://nitesculucian.github.io/2019/07/01/exploiting-the-xmlrpc-php-on-all-wordpress-versions/
Ahora como dice en la pagina, debemos averiguar cuales son los métodos disponibles tramitándole una petición por POST donde le envíes una estructura de archivo XML, queremos listar los métodos porque hay muchos que podemos utilizar para variedad de cosas, en este caso queremos ver si existe uno que nos va a permitir enumerar credenciales validas llamado “wp.getUsersBlogs
”
Primero crearemos un archivo “.xml
”, en este caso “file.xml
” y le meteremos el código brindado por la pagina anterior para realizar la petición por POST
. Ahora lo que haremos será intentar tramitarlo por POST
con el siguiente comando
- **
curl -s -X POST "http://127.0.0.1:31337/xmlrpc.php -d@file.xml
El parámetro -d@
lo usamos para indicar cual es el archivo con el que queremos realizar la petición.
En este caso el comando anterior nos brindó todos los métodos, ahora lo que debemos hacer será buscar el que nos interesa a nosotros wp.getUsersBlogs
, en este caso existe. Gracias a esto nos permite elaborar una estructura de ataque de fuerza bruta para enumerar credenciales validas (En la WEB está el código).
Reemplazamos los datos, en este caso colocamos el usuario existente que descubrimos con el escáner anterior, y una contraseña cualquiera para ver que nos reporta al enviar la petición nuevamente por POST
.
Si colocáramos la correcta (spider) sería lo siguiente
De esta manera ya nos estaría listando información… que este usuario es ADMIN
, el BLOG ID
, el BLOG NAME
, etc. Ahora para poder ver todo mas lindo podemos usar
curl -s -X POST "http://127.0.0.1:31337/xmlrpc.php" -d@file.xml | cat -l xml
Con toda la información recolectada podemos crear un script en BASH que se encargue de realizar FUERZA BRUTA para en el campo “password
” recorrer un diccionario (rockyou.txt
) y de esta manera hallar la contraseña correcta a modo de ejemplo.
Drupal
Definición
Drupal es un CMS (Gestor de contenido) que ofrece un alto grado de personalización y escalabilidad, lo que lo convierte en una opción popular para sitios web complejos y grandes. Drupal se utiliza en una amplia gama de sitios web, desde blogs personales hasta sitios web gubernamentales y empresariales.
Despliegue con Docker-Compose
En este caso desplegaremos el siguiente contenedor para dar ejemplos de enumeración https://github.com/vulhub/vulhub/tree/master/drupal/CVE-2018-7600
Métodos de enumeración en Drupal
Droopscan
es una herramienta de escaneo de seguridad especializada en la identificación de versiones de Drupal y sus módulos, y en la detección de vulnerabilidades conocidas en ellos. La herramienta realiza un escaneo exhaustivo del sitio web para encontrar versiones de Drupal instaladas, módulos activos y vulnerabilidades conocidas. Para poder instalar esta herramienta seguimos las instrucciones dadas por el GITHUB de SamJoan https://github.com/SamJoan/droopescan
Podemos utilizar esta herramienta con el siguiente comando
droopescan scan drupal -u http://127.0.0.1:8080/
Donde scan
indica que queremos realizar un escaneo, drupal
especifica que estamos realizando un escaneo de Drupal y -url https://example.com
indica la URL del sitio web que se va a escanear.
Joomla
Definición
Joomla es un CMS (Gestor de contenido) que se utiliza para crear sitios web y aplicaciones en línea, este es muy popular debido a su facilidad de uso y flexibilidad, lo que lo hace una opción popular para sitios web empresariales, gubernamentales y de organizaciones sin fines de lucro.
Despliegue con Docker-Compose
En este caso desplegaremos el siguiente contenedor para dar ejemplos de enumeración https://github.com/vulhub/vulhub/tree/master/joomla/CVE-2015-8562
Métodos de enumeración en Joomla
Joomscan
utiliza una variedad de técnicas de enumeración para identificar información sobre el sitio web de Joomla, como la versión de Joomla utilizada, los plugins y módulos instalados y los usuarios registrados en el sitio. También utiliza una base de datos de vulnerabilidades conocidas para buscar posibles vulnerabilidades en la instalación de Joomla. Para instalar esta herramienta debemos hacerlo mediante Perl
, con las siguientes instrucciones dadas por GITHUB. https://github.com/OWASP/joomscan
Para su ejecución utilizamos perl joomscan -u http://127.0.0.1:8080
Algo interesante de esta herramienta es que te genera un reporte con toda la información obtenida dentro del directorio reports
, este reporte está hecho en formato de archivo “.txt
” y también con una interfaz “.html
” que se puede acceder mediante la apertura de un servidor momentáneo con “python3 -m http.server 80
” (El puerto 80 o cualquier otro). Luego ingresamos a el servidor por el navegador y observamos los resultados brindados por el escáner.
Hay que saber que esta herramienta puede dar falsos positivos o falsos negativos, así que siempre es importante reforzar la enumeración de vulnerabilidades con otras herramientas para ser mas eficaz.
Magento
Definición
Magento es un CMS (Gestor de contenido), es una plataforma de comercio electrónico de código abierto, que se utiliza para construir tiendas en línea de alta calidad y escalables. Es una de las plataformas más populares para el comercio electrónico y es utilizado por grandes marcas como Nike, Coca-Cola y Ford.
Despliegue con Docker-Compose
En este caso desplegaremos el siguiente contenedor para dar ejemplos de enumeración https://github.com/vulhub/vulhub/tree/master/magento/2.2-sqli
Métodos de enumeración en Magento
Magescan
es una herramienta que puede detectar vulnerabilidades comunes en Magento, incluyendo problemas con permisos de archivos, errores de configuración y vulnerabilidades conocidas en extensiones populares de Magento. Para poder instalar esta herramienta seguimos las instrucciones dadas por el GITHUB https://github.com/steverobbins/magescan
Esta herramienta se puede ejecutar mediante php
con el siguiente comando php magescan.phar
==(Dentro del directorio /opt
)==
Con el comando php magescan.php scan:all http://127.0,0.1:8080
podemos escanear todo el contenido de la web indicada.
Una de las técnicas que explotaremos sobre este gestor de contenidos es la famosa SQL Injection. Esta vulnerabilidad se produce cuando los datos de entrada no son debidamente validados y se pueden insertar comandos SQL maliciosos en la consulta a la base de datos.
Un ataque de inyección SQL exitoso puede permitir al atacante obtener información confidencial, como credenciales de usuario o datos de pago, o incluso ejecutar comandos en la base de datos del sitio web.
En el caso del Magento que estaremos desplegando, explotaremos una inyección SQL con el objetivo de obtener una cookie de sesión, la cual podremos posteriormente utilizar para llevar a cabo un ataque de “Cookie Hijacking“. Este tipo de ataque nos permitirá como atacantes asumir la identidad del usuario legítimo y acceder a las funciones del usuario, que en este caso será administrador.