mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			256 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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
 | ||
| <activity android:name="com.my.app.Initial" android:exported="true">
 | ||
| </activity>
 | ||
| ```
 | ||
| **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
 | ||
| <service android:name=".AuthService" android:exported="true" android:process=":remote"/>
 | ||
| ```
 | ||
| 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
 | ||
| <application theme="@2131296387" debuggable="true"
 | ||
| ```
 | ||
| Tüm hata ayıklanabilir uygulamaları **Drozer** ile bulabilirsiniz:
 | ||
| ```bash
 | ||
| run app.package.debuggable
 | ||
| ```
 | ||
| ## Eğitimler
 | ||
| 
 | ||
| - [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)
 | ||
| 
 | ||
| ## Daha fazla bilgi
 | ||
| 
 | ||
| - [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| {{#include ../../../banners/hacktricks-training.md}}
 |