Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
droidground — Un parco giochi flessibile per le sfide CTF su Android. | Kitploit
Strumenti/GitHubGitHub/secforce/droidground
Sicurezza AndroidAnalisi Dinamica (Sandboxing)ExploitPentesting di App MobiliCTFPenetration TestingApprendimento e FormazioneLab e Pratica
GitHubsecforce/droidground

droidground

Un parco giochi flessibile per le sfide CTF su Android.

Vedi Repository
11772 giorni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Sito web


droidground

DroidGround


Sito web | Demo

Nelle tradizionali sfide CTF, è comune nascondere le flag in file su un sistema, richiedendo agli attacker di sfruttare vulnerabilità per recuperarle. Tuttavia, nel mondo Android questo approccio non funziona bene. I file APK sono facilmente scaricabili e reversibili, quindi posizionare una flag sul dispositivo di solito la rende banale da estrarre tramite analisi statica o trucchi con l'emulatore. Questo limita fortemente la possibilità di creare sfide realistiche e incentrate sul runtime.

DroidGround è progettato per risolvere questo problema.

È una piattaforma costruita su misura per ospitare sfide di hacking mobile Android in un ambiente controllato e realistico, in cui gli attacker sono limitati quel tanto che basta per richiedere la risoluzione delle sfide nel modo previsto.

È importante notare che i partecipanti possono essere confinati all'interno dell'ambiente dell'app. La modularità dello strumento consente di impostare se l'utente può o non può aprire una shell, leggere file arbitrari o eseguire il sideload di strumenti. Tutto può essere configurato in modo che l'unico modo per recuperare la flag sia comprendere e sfruttare l'app stessa.

📋 Indice dei contenuti

  • 🧭 Panoramica
  • ✨ Funzionalità
  • 📸 Screenshot
  • ⚙️ Configurazione
  • 🧩 Casi d'uso
  • ⚙️ Utilizzo
  • 💡 Consigli
  • 🛠 Sviluppo
  • 🤝 Contributi
  • 📚 Crediti
  • 🪪 Licenza

🧭 Panoramica

DroidGround consente di realizzare un'ampia varietà di sfide Android che altrimenti sarebbero difficili da implementare nelle tradizionali configurazioni CTF. Ad esempio, in una sfida di remote code execution (RCE), i giocatori potrebbero ricevere un APK per l'analisi locale. Dopo aver scoperto una vulnerabilità, possono sviluppare uno script Frida ed eseguirlo tramite DroidGround sul dispositivo target reale per estrarre la flag dalla memoria interna. Altri tipi di sfida possono coinvolgere activity nascoste, intent broadcast personalizzati, sfruttamento di servizi o analisi dinamica tramite strumenti preinstallati.

Con lo streaming del dispositivo in tempo reale, il controllo granulare delle funzionalità, l'integrazione con Frida e script di setup e reset personalizzabili, DroidGround consente agli organizzatori di CTF di creare sfide Android sicure, flessibili e realistiche che vanno ben oltre ciò che è tipicamente possibile.

✨ Funzionalità

DroidGround offre un ricco set di funzionalità controllate dal server.

  • Schermo del dispositivo in tempo reale (tramite scrcpy)
  • Reimposta lo stato della sfida
  • Riavvia App / Avvia Activity / Avvia Service
  • Invia Broadcast Intent
  • Spegnimento / Riavvio del dispositivo
  • Scarica Bugreport (bugreportz)
  • Scripting Frida
    • Esegui dalla libreria preinstallata (modalità jail)
    • Esegui script arbitrari (modalità completa)
  • Esplora File
  • Accesso al Terminale
  • Gestione APK
  • Visualizzatore Logcat
  • Server Exploit (se la modalità a squadre è attiva)

Quasi tutte le funzionalità sono modulari e definite tramite variabili d'ambiente, garantendo un controllo preciso sull'ambito della sfida.

📸 Screenshot

⚙️ Configurazione

Il file .env.sample nella directory principale è un buon punto di partenza. Questa è l'elenco completo di tutte le variabili d'ambiente attualmente supportate:

La variabile DROIDGROUND_IP_IFACE cerca prima una corrispondenza esatta e ripiega sulla prima interfaccia che inizia con il valore fornito, poiché Docker consente di specificare solo il prefisso dell'interfaccia di rete all'interno del container.

L'uso della variabile DROIDGROUND_NUM_TEAMS modifica leggermente il comportamento dell'applicazione internamente. Se questa opzione è impostata:

  1. La funzionalità del server exploit viene abilitata, consentendo a ogni squadra di usare il proprio server exploit (molto semplice) tramite il proprio team token.
  2. Il team token sarà richiesto per installare ed eseguire le app exploit. Ogni app installata sarà associata a una squadra e le altre squadre non potranno eseguirla.

Questo consente di condividere la stessa istanza di DroidGround tra più squadre in sfide in cui la flag può essere esfiltrata tramite una richiesta di rete. Questo riduce drasticamente i costi di deployment di DroidGround per le competizioni CTF.

Inoltre, se il valore è impostato a -1, verrà abilitata la cosiddetta modalità Squadre Illimitate. In questa modalità, nella pagina Panoramica sarà disponibile un pulsante per generare un nuovo team token. Tutte le variabili DROIDGROUND_TEAM_TOKEN_<N> vengono ignorate se questa modalità è abilitata.

🧩 Casi d'uso

Ecco alcuni modi in cui DroidGround può essere utilizzato:

  1. Activity Nascosta: Trova e avvia un'activity non esposta per vedere la flag (l'app del giocatore contiene una flag fittizia).
  2. RCE: L'app è vulnerabile a RCE e la flag è memorizzata sul dispositivo.
  3. Instrumentazione Frida: Sovraccarica un metodo ed estrai la flag dalla memoria privata usando uno script.

⚙️ Utilizzo

Nella cartella examples sono forniti un paio di file Docker Compose di esempio. Usano app del repository degli esempi di DroidGround che verranno progressivamente ampliate per mostrare tutte le funzionalità principali. Sono anche un buon punto di partenza per capire come allestire il tuo CTF.

All'avvio DroidGround esegue le seguenti operazioni:

  1. Imposta la connessione con adb
  2. Esegue lo script setup.sh nella cartella specificata da DROIDGROUND_INIT_SCRIPTS_FOLDER, se presente. Questo script può essere usato per installare l'app target e fare tutto il necessario per inizializzare il CTF (es. posizionare la flag in una posizione nota)
  3. (se Frida è abilitata) Scarica il frida-server corretto in base alla versione installata e all'architettura del dispositivo e lo avvia
  4. Esegue l'app target (quella specificata tramite DROIDGROUND_APP_PACKAGE_NAME). Se l'app non è installata, DroidGround terminerà.
  5. Configura le API REST, i server WebSocket e lo streaming del display

Ecco un esempio di 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"

Per un deploy in produzione (in un CTF reale) potresti voler predisporre in anticipo un numero predefinito di istanze di DroidGround, oppure consentire agli utenti di creare istanze (con una limitazione o magari associando ogni squadra/utente a un'istanza specifica). Per questo motivo abbiamo aggiunto anche un semplice esempio di spawner.

In alternativa, come accennato in precedenza, puoi creare una sfida in cui la flag può essere esfiltrata tramite una richiesta di rete e sfruttare la variabile d'ambiente DROIDGROUND_NUM_TEAMS per evitare di creare più istanze (operazione che potrebbe essere costosa). La cartella net-multi-step fornisce un buon esempio su come realizzare questo tipo di sfide.

💡 Consigli

Ecco alcuni suggerimenti per allestire il tuo CTF Android:

  • Fai attenzione quando abiliti la Frida Full Mode: il giocatore avrà il controllo completo del dispositivo (è per questo che abbiamo creato la Frida Jail Mode, come descritto in Frida Library).
  • Fai attenzione quando abiliti il Terminale: il giocatore avrà il controllo completo del dispositivo.
  • Fai attenzione quando abiliti la funzionalità Shutdown.
  • Se prevedi di rendere la flag direttamente visibile nell'interfaccia, potresti voler trovare un modo per creare istanze diverse (una per ogni squadra/giocatore).

Durante i test della configurazione prima di andare in produzione, potrebbe essere utile ottenere la superficie d'attacco dell'app target. Questo è qualcosa che i giocatori non dovrebbero vedere, perché fa parte del loro compito scoprire e analizzare la superficie d'attacco!

Pertanto, è disponibile un endpoint GET raggiungibile all'indirizzo /attackSurface, protetto da un token (da usare come valore dell'header Authorization) generato casualmente durante l'avvio e stampato nei log (quindi accessibile solo ai sysadmin).

Se vuoi usare i tuoi script Frida in modalità jail, devi solo montare tramite bind-mount la cartella che li contiene nel container Docker:

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

Per istruire l'applicazione sull'elenco degli script disponibili è necessario un file library.json (come quello nella cartella library).

🛠 Sviluppo

Far funzionare il progetto non dovrebbe essere troppo difficile, ma prima di iniziare dovresti avere installati i seguenti strumenti:

  • frida (solo se abiliti Frida)
  • node (è un'app Node, devi averlo!)
  • adb (beh, ci affidiamo a esso per comunicare con il dispositivo)
  • JDK (ti serve per compilare l'app companion)

Dopodiché puoi semplicemente eseguire quanto segue:

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

Dopodiché devi solo impostare le variabili env e poi eseguire npm run dev, e sei a posto. Buon dev mode!

🤝 Contributi

Le pull request sono benvenute! Per favore, apri prima una issue per discutere le modifiche importanti. Le idee per nuovi flussi di lavoro CTF o tipi di sfida sono particolarmente apprezzate.

📚 Crediti

Sviluppato da Angelo Delicato @SECFORCE.

La sezione server si basa in gran parte sull'incredibile lavoro di @yume-chan; probabilmente quest'app non esisterebbe senza il suo straordinario lavoro.

L'app companion è fortemente basata sul server aya, che funziona allo stesso modo del server scrcpy. Ulteriori dettagli sono disponibili nel relativo README.

🪪 Licenza

DroidGround è rilasciato sotto la licenza GPL-3.0.

Scarica lo strumento
Screenshot PanoramicaScreenshot Avvia Activity
PanoramicaAvvia Activity
Screenshot Frida Modalità JailScreenshot Frida Modalità Completa
Frida Modalità JailFrida Modalità Completa
Screenshot Esplora FileScreenshot Gestore App
Esplora FileGestore App
Screenshot TerminaleScreenshot Log
TerminaleLog
VariableDescriptionDefault
DROIDGROUND_BASE_PATHPercorso della webapp (utile per l'hosting su sottopercorsi)-
DROIDGROUND_APP_PACKAGE_NAMENome del pacchetto dell'app target-
DROIDGROUND_ADB_HOSTHost ADBlocalhost
DROIDGROUND_ADB_PORTPorta ADB5037
DROIDGROUND_ADB_SERIALSeriale del dispositivo ADB opzionale a cui connettersi-
DROIDGROUND_DEVICE_TYPEusb o networkusb
DROIDGROUND_DEVICE_HOSTIP del dispositivo Android (adb) (solo modalità network)-
DROIDGROUND_DEVICE_PORTPorta del dispositivo Android (adb) (solo modalità network)-
DROIDGROUND_INIT_SCRIPTS_FOLDERCartella contenente setup.sh e reset.sh/init.d
DROIDGROUND_HOSTIndirizzo di bind0.0.0.0
DROIDGROUND_PORTPorta di bind4242
DROIDGROUND_RESTART_APP_DISABLEDDisabilita il riavvio dell'appfalse
DROIDGROUND_APP_MANAGER_DISABLEDDisabilita il gestore appfalse
DROIDGROUND_BUG_REPORT_DISABLEDDisabilita il bugreportfalse
DROIDGROUND_FILE_BROWSER_DISABLEDDisabilita l'esplora filefalse
DROIDGROUND_FRIDA_DISABLEDDisabilita il supporto Fridafalse
DROIDGROUND_FRIDA_TYPEjail o fulljail
DROIDGROUND_FRIDA_INJECTIONserver o gadgetserver
DROIDGROUND_LOGCAT_DISABLEDDisabilita logcatfalse
DROIDGROUND_REBOOT_ENABLEDAbilita il riavviofalse
DROIDGROUND_SHUTDOWN_ENABLEDAbilita lo spegnimentofalse
DROIDGROUND_START_ACTIVITY_DISABLEDDisabilita startActivityfalse
DROIDGROUND_START_RECEIVER_DISABLEDDisabilita il broadcastfalse
DROIDGROUND_START_SERVICE_DISABLEDDisabilita startServicefalse
DROIDGROUND_TERMINAL_DISABLEDDisabilita il terminalefalse
DROIDGROUND_RESET_DISABLEDDisabilita il resetfalse
DROIDGROUND_EXPLOIT_APP_DURATIONIl tempo (in secondi) durante il quale l'app exploit sarà attiva10
DROIDGROUND_EXPLOIT_APP_MAX_SIZELa dimensione massima (in MB) dell'app exploit50
DROIDGROUND_NUM_TEAMSIl numero di squadre che giocano simultaneamente-
DROIDGROUND_TEAM_TOKEN_<N>Il token per l'ennesima squadra. Auto-generato se mancante-
DROIDGROUND_IP_STATICL'indirizzo IP statico da visualizzare. Ha precedenza su DROIDGROUND_IP_IFACE-
DROIDGROUND_IP_IFACEL'interfaccia di rete per l'indirizzo IP visualizzato-
DROIDGROUND_LOGO_LINKImposta opzionalmente il link di click-through del logo (es. la tua pagina principale CTF)-