# Drupal RCE {{#include ../../../banners/hacktricks-training.md}} ## Met PHP Filter Module > [!WARNING] > In ouer weergawes van Drupal **(voor weergawe 8)**, was dit moontlik om as 'n admin aan te meld en **die `PHP filter` module te aktiveer**, wat "Ingebedde PHP-kode/snippets toelaat om geëvalueer te word." Maar vanaf weergawe 8 is hierdie module nie standaard geïnstalleer nie. 1. Gaan na **/modules/php** en as 'n 403-fout teruggestuur word, dan is die **PHP filter plugin geïnstalleer en kan jy voortgaan** 1. As nie, gaan na `Modules` en merk die boks van `PHP Filter` en klik dan op `Stoor konfigurasie` 2. Klik dan, om dit te benut, op `Voeg inhoud by`, kies `Basiese Bladsy` of `Artikel` en skryf die **PHP backdoor**, kies dan `PHP` kode in Teksvormaat en kies uiteindelik `Voorskou` 3. Om dit te aktiveer, toegang eenvoudig die nuut geskepte node: ```bash curl http://drupal.local/node/3 ``` ## Installeer PHP Filter Module > [!WARNING] > In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaardinstallasie nie. Vanaf weergawe **8 en verder, is die** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **module nie standaard geïnstalleer nie**. Om hierdie funksionaliteit te benut, sal ons die **module self moet installeer**. 1. Laai die mees onlangse weergawe van die module van die Drupal-webwerf af. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. Sodra dit afgelaai is, gaan na **`Administrasie`** > **`Verslae`** > **`Beskikbare opdaterings`**. 3. Klik op **`Blader`**, kies die lêer uit die gids waarheen ons dit afgelaai het, en klik dan op **`Installeer`**. 4. Sodra die module geïnstalleer is, kan ons op **`Inhoud`** klik en **'n nuwe basiese bladsy skep**, soortgelyk aan hoe ons dit in die Drupal 7 voorbeeld gedoen het. Weereens, maak seker om **`PHP kode` uit die `Teksvormaat` keuselys te kies**. ## Backdoored Module > [!WARNING] > In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaardinstallasie nie. Dit was moontlik om 'n **module** te **aflaai**, 'n **backdoor** daaraan toe te voeg en dit te **installeer**. Byvoorbeeld, om die [**Trurnstile**](https://www.drupal.org/project/turnstile) module in gecomprimeerde formaat af te laai, 'n nuwe PHP backdoor-lêer binne-in dit te skep, wat die toegang tot die PHP-lêer met 'n `.htaccess`-lêer moontlik maak: ```html RewriteEngine On RewriteBase / ``` En dan gaan na **`http://drupal.local/admin/modules/install`** om die backdoored module te installeer en toegang te verkry tot **`/modules/turnstile/back.php`** om dit uit te voer. ## Backdooring Drupal met Konfigurasiesinchronisasie **Pos gedeel deur** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90) ### Deel 1 (aktivering van _Media_ en _Media Biblioteek_) In die _Verleng_ menu (/admin/modules), kan jy aktiveer wat blyk reeds geïnstalleerde plugins te wees. Standaard, plugins _Media_ en _Media Biblioteek_ blyk nie geaktiveer te wees nie, so kom ons aktiveer hulle. Voor aktivering:
Na aktivering:
### Deel 2 (benutting van funksie _Konfigurasiesinchronisasie_) Ons gaan die _Konfigurasiesinchronisasie_ funksie benut om Drupal konfigurasie-invoere te dump (uitvoer) en op te laai (invoer): - /admin/config/development/configuration/single/export - /admin/config/development/configuration/single/import **Patch system.file.yml** Kom ons begin deur die eerste invoer `allow_insecure_uploads` te patch vanaf: Lêer: system.file.yml ``` ... allow_insecure_uploads: false ... ```
Na: Lêer: system.file.yml ``` ... allow_insecure_uploads: true ... ```
**Patches veld.field.media.document.field_media_document.yml** Dan, patch die tweede inskrywing `file_extensions` van: Lêer: 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' ... ```
Na: Lêer: 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' ... ``` > Ek gebruik dit nie in hierdie blogpos nie, maar dit word opgemerk dat dit moontlik is om die invoer `file_directory` op 'n arbitrêre manier te definieer en dat dit kwesbaar is vir 'n pad traversie-aanval (so ons kan teruggaan binne die Drupal lêerstelselboom).
### Deel 3 (benutting van kenmerk _Voeg Dokument by_) Die laaste stap is die eenvoudigste, en is opgebroke in twee sub-stappe. Die eerste is om 'n lêer in .htaccess-formaat op te laai om die Apache-riglyne te benut en .txt-lêers toe te laat om deur die PHP-enjin geïnterpreteer te word. Die tweede is om 'n .txt-lêer op te laai wat ons payload bevat. Lêer: .htaccess ``` SetHandler application/x-httpd-php # Vroum! Vroum! # We reactivate PHP engines for all versions in order to be targetless. php_flag engine on php_flag engine on php_flag engine on ``` Waarom is hierdie truuk cool? Omdat wanneer die Webshell (wat ons LICENSE.txt sal noem) op die Webbediener gelaai word, ons ons opdragte via `$_COOKIE` kan oordra en in die Webbediener logs sal dit as 'n wettige GET-versoek na 'n tekslêer verskyn. Waarom noem ons ons Webshell LICENSE.txt? Eenvoudig omdat as ons die volgende lêer neem, byvoorbeeld [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (wat reeds in die Drupal-kern teenwoordig is), ons 'n lêer van 339 lyne en 17.6 KB in grootte het, wat perfek is om 'n klein snit van PHP-kode in die middel by te voeg (aangesien die lêer groot genoeg is).
Lêer: Gepatchte LICENSE.txt ```txt ... this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author ... ``` #### **Deel 3.1 (laai lêer .htaccess op)** Eerstens, benut ons die _Voeg Dokument_ (/media/add/document) funksie om ons lêer wat die Apache riglyne bevat (.htaccess) op te laai.
**Deel 3.2 (laai lêer LICENSE.txt op)** Dan, benut ons weer die _Voeg Dokument_ (/media/add/document) funksie om 'n Webshell wat in 'n lisensie-lêer versteek is, op te laai.
### Deel 4 (interaksie met die Webshell) Die laaste deel bestaan uit interaksie met die Webshell. Soos in die volgende skermskoot getoon, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lêer via 'n Webblaaier raadpleeg.
Wanneer die aanvaller die koekie stel, kan hy met die Webshell interaksie hê en enige opdragte uitvoer wat hy wil.
En soos jy in die logs kan sien, lyk dit of slegs 'n txt-lêer aangevra is.
Dankie dat jy die tyd geneem het om hierdie artikel te lees, ek hoop dit sal jou help om 'n paar shells te kry. {{#include ../../../banners/hacktricks-training.md}}