18 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ź PLAN SUBSKRYPCJI!
- 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 bug bounty: zarejestruj się na platformie 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!
{% embed url="https://go.intigriti.com/hacktricks" %}
APK do testowania
Części tego samouczka zostały wyjęte z Drozer documentation pdf.
Instalacja
Zainstaluj klienta Drozer w 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 plik APK drozer z najnowszych wydań. W tym momencie jest to ten.
adb install drozer.apk
Uruchamianie serwera
Agent działa na porcie 31415, musimy przekierować port w celu nawiązania komunikacji między klientem Drozer a Agentem. Oto polecenie, które należy wykonać:
adb forward tcp:31415 tcp:31415
W końcu, 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 dla wybranego modułu |
list | Wyświetla listę wszystkich modułów drozera, które można uruchomić 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 drozera na urządzeniu 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 każdej powłoki Linux, którą uruchamia. |
set | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do każdej powłoki Linux uruchamianej 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ć exploity do wykonania na urządzeniu. drozer exploit list |
payload | Exploity wymagają payloadu. 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: Może można uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna Cię powstrzymać przed jej uruchomieniem.
- Dostawcy treści: Może można uzyskać dostęp do prywatnych danych lub wykorzystać jakąś podatność (wstrzyknięcie SQL lub przechodzenie ścieżek).
- Usługi:
- is debuggable: Dowiedz się więcej
Aktywności
Wartość "android:exported" składnika aktywności jest ustawiona na "true" w pliku AndroidManifest.xml:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Lista wyeksportowanych aktywności:
Aby wyświetlić listę wyeksportowanych aktywności w aplikacji Android, wykonaj następujące kroki:
- Uruchom narzędzie drozer, wpisując polecenie
drozer console connect
. - Po połączeniu z urządzeniem, wpisz polecenie
run app.package.exported_activities -a <nazwa_pakietu>
, gdzie<nazwa_pakietu>
to nazwa pakietu aplikacji, której aktywności chcesz sprawdzić. - Po wykonaniu polecenia, zostanie wyświetlona lista wszystkich wyeksportowanych aktywności w podanej aplikacji.
Przykład użycia:
run app.package.exported_activities -a com.example.app
Wynik:
Exported Activities:
- com.example.app.MainActivity
- com.example.app.SecondActivity
- com.example.app.SettingsActivity
Pamiętaj, że wyeksportowane aktywności mogą stanowić potencjalne zagrożenie dla bezpieczeństwa aplikacji, dlatego ważne jest, aby odpowiednio zabezpieczyć je przed nieautoryzowanym dostępem.
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:
Możesz spróbować 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 jest tak duży, że możesz uzyskać do niego dostęp na osobnej stronie tutaj.
Usługi
Usługa eksportowana jest deklarowana w pliku Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
Wewnątrz kodu sprawdź funkcję **handleMessage
**, która będzie odbierać 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ą
To interact with a service, you need to establish a connection and send requests to it. In the case of Android app pentesting, you can use drozer to interact with the app's services.
A service is a component of an Android app that runs in the background without a user interface. It performs long-running operations or handles remote requests. By interacting with a service, you can gather information, manipulate data, or even exploit vulnerabilities.
Drozer provides a command-line interface to interact with Android app services. You can use the run
command to execute drozer modules that interact with the app's services. These modules are designed to perform specific tasks, such as listing services, invoking methods, or querying content providers.
To interact with a service using drozer, follow these steps:
- Start drozer by running the command
drozer console connect
. - Connect to the target device by running the command
run app.package.list -f <package_name>
. - List the services available in the app by running the command
run app.service.list -f <package_name>
. - Choose a service to interact with and gather information about it by running the command
run app.service.info -f <package_name> -u <service_name>
. - Invoke methods on the service by running the command
run app.service.send <package_name> <service_name> <method_name> <arguments>
. - Analyze the responses and gather any relevant information.
By interacting with an app's services, you can gain a deeper understanding of its functionality and identify potential security vulnerabilities. This knowledge can be used to enhance your pentesting efforts and ensure the app's security.
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
Zajrzyj do pomocy drozera dla app.service.send
:
Zauważ, że najpierw wysyłasz 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ś, co zostanie zinterpretowane jako "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 transmisji
W sekcji podstawowych informacji o Androidzie możesz zobaczyć, czym jest odbiornik transmisji.
Po odkryciu tych odbiorników transmisji powinieneś sprawdzić ich kod. Zwróć szczególną uwagę na funkcję onReceive
, ponieważ to właśnie ona będzie obsługiwać otrzymane wiadomości.
Wykrywanie wszystkich odbiorników transmisji
run app.broadcast.info #Detects all
Sprawdź odbiorniki nadawcze aplikacji
Aby sprawdzić odbiorniki nadawcze aplikacji, możesz użyć narzędzia drozer
. drozer
to framework do testowania penetracyjnego aplikacji mobilnych na platformie Android. Poniżej przedstawiono kroki, które należy podjąć, aby sprawdzić odbiorniki nadawcze aplikacji przy użyciu drozera
:
- Uruchom
drozera
na swoim urządzeniu lub emulatorze Android. - Połącz się z urządzeniem za pomocą polecenia
connect <adres IP urządzenia>
. - Wyświetl listę zainstalowanych aplikacji za pomocą polecenia
run app.package.list
. - Wybierz aplikację, której odbiorniki nadawcze chcesz sprawdzić, za pomocą polecenia
run app.package.info -a <nazwa pakietu aplikacji>
. - Wyświetl listę odbiorników nadawczych aplikacji za pomocą polecenia
run app.broadcast.info -a <nazwa pakietu aplikacji>
.
Dzięki tym krokom będziesz mógł sprawdzić odbiorniki nadawcze aplikacji przy użyciu narzędzia drozer
.
#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 Broadcastów
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 i dostawcę treści, możesz wysłać dowolną wiadomość SMS do dowolnego niepremiumowego celu bez pytania użytkownika o zgodę.
Jeśli przeczytasz kod, parametry "phoneNumber" i "message" muszą zostać przesłane do dostawcy treści.
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 możliwe debugowanie
Produkcyjne pliki APK nigdy nie powinny być debugowalne.
Oznacza to, że można podłączyć debugger javy do działającej aplikacji, przeglądać ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku analizować, zbierać wartości zmiennych, a nawet je zmieniać. InfoSec institute ma doskonały artykuł na temat zagłębiania się w aplikację, gdy jest ona debugowalna i wstrzykiwania kodu w czasie wykonania.
Gdy aplikacja jest debugowalna, pojawi się to w Manifest:
<application theme="@2131296387" debuggable="true"
Możesz znaleźć wszystkie aplikacje, które można debugować 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 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 do 100 000 USD!
{% embed url="https://go.intigriti.com/hacktricks" %}
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ź PLAN SUBSKRYPCJI!
- 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.