Drozer Tutorial
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
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.
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.
adb install drozer.apk
Avviare il Server
Lâagente è in esecuzione sulla porta 31415, dobbiamo port forward per stabilire la comunicazione tra il Drozer Client e lâAgente, qui câè il comando per farlo:
adb forward tcp:31415 tcp:31415
Infine, lancia lâapplicazione e premi il pulsante âONâ
.png)
E connettiti ad essa:
drozer console connect
Comandi Interessanti
| Comandi | Descrizione |
|---|---|
| Help MODULE | Mostra lâaiuto del modulo selezionato |
| list | Mostra 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. |
| shell | Avvia una shell Linux interattiva sul dispositivo, nel contesto dellâAgente. |
| clean | Rimuove i file temporanei memorizzati da drozer sul dispositivo Android. |
| load | Carica un file contenente comandi drozer ed eseguili in sequenza. |
| module | Trova e installa moduli drozer aggiuntivi da Internet. |
| unset | Rimuove una variabile nominata che drozer passa a qualsiasi shell Linux che genera. |
| set | Memorizza un valore in una variabile che sarĂ passato come variabile ambientale a qualsiasi shell Linux generata da drozer. |
| shell | Avvia una shell Linux interattiva sul dispositivo, nel contesto dellâAgente |
| run MODULE | Esegue un modulo drozer |
| exploit | Drozer può creare exploit da eseguire nel dispositivo. drozer exploit list |
| payload | Gli exploit necessitano di un payload. drozer payload list |
Pacchetto
Trova il nome del pacchetto filtrando per parte del nome:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Informazioni di base del pacchetto:
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:
run app.package.manifest jakhar.aseem.diva
Superficie di attacco del pacchetto:
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:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Elenca le attivitĂ esportate:
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.
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
adb shell am start -n com.example.demo/com.example.test.MainActivity
Content Providers
Questo post era cosĂŹ grande da essere qui quindi puoi accederlo nella sua pagina qui.
Services
Un servizio esportato è dichiarato allâinterno del Manifest.xml:
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
Allâinterno del codice controlla la funzione handleMessage che riceverĂ il messaggio:
.png)
Elenco dei servizi
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
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:
.png)
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 == 2354arg1 == 9234arg2 == 1replyTo == object(string com.mwr.example.sieve.PIN 1337)
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
.png)
Broadcast Receivers
Nella sezione informazioni di base di Android puoi vedere cosâè un Broadcast Receiver.
Dopo aver scoperto questi Broadcast Receivers dovresti controllare il codice di essi. Fai particolare attenzione alla funzione onReceive poichĂŠ gestirĂ i messaggi ricevuti.
Rileva tutti i broadcast receivers
run app.broadcast.info #Detects all
Controlla i broadcast receiver di unâapp
#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
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.
.png)
.png)
Se leggi il codice, i parametri âphoneNumberâ e âmessageâ devono essere inviati al Content Provider.
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. Lâ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:
<application theme="@2131296387" debuggable="true"
Puoi trovare tutte le applicazioni debugabili con Drozer:
run app.package.debuggable
Tutorials
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md
- https://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
More info
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

