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

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

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

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

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

Категории

Все категории
Loading categories
droidground — Гибкая площадка для Android CTF-задач. | Kitploit
Инструменты/GitHubGitHub/secforce/droidground
Безопасность AndroidДинамический анализ (песочница)ЭксплуатацияПентестинг мобильных приложенийCTFТестирование на ПроникновениеОбучение и ОбразованиеЛаборатории и Практика
GitHubsecforce/droidground

droidground

Гибкая площадка для Android CTF-задач.

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

Популярное

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

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

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

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

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


droidground

DroidGround


Веб-сайт | Демо

В традиционных CTF-задачах часто прячут флаги в файлах на системе, требуя от атакующих использовать уязвимости для их получения. Однако в мире Android такой подход плохо работает. APK-файлы легко скачать и подвергнуть реверсу, поэтому размещение флага на устройстве обычно делает его извлечение тривиальным с помощью статического анализа или трюков с эмулятором. Это серьёзно ограничивает возможность создавать реалистичные задачи, ориентированные на выполнение в рантайме.

DroidGround создан для решения этой проблемы.

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

Важно, что участники могут быть изолированы внутри среды приложения. Модульность инструмента позволяет настроить, может ли пользователь запускать оболочку, читать произвольные файлы или устанавливать дополнительные инструменты. Всё можно настроить так, чтобы единственным способом получить флаг было понимание и эксплуатация самого приложения.

📋 Содержание

  • 🧭 Обзор
  • ✨ Возможности
  • 📸 Скриншоты
  • ⚙️ Конфигурация
  • 🧩 Варианты использования
  • ⚙️ Использование
  • 💡 Советы
  • 🛠 Разработка
  • 🤝 Вклад в проект
  • 📚 Благодарности
  • 🪪 Лицензия

🧭 Обзор

DroidGround позволяет проводить самые разные Android-задачи, которые трудно реализовать в традиционных CTF-окружениях. Например, в задаче на удалённое выполнение кода (RCE) игроки могут получить APK для локального анализа. После обнаружения уязвимости они могут разработать Frida-скрипт и запустить его через DroidGround на реальном целевом устройстве, чтобы извлечь флаг из внутреннего хранилища. Другие типы задач могут включать скрытые активности, пользовательские broadcast-намерения, эксплуатацию сервисов или динамический анализ с использованием предустановленных инструментов.

Благодаря потоковой передаче экрана устройства в реальном времени, тонкой настройке функций, интеграции Frida и настраиваемым скриптам установки и сброса, DroidGround позволяет организаторам CTF создавать безопасные, гибкие и реалистичные Android-задачи, выходящие далеко за рамки обычных возможностей.

✨ Возможности

DroidGround предоставляет богатый набор функций, управляемых сервером.

  • Экран устройства в реальном времени (через scrcpy)
  • Сброс состояния задачи
  • Перезапуск приложения / Запуск активности / Запуск сервиса
  • Отправка broadcast-намерения
  • Выключение / Перезагрузка устройства
  • Загрузка bugreport (bugreportz)
  • Frida-скрипты
    • Запуск из предустановленной библиотеки (jailed-режим)
    • Запуск произвольных скриптов (полный режим)
  • Файловый браузер
  • Доступ к терминалу
  • Управление APK
  • Просмотр logcat
  • Эксплойт-сервер (если включён командный режим)

Почти все функции являются модульными и определяются через переменные окружения, что обеспечивает точный контроль над областью задачи.

📸 Скриншоты

⚙️ Конфигурация

Файл .env.sample в корневом каталоге — хорошая отправная точка. Вот полный список всех поддерживаемых в настоящее время переменных окружения:

Переменная DROIDGROUND_IP_IFACE сначала ищет точное совпадение, а затем переключается на первый интерфейс, который начинается с указанного значения, поскольку Docker позволяет указывать только префикс сетевого интерфейса внутри контейнера.

Использование переменной DROIDGROUND_NUM_TEAMS немного меняет поведение приложения под капотом. Если эта опция задана:

  1. Включается функция эксплойт-сервера, позволяющая каждой команде использовать свой собственный (очень простой) эксплойт-сервер через свой токен команды.
  2. Токен команды будет обязателен для установки и запуска эксплойт-приложений. Каждое установленное приложение будет привязано к команде, и другие команды не смогут его запустить.

Это позволяет использовать один экземпляр DroidGround для нескольких команд в задачах, где флаг можно извлечь через сетевой запрос. Это значительно снижает затраты на развёртывание DroidGround для CTF-соревнований.

Кроме того, если задано значение -1, будет включён так называемый режим Безлимитные команды. В этом режиме на странице Обзор появляется кнопка для генерации нового токена команды. Все переменные DROIDGROUND_TEAM_TOKEN_<N> игнорируются, если этот режим включён.

🧩 Варианты использования

Вот некоторые способы применения DroidGround:

  1. Скрытая активность: найдите и запустите неэкспонированную активность, чтобы увидеть флаг (в приложении игрока находится фиктивный флаг).
  2. RCE: приложение уязвимо к RCE, а флаг хранится на устройстве.
  3. Frida-инструментирование: перегрузите метод и извлеките флаг из приватной памяти с помощью скрипта.

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

В папке examples приведено несколько примеров файлов Docker Compose. В них используются приложения из репозитория примеров DroidGround, который будет постепенно расширяться для демонстрации всех ключевых функций. Они также являются хорошей отправной точкой для понимания того, как настроить собственный CTF.

При загрузке DroidGround выполняет следующие действия:

  1. Настраивает соединение с adb
  2. Запускает setup.sh в папке, указанной в DROIDGROUND_INIT_SCRIPTS_FOLDER, если она присутствует. Этот скрипт можно использовать для установки целевого приложения и выполнения всего остального, что необходимо для инициализации CTF (например, размещения флага в известном месте)
  3. (если Frida включена) Загружает подходящий frida-server на основе установленной версии и архитектуры устройства и запускает его
  4. Запускает целевое приложение (то, которое указано через DROIDGROUND_APP_PACKAGE_NAME). Если приложение не установлено, DroidGround завершит работу.
  5. Настраивает REST API, WebSocket-серверы и потоковую передачу экрана

Вот пример скрипта setup.sh:

root@kitploit:~
#!/usr/bin/env bash

adb shell pm uninstall com.example.app # To do some cleanup
echo "Sleep for 2 seconds before installing app"
sleep 2
echo "Installing app..."
adb install ./flag.apk # The cwd is set to the "init.d" folder, so the apk file can be accessed with the relative path
echo "Install command executed"

Для production-развёртывания (в реальном CTF) вы можете заранее подготовить определённое количество экземпляров DroidGround или позволить пользователям создавать экземпляры (с ограничением или, возможно, привязывая каждую команду/пользователя к конкретному экземпляру). Поэтому мы также добавили простой пример спавнера.

В качестве альтернативы, как упоминалось ранее, вы можете создать задачу, в которой флаг можно извлечь через сетевой запрос, и использовать переменную окружения DROIDGROUND_NUM_TEAMS, чтобы избежать запуска нескольких экземпляров (что может быть дорого). Папка net-multi-step содержит хороший пример того, как проводить такие задачи.

💡 Советы

Вот несколько рекомендаций по настройке вашего Android CTF:

  • Будьте осторожны при включении Frida Full Mode: игрок получит полный контроль над устройством (именно поэтому мы сделали Frida Jail Mode, как подробно описано в Frida Library).
  • Будьте осторожны при включении терминала: игрок получит полный контроль над устройством.
  • Будьте осторожны при включении функции выключения.
  • Если вы планируете сделать флаг напрямую видимым в интерфейсе, возможно, вам стоит найти способ создавать отдельные экземпляры (по одному для каждой команды/игрока)

При тестировании настройки перед запуском в production может быть полезно получить поверхность атаки целевого приложения. Это то, что игроки не должны видеть, потому что обнаружение и анализ поверхности атаки — часть их работы!

Поэтому предоставляется GET-эндпоинт, доступный по адресу /attackSurface, защищённый токеном (который нужно использовать в качестве значения заголовка Authorization), который случайным образом генерируется при загрузке и выводится в журналы (то есть доступен только системным администраторам).

Если вы хотите использовать собственные Frida-скрипты в jailed-режиме, вам нужно всего лишь примонтировать папку с ними в Docker-контейнер:

root@kitploit:~
volumes:
  - <Frida library folder>:/droidground/library

Файл library.json (как в library) требуется, чтобы сообщить приложению список доступных скриптов.

🛠 Разработка

Запустить проект в режиме разработки не должно быть слишком сложно, но перед началом вам понадобятся следующие инструменты:

  • frida (только если вы включаете Frida)
  • node (это Node-приложение, он вам нужен!)
  • adb (мы полагаемся на него для общения с устройством)
  • JDK (нужен для сборки сопутствующего приложения)

После этого вы можете просто выполнить следующее:

root@kitploit:~
git clone https://github.com/SECFORCE/droidground.git
cd droidground

# Install without running scripts
npm install --ignore-scripts
# Rebuild frida to get the bindings
npm rebuild frida
# Build companion app
npm run companion
# Get scrcpy
npm run scrcpy

После этого вам нужно лишь задать переменные env, а затем запустить npm run dev — и всё готово. Приятного режима разработки!

🤝 Вклад в проект

Пулл-реквесты приветствуются! Пожалуйста, сначала откройте issue, чтобы обсудить крупные изменения. Особенно ценятся идеи новых CTF-сценариев или типов задач.

📚 Благодарности

Разработано Angelo Delicato @SECFORCE.

Раздел сервера во многом опирается на выдающуюся работу @yume-chan; вероятно, этого приложения не существовало бы без его замечательного труда.

Сопутствующее приложение во многом основано на aya server, который работает так же, как scrcpy server. Более подробную информацию можно найти в соответствующем README.

🪪 Лицензия

DroidGround распространяется под лицензией GPL-3.0 LICENSE

Скачать инструмент
Скриншот OverviewСкриншот Start Activity
ОбзорЗапуск активности
Скриншот Frida Jailed ModeСкриншот Frida Full Mode
Frida Jailed ModeFrida Full Mode
Скриншот File BrowserСкриншот App Manager
Файловый браузерМенеджер приложений
Скриншот TerminalСкриншот Logs
ТерминалЖурналы
ПеременнаяОписаниеПо умолчанию
DROIDGROUND_BASE_PATHПуть к веб-приложению (полезно для размещения на подпутях)-
DROIDGROUND_APP_PACKAGE_NAMEИмя пакета целевого приложения-
DROIDGROUND_ADB_HOSTADB-хостlocalhost
DROIDGROUND_ADB_PORTADB-порт5037
DROIDGROUND_ADB_SERIALНеобязательный серийный номер ADB-устройства для подключения-
DROIDGROUND_DEVICE_TYPEusb или networkusb
DROIDGROUND_DEVICE_HOSTIP-адрес Android-устройства (adb) (только сетевой режим)-
DROIDGROUND_DEVICE_PORTпорт Android-устройства (adb) (только сетевой режим)-
DROIDGROUND_INIT_SCRIPTS_FOLDERПапка, содержащая setup.sh и reset.sh/init.d
DROIDGROUND_HOSTАдрес привязки0.0.0.0
DROIDGROUND_PORTПорт привязки4242
DROIDGROUND_RESTART_APP_DISABLEDОтключить перезапуск приложенияfalse
DROIDGROUND_APP_MANAGER_DISABLEDОтключить менеджер приложенийfalse
DROIDGROUND_BUG_REPORT_DISABLEDОтключить bugreportfalse
DROIDGROUND_FILE_BROWSER_DISABLEDОтключить файловый браузерfalse
DROIDGROUND_FRIDA_DISABLEDОтключить поддержку Fridafalse
DROIDGROUND_FRIDA_TYPEjail или fulljail
DROIDGROUND_FRIDA_INJECTIONserver или gadgetserver
DROIDGROUND_LOGCAT_DISABLEDОтключить logcatfalse
DROIDGROUND_REBOOT_ENABLEDВключить перезагрузкуfalse
DROIDGROUND_SHUTDOWN_ENABLEDВключить выключениеfalse
DROIDGROUND_START_ACTIVITY_DISABLEDОтключить startActivityfalse
DROIDGROUND_START_RECEIVER_DISABLEDОтключить broadcastfalse
DROIDGROUND_START_SERVICE_DISABLEDОтключить startServicefalse
DROIDGROUND_TERMINAL_DISABLEDОтключить терминалfalse
DROIDGROUND_RESET_DISABLEDОтключить сбросfalse
DROIDGROUND_EXPLOIT_APP_DURATIONВремя (в секундах), в течение которого эксплойт-приложение будет активно10
DROIDGROUND_EXPLOIT_APP_MAX_SIZEМаксимальный размер (в МБ) эксплойт-приложения50
DROIDGROUND_NUM_TEAMSКоличество команд, играющих одновременно-
DROIDGROUND_TEAM_TOKEN_<N>Токен для n-й команды. Автоматически генерируется, если отсутствует-
DROIDGROUND_IP_STATICСтатический IP-адрес для отображения. Имеет приоритет над DROIDGROUND_IP_IFACE-
DROIDGROUND_IP_IFACEСетевой интерфейс для отображаемого IP-адреса-
DROIDGROUND_LOGO_LINKНеобязательно задаёт ссылку при клике на логотип (например, главную страницу вашего CTF)-