# 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. ![](<../../../images/image (459).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: ![](<../../../images/image (82).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: ![](<../../../images/image (1079).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 ``` ![](<../../../images/image (647).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. ![](<../../../images/image (415).png>) ![](<../../../images/image (573).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