Drozer Tutorial

Support HackTricks

Wskazówka dotycząca bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 $!

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"

I połącz się z nią:

drozer console connect

Ciekawe Komendy

Komendy

Opis

Help MODULE

Pokazuje pomoc dla 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 uda ci się uruchomić aktywność i obejść jakiś rodzaj autoryzacji, która powinna uniemożliwić jej uruchomienie.

  • Dostawcy treści: Może uda ci się uzyskać dostęp do prywatnych danych lub wykorzystać jakąś lukę (SQL Injection lub Path Traversal).

  • Usługi:

  • is debuggable: Dowiedz się więcej

Aktywności

Wartość komponentu aktywności eksportowanej “android:exported” jest ustawiona na “true” w pliku AndroidManifest.xml:

<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

Lista wyeksportowanych 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 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"/>

Wewnątrz kodu sprawdź funkcję **handleMessage**, która otrzyma wiadomość:

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:

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

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.

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!"

Is debuggeable

A prodduction APK should never be debuggeable. To oznacza, że możesz przyłączyć debuger 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.

When an application is debuggable, it will appear in the Manifest:

<application theme="@2131296387" debuggable="true"

Możesz znaleźć wszystkie aplikacje z możliwością debugowania za pomocą Drozer:

run app.package.debuggable

Tutorials

Więcej informacji

Wskazówka dotycząca bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!

Wsparcie HackTricks

Last updated