Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/secforce/droidground
Seguridad AndroidAnálisis Dinámico (Sandboxing)ExplotaciónPentesting de Apps MóvilesCTFPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubsecforce/droidground

droidground

Un campo de pruebas flexible para retos CTF de Android.

Ver Repositorio
1177hace 15 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Sitio web


droidground

DroidGround


Sitio web | Demo

En los desafíos CTF tradicionales, es común ocultar flags en archivos de un sistema, lo que obliga a los atacantes a explotar vulnerabilidades para recuperarlas. Sin embargo, en el mundo de Android, este enfoque no funciona bien. Los archivos APK son fáciles de descargar y de aplicar ingeniería inversa, por lo que colocar una flag en el dispositivo normalmente hace que sea trivial extraerla mediante análisis estático o trucos de emulador. Esto limita gravemente la capacidad de crear desafíos realistas centrados en el tiempo de ejecución.

DroidGround está diseñado para resolver este problema.

Es una plataforma creada a medida para alojar desafíos de hacking móvil Android en un entorno controlado y realista, donde los atacantes están restringidos lo justo para que tengan que resolver los desafíos de la forma prevista.

Es importante destacar que los participantes pueden estar enjaulados dentro del entorno de la aplicación. La modularidad de la herramienta permite configurar si el usuario puede o no abrir un shell, leer archivos arbitrarios o cargar herramientas externas. Todo puede configurarse de modo que la única forma de recuperar la flag sea comprendiendo y explotando la propia aplicación.

📋 Tabla de contenidos

  • 🧭 Descripción general
  • ✨ Características
  • 📸 Capturas de pantalla
  • ⚙️ Configuración
  • 🧩 Casos de uso
  • ⚙️ Uso
  • 💡 Consejos
  • 🛠 Desarrollo
  • 🤝 Contribuciones
  • 📚 Créditos
  • 🪪 Licencia

🧭 Descripción general

DroidGround permite una gran variedad de desafíos Android que de otro modo serían difíciles de implementar en configuraciones CTF tradicionales. Por ejemplo, en un desafío de ejecución remota de código (RCE), los jugadores pueden recibir un APK para su análisis local. Tras descubrir una vulnerabilidad, pueden desarrollar un script de Frida y ejecutarlo a través de DroidGround en el dispositivo objetivo real para extraer la flag del almacenamiento interno. Otros tipos de desafíos pueden implicar actividades ocultas, intents de broadcast personalizados, explotación de servicios o análisis dinámico mediante herramientas precargadas.

Con transmisión del dispositivo en tiempo real, control granular de las funciones, integración con Frida y scripts de configuración y restablecimiento personalizables, DroidGround permite a los organizadores de CTF crear desafíos Android seguros, flexibles y realistas que van mucho más allá de lo que normalmente es posible.

✨ Características

DroidGround ofrece un amplio conjunto de funciones controladas por el servidor.

  • Pantalla del dispositivo en tiempo real (vía scrcpy)
  • Restablecer el estado del desafío
  • Reiniciar app / Iniciar actividad / Iniciar servicio
  • Enviar intent de broadcast
  • Apagar / Reiniciar el dispositivo
  • Descargar bugreport (bugreportz)
  • Scripting con Frida
    • Ejecutar desde la biblioteca precargada (modo enjaulado)
    • Ejecutar scripts arbitrarios (modo completo)
  • Explorador de archivos
  • Acceso a terminal
  • Gestión de APK
  • Visor de logcat
  • Servidor de exploit (si el modo por equipos está habilitado)

Casi todas las funciones son modulares y se definen mediante variables de entorno, lo que garantiza un control preciso sobre el alcance del desafío.

📸 Capturas de pantalla

⚙️ Configuración

El archivo .env.sample en el directorio raíz es un buen punto de partida. Esta es la lista completa de todas las variables de entorno actualmente soportadas:

DROIDGROUND_IP_IFACE busca primero una coincidencia exacta y, si no la encuentra, utiliza la primera interfaz que comience con el valor proporcionado, ya que Docker solo permite especificar el prefijo de la interfaz de red dentro del contenedor.

El uso de la variable DROIDGROUND_NUM_TEAMS cambia ligeramente el comportamiento interno de la aplicación. Si esta opción está configurada:

  1. La función de servidor de exploit está habilitada, lo que permite a cada equipo usar su propio servidor de exploit (muy simple) mediante su token de equipo.
  2. El token de equipo será requerido para instalar y ejecutar apps de exploit. Cada app instalada estará vinculada a un equipo y los demás equipos no podrán ejecutarla.

Esto permite compartir la misma instancia de DroidGround con varios equipos en desafíos donde la flag se puede exfiltrar mediante una petición de red. Esto reduce masivamente los costes de despliegue de DroidGround en competiciones CTF.

Además, si el valor se establece en -1, se habilitará el llamado modo Unlimited Teams (equipos ilimitados). En este modo, habrá un botón para generar un nuevo token de equipo disponible en la página de Overview. Todas las variables DROIDGROUND_TEAM_TOKEN_<N> se ignoran si este modo está habilitado.

🧩 Casos de uso

Estas son algunas formas en las que se puede usar DroidGround:

  1. Actividad oculta: Encuentra y lanza una actividad no expuesta para ver la flag (la app del jugador contiene una flag ficticia).
  2. RCE: La app es vulnerable a RCE y la flag está almacenada en el dispositivo.
  3. Instrumentación con Frida: Sobrecarga un método y extrae la flag de la memoria privada mediante un script.

⚙️ Uso

Se proporcionan un par de archivos de ejemplo de Docker Compose en la carpeta examples. Utilizan apps del repositorio de muestras de DroidGround, que se irá mejorando progresivamente para mostrar todas las funciones clave. También son un buen punto de partida para entender cómo configurar tu propio CTF.

Al arrancar, DroidGround hace lo siguiente:

  1. Establece la conexión con adb
  2. Ejecuta el script setup.sh de la carpeta especificada por DROIDGROUND_INIT_SCRIPTS_FOLDER si existe. Este script se puede usar para instalar la app objetivo y hacer todo lo demás necesario para inicializar el CTF (p. ej., colocar la flag en una ubicación conocida)
  3. (si Frida está habilitado) Descarga el frida-server correcto según la versión instalada y la arquitectura del dispositivo, y lo inicia
  4. Ejecuta la app objetivo (la especificada mediante DROIDGROUND_APP_PACKAGE_NAME). Si la app no está instalada, DroidGround se cerrará.
  5. Configura las REST APIs, los servidores WebSocket y la transmisión de pantalla

Este es un ejemplo de script 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"

Para un despliegue en producción (en un CTF real), es posible que quieras aprovisionar de antemano un número predefinido de instancias de DroidGround, o permitir que los usuarios creen instancias (con una limitación o quizás asociando cada equipo/usuario con una instancia específica). Por esta razón, también añadimos un ejemplo de spawner sencillo.

Alternativamente, como se mencionó anteriormente, puedes crear un desafío donde la flag se pueda exfiltrar mediante una petición de red y aprovechar la variable de entorno DROIDGROUND_NUM_TEAMS para evitar crear múltiples instancias (lo que podría resultar costoso). La carpeta net-multi-step proporciona un buen ejemplo de cómo plantear este tipo de desafíos.

💡 Consejos

Estas son algunas sugerencias para configurar tu CTF de Android:

  • Ten cuidado al habilitar el Modo Frida Completo: el jugador tendrá control total sobre el dispositivo (por eso creamos el Modo Frida Enjaulado, como se detalla en Frida Library).
  • Ten cuidado al habilitar la Terminal: el jugador tendrá control total sobre el dispositivo.
  • Ten cuidado al habilitar la función de Apagado.
  • Si planeas hacer que la flag sea directamente visible en la interfaz de usuario, quizás quieras encontrar una forma de crear diferentes instancias (una para cada equipo/jugador).

Al probar la configuración antes de pasar a producción, puede ser útil obtener la superficie de ataque de la app objetivo. ¡Esto es algo que los jugadores no deberían ver, porque descubrir y analizar la superficie de ataque es parte de su trabajo!

Por lo tanto, se proporciona un endpoint GET accesible en /attackSurface y protegido con un token (que debe utilizarse como valor del encabezado Authorization), el cual se genera aleatoriamente durante el arranque y se imprime en los registros (por lo tanto, solo accesible para los administradores del sistema).

Si quieres usar tus propios scripts de Frida en modo enjaulado, solo necesitas montar (bind-mount) la carpeta que los contiene dentro del contenedor Docker:

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

Se requiere un archivo library.json (como el de la library) para indicar a la aplicación la lista de scripts disponibles.

🛠 Desarrollo

Ponerlo en marcha no debería ser demasiado difícil, pero antes de empezar deberías tener instaladas las siguientes herramientas:

  • frida (solo si habilitas Frida)
  • node (es una app de Node, ¡la necesitas!)
  • adb (bueno, dependemos de él para comunicarnos con el dispositivo)
  • JDK (lo necesitas para compilar la app complementaria)

Después de eso, simplemente puedes ejecutar lo siguiente:

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

Después, solo necesitas establecer las variables de entorno y luego ejecutar npm run dev, y listo. ¡Feliz modo de desarrollo!

🤝 Contribuciones

¡Las pull requests son bienvenidas! Por favor, abre primero un issue para discutir los cambios importantes. Las ideas para nuevos flujos de trabajo CTF o tipos de desafíos son especialmente apreciadas.

📚 Créditos

Desarrollado por Angelo Delicato @SECFORCE.

La sección del servidor depende en gran medida del increíble trabajo de @yume-chan; probablemente esta app no existiría si no fuera por su asombroso trabajo.

La app complementaria se basa en gran medida en el aya server, que funciona de la misma manera que el scrcpy server. Se pueden encontrar más detalles en el README específico.

🪪 Licencia

DroidGround se publica bajo la LICENCIA GPL-3.0.

Descargar herramienta
Captura de pantalla: descripción generalCaptura de pantalla: iniciar actividad
Descripción generalIniciar actividad
Captura de pantalla: modo Frida enjauladoCaptura de pantalla: modo Frida completo
Modo Frida enjauladoModo Frida completo
Captura de pantalla: explorador de archivosCaptura de pantalla: gestor de apps
Explorador de archivosGestor de apps
Captura de pantalla: terminalCaptura de pantalla: registros
TerminalRegistros
VariableDescripciónDefault
DROIDGROUND_BASE_PATHRuta de la aplicación web (útil para alojar en subrutas)-
DROIDGROUND_APP_PACKAGE_NAMENombre del paquete de la app objetivo-
DROIDGROUND_ADB_HOSTHost de ADBlocalhost
DROIDGROUND_ADB_PORTPuerto de ADB5037
DROIDGROUND_ADB_SERIALSerial opcional del dispositivo ADB al que conectarse-
DROIDGROUND_DEVICE_TYPEusb o networkusb
DROIDGROUND_DEVICE_HOSTIP del dispositivo Android (adb) (solo modo red)-
DROIDGROUND_DEVICE_PORTPuerto del dispositivo Android (adb) (solo modo red)-
DROIDGROUND_INIT_SCRIPTS_FOLDERCarpeta que contiene setup.sh y reset.sh/init.d
DROIDGROUND_HOSTDirección de enlace0.0.0.0
DROIDGROUND_PORTPuerto de enlace4242
DROIDGROUND_RESTART_APP_DISABLEDDeshabilitar el reinicio de la appfalse
DROIDGROUND_APP_MANAGER_DISABLEDDeshabilitar el gestor de appsfalse
DROIDGROUND_BUG_REPORT_DISABLEDDeshabilitar el bugreportfalse
DROIDGROUND_FILE_BROWSER_DISABLEDDeshabilitar el explorador de archivosfalse
DROIDGROUND_FRIDA_DISABLEDDeshabilitar el soporte de Fridafalse
DROIDGROUND_FRIDA_TYPEjail o fulljail
DROIDGROUND_FRIDA_INJECTIONserver o gadgetserver
DROIDGROUND_LOGCAT_DISABLEDDeshabilitar logcatfalse
DROIDGROUND_REBOOT_ENABLEDHabilitar el reiniciofalse
DROIDGROUND_SHUTDOWN_ENABLEDHabilitar el apagadofalse
DROIDGROUND_START_ACTIVITY_DISABLEDDeshabilitar startActivityfalse
DROIDGROUND_START_RECEIVER_DISABLEDDeshabilitar broadcastfalse
DROIDGROUND_START_SERVICE_DISABLEDDeshabilitar startServicefalse
DROIDGROUND_TERMINAL_DISABLEDDeshabilitar la terminalfalse
DROIDGROUND_RESET_DISABLEDDeshabilitar el restablecimientofalse
DROIDGROUND_EXPLOIT_APP_DURATIONEl tiempo (en segundos) durante el cual la app de exploit estará activa10
DROIDGROUND_EXPLOIT_APP_MAX_SIZEEl tamaño máximo (en MB) de la app de exploit50
DROIDGROUND_NUM_TEAMSEl número de equipos jugando simultáneamente-
DROIDGROUND_TEAM_TOKEN_<N>El token para el equipo N. Se genera automáticamente si falta-
DROIDGROUND_IP_STATICLa dirección IP estática a mostrar. Tiene prioridad sobre DROIDGROUND_IP_IFACE-
DROIDGROUND_IP_IFACELa interfaz de red para la dirección IP mostrada-
DROIDGROUND_LOGO_LINKOpcionalmente, establece el enlace de clic del logotipo (p. ej., la página principal de tu CTF)-