
CLI-переписывание PoC для Drupalgeddon2 (CVE-2018-7600) — для авторизованного тестирования/обучения
Командная строка для перезаписи доказательства концепции Drupalgeddon2 (CVE-2018-7600), создана в качестве учебного упражнения при прохождении модуля Hack The Box Academy Attacking Common Applications.
[!WARNING] Только для авторизованного тестирования безопасности и обучения. Запуск этого инструмента против систем, которыми вы не владеете или на которые не имеете явного письменного разрешения на тестирование, является незаконным в большинстве юрисдикций. См. Юридическое и ответственное использование.
[!NOTE] Реализация написана с помощью ИИ. См. Примечание об авторстве.
Drupal — одно из «распространённых приложений», рассматриваемых в модуле HTB Academy Attacking Common Applications, и CVE-2018-7600 («Drupalgeddon2») является каноническим примером неаутентифицированного RCE для него. Вместо того чтобы скопировать одноразовый скрипт и двигаться дальше, я хотел реально понять инъекцию Form API, благодаря которой работает эта уязвимость, — поэтому я переписал публичный PoC с нуля в качестве учебного упражнения.
Широко цитируемый оригинал a2u/CVE-2018-7600 от Виталия Рудных отлично подходит для демонстрации уязвимости, но он предполагает редактирование полезной нагрузки на месте при каждом запуске. В лабораторном/CTF-рабочем процессе — повторные запуски против разных целей, желание получить повторяемый плацдарм — это становится утомительным. Эта версия превращает его в полноценный инструмент CLI:
cmd= за собойОн намеренно ограничен известной, давно исправленной уязвимостью (обнародована в 2018 году). Целью было понять технику и создать чистую, документированную эталонную реализацию, а не новые наступательные возможности.
Код в этом репозитории был написан с помощью ИИ (Anthropic's Claude), пока я проходил модуль HTB. Я установил цели дизайна и требования — эргономичность CLI, автоматическое развёртывание веб-оболочки, интерактивный режим, рандомизированные имя оболочки и параметр, — а затем я проверил и протестировал результат. Я раскрываю это, потому что это честно, и потому что ценность здесь заключается в понимании и инженерных решениях, а не в авторстве каждой строки.
--cmd или войти в интерактивную псевдооболочку с помощью --shell.CVE-2018-7600 затрагивает:
Данная реализация нацелена на вектор Drupal 8 Form API (AJAX-конечная точка user/register). Drupal 7 эксплуатируется через другую конечную точку/полезную нагрузку и не рассматривается здесь.
Исправленные версии (7.58 / 8.5.1 и новее) не подвержены уязвимости.
requestspip install requests
# однократная команда
python3 drupalgeddon2.py -u http://target/ -c id
# интерактивная псевдооболочка
python3 drupalgeddon2.py -u http://target/ --shell
# просто разместить оболочку, ничего не выполнять
python3 drupalgeddon2.py -u http://target/ --deploy-only
# маршрутизация через Burp, игнорировать самоподписанный сертификат прокси
python3 drupalgeddon2.py -u http://target/ -c id --proxy http://127.0.0.1:8080 -k
CVE-2018-7600 — это ошибка санитизации ввода в Form API Drupal. Drupal представляет формы как вложенные рендерные массивы, и ключи массива, начинающиеся с #, трактуются как специальные свойства рендеринга, а не пользовательские данные. Исправление (SA-CORE-2018-002) добавило санитизацию для удаления этих ключей с префиксом # из пользовательского ввода.
До исправления неаутентифицированный злоумышленник мог внедрить свойства рендеринга в элемент формы, обрабатываемый AJAX-обработчиком Drupal. Отправка свойств, таких как:
#post_render — список вызываемых функций, которые Drupal вызывает после рендеринга, и#markup — аргумент, передаваемый этим функциямв элемент mail формы регистрации пользователя заставляет Drupal вызывать произвольную PHP-функцию (здесь exec) с контролируемым злоумышленником вводом на этапе рендеринга — т.е. удалённое выполнение кода без аутентификации.
Этот PoC использует этот примитив для base64-кодирования однострочной PHP-оболочки локально, заставляет сервер декодировать её в файл в корне веб-сервера, а затем взаимодействует с этим файлом через обычные GET-запросы.
Если вы на стороне защиты:
Устранение
Идеи для обнаружения
#post_render, #markup, #type, #lazy_builder и т.д. Легитимные отправки форм не содержат этих ключей.…/user/register?element_parents=…&_wrapper_format=drupal_ajax с подозрительными параметрами..php-файлу в корне веб-сервера.system($_GET[...]) оболочки).Этот инструмент опубликован для образования и авторизованного тестирования безопасности — ваших собственных лабораторных сред, целей HTB/CTF или систем, на которые у вас есть явное письменное разрешение на оценку. Несанкционированный доступ к компьютерным системам является преступлением по таким законам, как Закон о неправомерном использовании компьютеров Великобритании 1990 года, Закон о компьютерном мошенничестве и злоупотреблениях США и их эквиваленты в других странах. Вы несёте полную ответственность за то, как вы его используете. Автор не несёт ответственности за неправомерное использование или любой причинённый ущерб.
MIT
| Флаг | Описание |
|---|
-u, --url | (обязательно) Базовый URL цели, например, http://target/ |
-c, --cmd | Однократная команда для выполнения на цели |
--shell | Войти в интерактивную псевдооболочку |
--deploy-only | Только разместить веб-оболочку, ничего не выполнять |
--shell-name | Имя файла размещаемой оболочки (по умолчанию случайное .php) |
--param | Имя GET-параметра для оболочки (по умолчанию случайный md5) |
--proxy | URL прокси, например, http://127.0.0.1:8080 |
-k, --insecure | Отключить проверку TLS (для самоподписанных сертификатов прокси) |
--timeout | Таймаут на запрос в секундах (по умолчанию 15) |