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 цей модуль не встановлюється за замовчуванням.
Вам потрібно, щоб плагін php був встановлений (перевірте, зайшовши в /modules/php, і якщо він повертає 403, тоді існує, якщо не знайдено, тоді плагін php не встановлений)
Перейдіть до Modules -> (Перевірте) PHP Filter -> Зберегти конфігурацію
Потім натисніть на Додати контент -> Виберіть Основна сторінка або Стаття -> Напишіть php shellcode в тілі -> Виберіть PHP код у Форматі тексту -> Виберіть Попередній перегляд
Нарешті, просто зайдіть на новостворений вузол:
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
З версії 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
.
У поточних версіях більше неможливо встановлювати плагіни, маючи доступ лише до вебу після стандартної установки.
Модуль з бекдором можна створити, додавши оболонку до існуючого модуля. Модулі можна знайти на веб-сайті drupal.org. Давайте виберемо модуль, наприклад, CAPTCHA. Прокрутіть вниз і скопіюйте посилання на tar.gz архів.
Завантажте архів і розпакуйте його вміст.
Створіть PHP web shell з вмістом:
Далі нам потрібно створити файл .htaccess
, щоб отримати доступ до папки. Це необхідно, оскільки Drupal забороняє прямий доступ до папки /modules
.
Конфігурація вище застосовуватиме правила для папки /, коли ми запитуємо файл у /modules. Скопіюйте обидва ці файли до папки captcha та створіть архів.
Припустимо, що у нас є адміністративний доступ до веб-сайту, натисніть на Manage
і потім Extend
у бічному меню. Далі натисніть на кнопку + Install new module
, і ми перейдемо на сторінку установки, наприклад, http://drupal-site.local/admin/modules/install
. Перейдіть до архіву з бекдором Captcha і натисніть Install
.
Після успішної установки перейдіть до /modules/captcha/shell.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 core), ми маємо файл з 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)