15 KiB
Samouczek Drozera
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Wskazówka dotycząca nagród za błędy: Zarejestruj się na platformie Intigriti, premium platformie nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do 100 000 USD!
{% embed url="https://go.intigriti.com/hacktricks" %}
APKs do testowania
Części tego samouczka zostały wyodrębnione z dokumentacji Drozera w formacie pdf.
Instalacja
Zainstaluj klienta Drozera w swoim hostingu. 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 plik APK drozera z najnowszych wydań. W tym momencie jest to ten.
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 do wykonania:
adb forward tcp:31415 tcp:31415
Wreszcie uruchom aplikację i naciśnij przycisk "ON"
Następnie połącz się z nią:
drozer console connect
Interesujące polecenia
Polecenia | Opis |
---|---|
Help MODULE | Wyświetla pomoc wybranego modułu |
list | Pokazuje listę wszystkich modułów drozera, które można wykonać w bieżącej sesji. Ukrywa moduły, których nie masz odpowiednich uprawnień do uruchomienia. |
shell | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta. |
clean | Usuwa tymczasowe pliki przechowywane przez drozera na urządzeniu z systemem Android. |
load | Wczytuje plik zawierający polecenia drozera i wykonuje je sekwencyjnie. |
module | Znajduje i instaluje dodatkowe moduły drozera z Internetu. |
unset | Usuwa nazwaną zmienną, którą drozer przekazuje do wszystkich powłok Linuxa, które uruchamia. |
set | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszystkich powłok Linuxa uruchamianych przez drozera. |
shell | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta. |
run MODULE | Wykonuje moduł drozera |
exploit | Drozer może tworzyć eksploity do wykonania na urządzeniu. drozer exploit list |
payload | Eksploity wymagają ładunku. drozer payload list |
Pakiet
Znajdź nazwę pakietu, filtrowanie po 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: Być może możesz uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna cię powstrzymać przed jej uruchomieniem.
- Dostawcy treści: Być może możesz uzyskać dostęp do prywatnych danych lub wykorzystać jakąś podatność (wstrzyknięcie SQL lub Traversal ścieżki).
- Usługi:
- is debuggable: Dowiedz się więcej
Aktywności
Wartość "android:exported" skonfigurowana na "true" dla składowej aktywności eksportowanej 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
Rozpoczęcie aktywności:
Być może możesz rozpocząć aktywność i ominąć pewnego rodzaju autoryzację, która powinna Cię powstrzymać przed jej uruchomieniem.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
Możesz również uruchomić wyeksportowaną aktywność za pomocą adb:
- Nazwa pakietu to com.example.demo
- Nazwa wyeksportowanej aktywności to com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Dostawcy treści
Ten post był tak duży, żeby być tutaj, więc możesz uzyskać do niego dostęp na własnej stronie tutaj.
Usługi
Usługa eksportowana jest deklarowana wewnątrz Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
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
Komunikacja 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
Spójrz na pomoc drozera dla app.service.send
:
Zauważ, że najpierw będziesz wysyłać dane znajdujące się w "msg.what", następnie "msg.arg1" i "msg.arg2", powinieneś sprawdzić w kodzie jakie informacje są używane i gdzie.
Korzystając z 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 poniższym 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 nadawcze
W sekcji podstawowych informacji o Androidzie możesz zobaczyć, co to jest odbiornik nadawczy.
Po odkryciu tych odbiorników nadawczych powinieneś sprawdzić ich kod. Zwróć szczególną uwagę na funkcję onReceive
, ponieważ to właśnie ona będzie obsługiwać otrzymane wiadomości.
Wykryj wszystkie odbiorniki nadawcze
run app.broadcast.info #Detects all
Sprawdź odbiorniki nadawcze 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
Interakcje typu Broadcast
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 apkę FourGoats apk Content Provider możesz wysłać dowolny SMS do dowolnego niepremiumowego odbiorcy bez pytania użytkownika o zgodę.
Jeśli przeczytasz kod, parametry "phoneNumber" i "message" muszą zostać przesłane do Content Providera.
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!"
Jest możliwe debugowanie
Produkcyjny plik APK nigdy nie powinien być możliwy do debugowania.
Oznacza to, że możesz dołączyć debugger Javy do działającej aplikacji, inspekcjonować ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku przechodzić przez kod, zbierać wartości zmiennych, a nawet je zmieniać. Instytut InfoSec ma doskonały artykuł na temat zagłębiania się w aplikację, gdy jest możliwa do debugowania i wstrzykiwania kodu w czasie wykonania.
Gdy aplikacja jest możliwa do debugowania, pojawi się to w manifeście:
<application theme="@2131296387" debuggable="true"
Możesz znaleźć wszystkie aplikacje z możliwością debugowania za pomocą Drozera:
run app.package.debuggable
Samouczki
- 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
Więcej informacji
Wskazówka dotycząca nagrody za błąd: zarejestruj się na platformie Intigriti, premium platformie do nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLANY SUBSKRYPCYJNE!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.