# Drozer Tutorial {{#include ../../../banners/hacktricks-training.md}} ## APKs om te toets - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (van mrwlabs) - [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) **Dele van hierdie tutoriaal is onttrek uit die** [**Drozer dokumentasie pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.** ## Installasie Installeer Drozer Client binne jou gasheer. Laai dit af van die [nuutste vr releases](https://github.com/mwrlabs/drozer/releases). ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted pip install service_identity ``` Laai die drozer APK af en installeer dit vanaf die [nuutste vrystellings](https://github.com/mwrlabs/drozer/releases). Op hierdie oomblik is dit [hierdie](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ```bash adb install drozer.apk ``` ### Begin die Bediening Agent loop op poort 31415, ons moet [port forward](https://en.wikipedia.org/wiki/Port_forwarding) om die kommunikasie tussen die Drozer Client en Agent te vestig, hier is die opdrag om dit te doen: ```bash adb forward tcp:31415 tcp:31415 ``` Laastens, **begin** die **toepassing** en druk die onderkant "**AAN**" ![](<../../../images/image (459).png>) En verbind daarmee: ```bash drozer console connect ``` ## Interessante Opdragte | **Opdragte** | **Beskrywing** | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | **Help MODULE** | Wys hulp van die geselekteerde module | | **list** | Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules wat jy nie die toepaslike regte het om te loop nie. | | **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent. | | **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. | | **load** | Laai 'n lêer wat drozer opdragte bevat en voer dit in volgorde uit. | | **module** | Vind en installeer addisionele drozer modules van die Internet. | | **unset** | Verwyder 'n benoemde veranderlike wat drozer aan enige Linux-skaal wat dit genereer, deurgee. | | **set** | Stoor 'n waarde in 'n veranderlike wat as 'n omgewingsveranderlike aan enige Linux-skaal wat deur drozer gegenereer word, deurgegee sal word. | | **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent | | **run MODULE** | Voer 'n drozer module uit | | **exploit** | Drozer kan eksploiters skep om in die toestel uit te voer. `drozer exploit list` | | **payload** | Die eksploiters benodig 'n payload. `drozer payload list` | ### Pakket Vind die **naam** van die pakket deur te filter op 'n deel van die naam: ```bash dz> run app.package.list -f sieve com.mwr.example.sieve ``` **Basiese Inligting** van die pakket: ```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 ``` Lees **Manifest**: ```bash run app.package.manifest jakhar.aseem.diva ``` **Aanvaloppervlak** van die pakket: ```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 ``` - **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet verhinder om dit te begin. - **Inhoudverskaffers**: Miskien kan jy privaat data toegang of 'n sekere kwesbaarheid (SQL Injection of Path Traversal) benut. - **Dienste**: - **is debuggable**: [Leer meer](./#is-debuggeable) ### Aktiwiteite 'n Uitgevoerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lêer gestel: ```markup ``` **Lys van uitgevoerde aktiwiteite**: ```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 ``` **Begin aktiwiteit**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet keer om dit te begin. ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` U kan ook 'n geexporteerde aktiwiteit vanaf **adb** begin: - Pakketnaam is com.example.demo - Geexporteerde Aktiwiteitnaam is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### Inhoudverskaffers Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy hier toegang**](exploiting-content-providers.md) verkry. ### Dienste 'n Geverifieerde diens word binne die Manifest.xml verklaar: ```markup ``` Binne die kode **kontroleer** vir die \*\*`handleMessage`\*\* funksie wat die **boodskap** sal **ontvang**: ![](<../../../images/image (82).png>) #### Lys diens ```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 ``` #### **Interaksie** met 'n diens ```bash app.service.send Send a Message to a service, and display the reply app.service.start Start Service app.service.stop Stop Service ``` #### Voorbeeld Kyk na die **drozer** hulp vir `app.service.send`: ![](<../../../images/image (1079).png>) Let daarop dat jy eers die data binne "_msg.what_" sal stuur, dan "_msg.arg1_" en "_msg.arg2_", jy moet binne die kode **watter inligting gebruik word** en waar nagaan.\ Met die `--extra` opsie kan jy iets stuur wat deur "_msg.replyTo_" geïnterpreteer word, en met `--bundle-as-obj` skep jy 'n objek met die verskafde besonderhede. In die volgende voorbeeld: - `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 ``` ![](<../../../images/image (647).png>) ### Uitsendingsontvangers **In die Android basiese inligting afdeling kan jy sien wat 'n Uitsendingsontvanger is**. Nadat jy hierdie Uitsendingsontvangers ontdek het, moet jy die **kode** daarvan nagaan. Let veral op die **`onReceive`** funksie, aangesien dit die ontvangde boodskappe sal hanteer. #### **Detecteer alle** uitsendingsontvangers ```bash run app.broadcast.info #Detects all ``` #### Kontroleer uitsendingsontvangers van 'n 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 ``` #### Uitsending **Interaksies** ```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 ``` #### Stuur 'n boodskap In hierdie voorbeeld wat die [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider misbruik, kan jy **enige SMS** na 'n nie-premium bestemming **stuur sonder om** die gebruiker vir toestemming te vra. ![](<../../../images/image (415).png>) ![](<../../../images/image (573).png>) As jy die kode lees, moet die parameters "_phoneNumber_" en "_message_" na die Content Provider gestuur word. ```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!" ``` ### Is debuggeable 'n Produksie APK moet nooit debuggeable wees.\ Dit beteken dat jy 'n **java debugger** aan die lopende toepassing kan heg, dit in werks tyd kan inspekteer, breekpunte kan stel, stap vir stap kan gaan, veranderlike waardes kan versamel en selfs hulle kan verander. [InfoSec institute het 'n uitstekende artikel](../exploiting-a-debuggeable-applciation.md) oor hoe om dieper te delf wanneer jou toepassing debuggeable is en runtime kode in te voeg. Wanneer 'n toepassing debuggeable is, sal dit in die Manifest verskyn: ```xml