mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
256 lines
11 KiB
Markdown
256 lines
11 KiB
Markdown
# 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**"
|
|
|
|
.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
|
|
<activity android:name="com.my.app.Initial" android:exported="true">
|
|
</activity>
|
|
```
|
|
**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
|
|
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
|
|
```
|
|
Binne die kode **kontroleer** vir die \*\*`handleMessage`\*\* funksie wat die **boodskap** sal **ontvang**:
|
|
|
|
.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`:
|
|
|
|
.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
|
|
```
|
|
.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.
|
|
|
|
.png>)
|
|
|
|
.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
|
|
<application theme="@2131296387" debuggable="true"
|
|
```
|
|
U kan alle debugbare toepassings met **Drozer** vind:
|
|
```bash
|
|
run app.package.debuggable
|
|
```
|
|
## Tutorials
|
|
|
|
- [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](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://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://www.hackingarticles.in/android-penetration-testing-drozer/)
|
|
- [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
|
|
|
|
## More info
|
|
|
|
- [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
|
|
|
|
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|