
Пентест TeamCity с использованием Metasploit
TL;DR: Получение паролей из JetBrains IDE (например, IntelliJ или PyCharm) и использование этих учётных данных на TeamCity Continuous Integration Server для получения сессии meterpreter на сервере и агентах сборки с помощью metasploit от Kacper Szurek.




Это комментарий от вендора (команда JetBrains TeamCity) от Yegor Yarko:
Большая часть содержания статьи описывает, как злоумышленники могут злоупотребить TeamCity, если им обоснованно предоставлены соответствующие разрешения. Например, пользователь с ролью System Administrator (даёт полный контроль над сервером) может установить вредоносный плагин TeamCity или получить токен для доступа "суперпользователя" к серверу. Также пользователь с ролью Project Administrator может выполнить произвольный код на агенте или извлечь сохранённые пароли доступа к репозиториям. Такое поведение является частью функциональности, предоставляемой TeamCity как продуктом. Эти соображения описаны в соответствующем разделе документации TeamCity.
Описанные проблемы указывают на то, насколько опасным может быть предоставление высоких привилегий злоумышленнику. Администраторам сервера TeamCity следует регулярно проверять разрешения пользователей, чтобы не предоставлять потенциально вредоносным пользователям никаких разрешений, которые они могут использовать во зло; также проверять разрешения гостевого пользователя, если он включён. Другой момент — не оставлять свои терминалы без присмотра, будучи авторизованными с нетривиальными разрешениями.
Однако в статье отмечены две реальные проблемы безопасности: одна связана с публикацией вредоносного артефакта сборки и просмотром его в браузере администратором, а другая — с повышением разрешения на запуск пользовательской сборки до выполнения произвольного кода на агенте TeamCity. Вторая проблема имеет лишь незначительное влияние на большинство установок TeamCity, поскольку те, у кого есть такое разрешение, обычно уже имеют возможность выполнять любой код на агенте.
Тем не менее, мы собираемся решить указанные проблемы в одном из ближайших релизов TeamCity и благодарим вас за то, что обратили на них наше внимание.
Предположим, вы проводите тестирование на проникновение внутри компании, использующей стек JetBrains. Вы используете metasploit и получаете сессию meterpreter на компьютере разработчика.
Что делать дальше? Есть статья о пентесте TeamCity от Nikhil SamratAshok Mittal за 2015 год.
В этом посте я объединяю несколько методов из Security Notes и BugTrack и реализую их в модуле Metasploit.
Примечание: Я не использую здесь никаких 0-day. Для каждого действия необходимы действительные учётные данные TeamCity. См. Комментарий JetBrains.
Я не несу ответственности за любой ущерб, причинённый этим скриптом. Для безопасности данных используйте set CLEANUP false.
Протестировано на TeamCity 2017.2.1 (build 50732).
Для декодирования базы данных KeePass нам потребуется библиотека Ruby kdbx.
find / -name "metasploit-framework.gemspec"vim /usr/share/metasploit-framework/metasploit-framework.gemspecspec.add_runtime_dependency 'kdbx', '0.2.0'cd /usr/share/metasploit-framework/ && bundle installТеперь вы можете:
mkdir ~/.msf4/modules/exploits && mkdir ~/.msf4/modules/postteamcity.rb и serverplugin.zip в ~/.msf4/modules/exploitsjetbrains.rb в ~/.msf4/modules/postmsfconsolereload_allTeamCity легко интегрируется со всеми IDE JetBrains с помощью плагина.

Если используется опция Remember me, пароли сохраняются через IntelliJ Platform Credentials Store API. Исходный код можно найти здесь.
Процедура дешифрования в Windows выглядит так:

pdb.pw расшифровывается с помощью Windows CryptUnprotectData. Это означает, что только пользователь, зашифровавший данные, может их декодировать.c.kdbx теперь можно расшифровать с помощью Master Password из пункта 2.0xDFAAПо умолчанию Master Password является случайным. Его можно изменить в настройках:

Но это ничего не меняет.
Это означает лишь, что база данных KeePass c.kdbx будет зашифрована другим паролем. Локальный пользователь всё равно может легко получить этот пароль из файла pdb.pw.