Drupal RCE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
У старіших версіях 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
Щоб активувати це, просто отримайте доступ до новоствореного вузла:
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
З версії 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
.
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
Було можливим завантажити модуль, додати до нього бекдор і встановити його. Наприклад, завантажуючи модуль Trurnstile у стиснутому форматі, створюючи новий файл PHP бекдору всередині нього, що дозволяє доступ до PHP файлу з файлом .htaccess
:
І потім перейти до http://drupal.local/admin/modules/install
, щоб встановити модуль з бекдором і отримати доступ до /modules/turnstile/back.php
, щоб виконати його.
Пост поділився Coiffeur0x90
У меню Extend (/admin/modules) ви можете активувати те, що, здається, є плагінами, вже встановленими. За замовчуванням плагіни Media та Media Library не активовані, тож давайте їх активуємо.
Перед активацією:
Після активації:
Ми скористаємося функцією Configuration synchronization, щоб вивантажити (експортувати) та завантажити (імпортувати) записи конфігурації Drupal:
/admin/config/development/configuration/single/export
/admin/config/development/configuration/single/import
Патч system.file.yml
Почнемо з патчування першого запису allow_insecure_uploads
з:
Файл: system.file.yml
До:
Файл: system.file.yml
Патч field.field.media.document.field_media_document.yml
Тоді, патч другий запис file_extensions
з:
Файл: field.field.media.document.field_media_document.yml
До:
Файл: field.field.media.document.field_media_document.yml
Я не використовую це в цьому блозі, але зазначено, що можливо визначити вхід
file_directory
довільним чином і що він вразливий до атаки обходу шляху (тому ми можемо піднятися назад у дереві файлової системи Drupal).
Останній крок є найпростішим і поділений на два підкроки. Перший - завантажити файл у форматі .htaccess, щоб використати директиви Apache і дозволити файлам .txt інтерпретуватися PHP-движком. Другий - завантажити файл .txt, що містить наш payload.
Файл: .htaccess
Чому цей трюк класний?
Тому що, як тільки Webshell (який ми назвемо LICENSE.txt) буде завантажено на веб-сервер, ми можемо передавати наші команди через $_COOKIE
, і в журналах веб-сервера це з'явиться як легітимний GET запит до текстового файлу.
Чому ми називаємо наш Webshell LICENSE.txt?
Просто тому, що якщо ми візьмемо наступний файл, наприклад core/LICENSE.txt (який вже присутній у ядрі Drupal), ми маємо файл з 339 рядками та 17.6 КБ розміру, що ідеально підходить для додавання невеликого фрагмента PHP коду посередині (оскільки файл достатньо великий).
Файл: Виправлений LICENSE.txt
Спочатку ми використовуємо функцію Add Document (/media/add/document) для завантаження нашого файлу, що містить директиви Apache (.htaccess).
Частина 3.2 (завантажити файл LICENSE.txt)
Потім ми знову використовуємо функцію Add Document (/media/add/document) для завантаження Webshell, прихованого в ліцензійному файлі.
Остання частина полягає у взаємодії з Webshell.
Як показано на наступному скріншоті, якщо cookie, очікуваний нашим Webshell, не визначено, ми отримуємо наступний результат при зверненні до файлу через веб-браузер.
Коли атакуючий встановлює cookie, він може взаємодіяти з Webshell і виконувати будь-які команди, які хоче.
І, як ви можете бачити в журналах, здається, що запитувався лише txt файл.
Дякуємо, що знайшли час прочитати цю статтю, сподіваюся, вона допоможе вам отримати кілька оболонок.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)