# Drupal RCE {{#include ../../../banners/hacktricks-training.md}} ## Sa PHP Filter Modulom > [!WARNING] > U starijim verzijama Drupala **(pre verzije 8)**, bilo je moguće prijaviti se kao administrator i **omogućiti `PHP filter` modul**, koji "Omogućava evaluaciju ugrađenog PHP koda/snippeta." Ali od verzije 8 ovaj modul nije instaliran po defaultu. 1. Idite na **/modules/php** i ako se vrati greška 403, onda je **PHP filter plugin instaliran i možete nastaviti** 1. Ako nije, idite na `Modules` i označite kutiju `PHP Filter`, a zatim kliknite na `Save configuration` 2. Zatim, da biste to iskoristili, kliknite na `Add content`, zatim odaberite `Basic Page` ili `Article` i napišite **PHP backdoor**, zatim odaberite `PHP` kod u Text formatu i konačno odaberite `Preview` 3. Da biste to aktivirali, jednostavno pristupite novonastalom čvoru: ```bash curl http://drupal.local/node/3 ``` ## Instalirajte PHP Filter Modul > [!WARNING] > U trenutnim verzijama više nije moguće instalirati dodatke samo imajući pristup vebu nakon podrazumevane instalacije. Od verzije **8 nadalje,** [**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1) **modul nije instaliran podrazumevano**. Da bismo iskoristili ovu funkcionalnost, morali bismo **sami instalirati modul**. 1. Preuzmite najnoviju verziju modula sa Drupal veb sajta. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. Kada se preuzme, idite na **`Administration`** > **`Reports`** > **`Available updates`**. 3. Kliknite na **`Browse`**, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na **`Install`**. 4. Kada je modul instaliran, možemo kliknuti na **`Content`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP code` iz `Text format` padajuće liste**. ## Modul sa Bekdorom > [!WARNING] > U trenutnim verzijama više nije moguće instalirati dodatke samo imajući pristup vebu nakon podrazumevane instalacije. Bilo je moguće **preuzeti** **modul**, dodati mu **bekdor** i **instalirati** ga. Na primer, preuzimanje [**Trurnstile**](https://www.drupal.org/project/turnstile) modula u komprimovanom formatu, kreiranje novog PHP bekdor fajla unutar njega, omogućavajući pristup PHP fajlu sa **`.htaccess`** fajlom: ```html RewriteEngine On RewriteBase / ``` I zatim idemo na **`http://drupal.local/admin/modules/install`** da instaliramo modul sa backdoor-om i pristupimo **`/modules/turnstile/back.php`** da ga izvršimo. ## Backdooring Drupal sa sinhronizacijom konfiguracije **Post koji je podelio** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90) ### Deo 1 (aktivacija _Media_ i _Media Library_) U meniju _Extend_ (/admin/modules), možete aktivirati ono što se čini kao već instalirani dodaci. Po defaultu, dodaci _Media_ i _Media Library_ se ne čine aktiviranim, pa hajde da ih aktiviramo. Pre aktivacije:
Posle aktivacije:
### Deo 2 (iskorišćavanje funkcije _Configuration synchronization_) Iskoristićemo funkciju _Configuration synchronization_ da dump-ujemo (izvezemo) i upload-ujemo (import-ujemo) Drupal konfiguracione unose: - /admin/config/development/configuration/single/export - /admin/config/development/configuration/single/import **Patch system.file.yml** Hajde da počnemo sa patch-ovanjem prvog unosa `allow_insecure_uploads` iz: File: system.file.yml ``` ... allow_insecure_uploads: false ... ```
Na: Fajl: system.file.yml ``` ... allow_insecure_uploads: true ... ```
**Patch field.field.media.document.field_media_document.yml** Zatim, zakrpite drugi unos `file_extensions` iz: File: 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' ... ```
Da: Fajl: 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' ... ``` > Ne koristim to u ovom blog postu, ali je zabeleženo da je moguće definisati unos `file_directory` na proizvoljan način i da je podložan napadu prečicom (tako da možemo da se vratimo unazad unutar Drupal datotečnog stabla).
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) Poslednji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload. Datoteka: .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 ``` Zašto je ovaj trik cool? Zato što kada se Webshell (koji ćemo nazvati LICENSE.txt) postavi na Web server, možemo prenositi naše komande putem `$_COOKIE` i u logovima Web servera, ovo će se prikazati kao legitimni GET zahtev za tekstualnom datotekom. Zašto nazvati naš Webshell LICENSE.txt? Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog isječka PHP koda u sredinu (pošto je datoteka dovoljno velika).
Datoteka: Patched 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 ... ``` #### **Deo 3.1 (upload fajl .htaccess)** Prvo, koristimo funkciju _Add Document_ (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
**Deo 3.2 (upload fajl LICENSE.txt)** Zatim, ponovo koristimo funkciju _Add Document_ (/media/add/document) da otpremimo Webshell skriven unutar fajla sa licencom.
### Deo 4 (interakcija sa Webshell-om) Poslednji deo se sastoji od interakcije sa Webshell-om. Kao što je prikazano na sledećem snimku ekrana, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat kada konsultujemo fajl putem Web pretraživača.
Kada napadač postavi kolačić, može da interaguje sa Webshell-om i izvrši bilo koje komande koje želi.
I kao što možete videti u logovima, izgleda da je samo txt fajl zatražen.
Hvala što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove. {{#include ../../../banners/hacktricks-training.md}}