hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md
2024-02-11 01:46:25 +00:00

382 lines
18 KiB
Markdown

# Samouczek Objection
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**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**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## **Wprowadzenie**
**Objection - Eksploracja uruchomieniowa na urządzeniach mobilnych**
**[Objection](https://github.com/sensepost/objection)** to narzędzie do eksploracji uruchomieniowej na urządzeniach mobilnych, oparte na [Frida](https://www.frida.re). Zostało stworzone w celu pomocy w ocenie aplikacji mobilnych i ich bezpieczeństwa bez konieczności posiadania urządzenia mobilnego z jailbreakiem lub rootem.
**Uwaga:** To nie jest forma omijania jailbreaka / roota. Korzystając z `objection`, nadal jesteś ograniczony przez wszystkie ograniczenia narzucane przez odpowiedni sandbox, z którym się spotykasz.
### Podsumowanie
**Celem** narzędzia **objection** jest umożliwienie użytkownikowi wywoływania **głównych akcji oferowanych przez Fridę**. W przeciwnym razie użytkownik będzie musiał stworzyć **pojedynczy skrypt dla każdej aplikacji**, którą chce przetestować.
## Samouczek
W tym samouczku będę korzystać z pliku APK, który można pobrać tutaj:
{% file src="../../../.gitbook/assets/app-release.zip" %}
Lub z [oryginalnego repozytorium](https://github.com/asvid/FridaApp)(pobierz app-release.apk)
### Instalacja
```bash
pip3 install objection
```
### Połączenie
Nawiąż **zwykłe połączenie ADB** i **uruchom** serwer frida na urządzeniu (i sprawdź, czy frida działa zarówno po stronie klienta, jak i serwera).
Jeśli używasz **urządzenia z rootem**, konieczne jest wybranie aplikacji, którą chcesz przetestować w opcji _**--gadget**_. W tym przypadku:
```bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
```
### Podstawowe działania
W tym samouczku nie będą wymienione wszystkie możliwe polecenia objections, tylko te, które uważam za bardziej przydatne.
#### Środowisko
W środowisku można znaleźć interesujące informacje (takie jak hasła czy ścieżki).
```bash
env
```
![](<../../../.gitbook/assets/image (64).png>)
#### Informacje o Fridzie
Frida to potężne narzędzie do dynamicznej analizy i manipulacji aplikacji mobilnych. Działa na różnych platformach, w tym na systemie Android. Frida umożliwia interakcję z aplikacją w czasie rzeczywistym, co pozwala na monitorowanie i modyfikację jej działania.
#### Objection
Objection to rozszerzenie Fridy, które dostarcza zestaw narzędzi do testowania penetracyjnego aplikacji mobilnych na platformie Android. Objection ułatwia analizę aplikacji, identyfikację podatności i manipulację zasobami aplikacji.
#### Instalacja
Aby zainstalować Objection, wykonaj następujące kroki:
1. Zainstaluj Fridę, wykonując polecenie `pip install frida-tools`.
2. Zainstaluj Objection, wykonując polecenie `pip install objection`.
#### Uruchamianie Objection
Aby uruchomić Objection, wykonaj polecenie `objection`. Po uruchomieniu zostanie wyświetlone interaktywne środowisko Objection, w którym można wykonywać różne operacje.
#### Podstawowe funkcje Objection
Objection oferuje wiele przydatnych funkcji, takich jak:
- **Device**: Pozwala na interakcję z urządzeniem mobilnym, na którym działa aplikacja.
- **App**: Umożliwia manipulację aplikacją, taką jak uruchamianie, zatrzymywanie, przeładowywanie itp.
- **Explore**: Pozwala na eksplorację struktury aplikacji i identyfikację podatności.
- **Interact**: Umożliwia interakcję z aplikacją w czasie rzeczywistym, taką jak wywoływanie metod, modyfikowanie zmiennych itp.
- **Inject**: Pozwala na wstrzykiwanie kodu do aplikacji w celu manipulacji jej działaniem.
- **Watch**: Umożliwia monitorowanie zdarzeń w aplikacji, takich jak wywołania metod, zmienne itp.
#### Podsumowanie
Objection to potężne narzędzie, które w połączeniu z Fridą umożliwia penetrację aplikacji mobilnych na platformie Android. Dzięki Objection można analizować aplikacje, identyfikować podatności i manipulować ich działaniem w czasie rzeczywistym.
```bash
frida
```
![](<../../../.gitbook/assets/image (65).png>)
#### Przesyłanie/Pobieranie
```bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
```
#### Importuj skrypt frida
```javascript
const script = await Session.createScript(`
// Your script code here
`);
```
#### Load frida script into the target app
```javascript
await script.load();
```
#### Hook a function in the target app
```javascript
await script.exports.functionName();
```
#### Interact with the target app
```javascript
await script.exports.functionName(parameter);
```
#### Unload frida script from the target app
```javascript
await script.unload();
```
#### Detach from the target app
```javascript
await session.detach();
```
```bash
import <local path frida-script>
```
#### SSLPinning
SSLPinning to mechanizm bezpieczeństwa, który chroni aplikacje mobilne przed atakami typu Man-in-the-Middle (MitM). Polega na sprawdzaniu i weryfikacji certyfikatów SSL podczas nawiązywania połączenia z serwerem.
W przypadku ataku MitM, gdzie atakujący przechwytuje i podszywa się pod komunikację między aplikacją a serwerem, SSLPinning uniemożliwia atakującemu podszywanie się pod serwer poprzez sprawdzenie, czy certyfikat SSL serwera jest poprawny i zaufany.
Obiekt `objection` oferuje narzędzia do obejścia mechanizmu SSLPinning w aplikacjach mobilnych. Dzięki temu możemy analizować i testować aplikacje podatne na ataki MitM.
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
#### Wykrywanie roota
Root detection, also known as root checking, is a technique used to determine whether a mobile device has been rooted or not. Rooting a device gives the user administrative privileges, allowing them to access and modify system files and settings that are typically restricted.
Wykrywanie roota, znane również jako sprawdzanie roota, to technika używana do określenia, czy urządzenie mobilne zostało zrootowane czy nie. Zrootowanie urządzenia daje użytkownikowi uprawnienia administratora, umożliwiając mu dostęp i modyfikację plików i ustawień systemowych, które zwykle są ograniczone.
Mobile app developers often implement root detection mechanisms in their applications to prevent them from running on rooted devices. This is done to protect the app's integrity and prevent potential security risks that may arise from running on a rooted device.
Twórcy aplikacji mobilnych często implementują mechanizmy wykrywania roota w swoich aplikacjach, aby uniemożliwić ich uruchamianie na zrootowanych urządzeniach. Robią to w celu ochrony integralności aplikacji i zapobiegania potencjalnym zagrożeniom dla bezpieczeństwa, które mogą wynikać z uruchamiania na zrootowanym urządzeniu.
Root detection techniques can vary, but they often involve checking for the presence of certain files or binaries that are commonly associated with rooting. Some apps may also use more advanced techniques, such as checking for the presence of specific system properties or using native code to perform root checks.
Techniki wykrywania roota mogą się różnić, ale często polegają na sprawdzaniu obecności określonych plików lub binarnych, które są powszechnie związane z rootowaniem. Niektóre aplikacje mogą również używać bardziej zaawansowanych technik, takich jak sprawdzanie obecności określonych właściwości systemowych lub korzystanie z kodu natywnego do wykonywania sprawdzania roota.
As a mobile penetration tester, it is important to understand and bypass root detection mechanisms in order to assess the security of an application on rooted devices. This can be done using various techniques, such as modifying the app's code or using tools like Frida or Objection to dynamically analyze and manipulate the app's behavior.
Jako tester penetracji mobilnej ważne jest zrozumienie i obejście mechanizmów wykrywania roota w celu oceny bezpieczeństwa aplikacji na zrootowanych urządzeniach. Można to zrobić za pomocą różnych technik, takich jak modyfikowanie kodu aplikacji lub korzystanie z narzędzi takich jak Frida lub Objection do dynamicznej analizy i manipulacji zachowaniem aplikacji.
```bash
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
```
#### Wykonaj polecenie
The `exec` command in objection allows you to execute shell commands on the target Android device. This can be useful for various purposes during a mobile penetration test.
To use the `exec` command, you need to specify the command you want to execute as an argument. For example, to execute the `ls` command to list the files in the current directory, you can use the following syntax:
```
objection> exec ls
```
The output of the command will be displayed in the console.
Keep in mind that the `exec` command runs the specified command on the target device, so be cautious when executing potentially harmful commands.
```bash
android shell_exec whoami
```
#### Zrzuty ekranu
```bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
```
### Analiza statyczna staje się dynamiczna
W rzeczywistej aplikacji powinniśmy znać wszystkie informacje odkryte w tej części przed użyciem objection dzięki **analizie statycznej**. W każdym razie, w ten sposób może być możliwe zobaczenie **czegoś nowego**, ponieważ tutaj będziesz mieć tylko pełną listę klas, metod i obiektów eksportowanych.
Jest to również przydatne, jeśli w jakiś sposób jesteś **niezdolny do uzyskania czytelnego kodu źródłowego** aplikacji.
#### Wyświetl listę aktywności, odbiorników i usług
```bash
android hooking list activities
```
![](<../../../.gitbook/assets/image (78).png>)
```bash
android hooking list services
android hooking list receivers
```
Frida wywoła błąd, jeśli nie zostanie znaleziona żadna.
#### Pobieranie bieżącej aktywności
```bash
android hooking get current_activity
```
#### Wyszukiwanie klas
Zacznijmy od szukania klas w naszej aplikacji.
```bash
android hooking search classes asvid.github.io.fridaapp
```
![](<../../../.gitbook/assets/image (69).png>)
#### Metody wyszukiwania klasy
Teraz wyodrębnijmy metody wewnątrz klasy _MainActivity:_
```bash
android hooking search methods asvid.github.io.fridaapp MainActivity
```
![](<../../../.gitbook/assets/image (70) (1).png>)
#### Wyświetlanie zadeklarowanych metod klasy wraz z ich parametrami
Sprawdźmy, jakie parametry są potrzebne do metod klasy:
```bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
```
![](<../../../.gitbook/assets/image (79).png>)
#### Wyświetlanie listy klas
Możesz również wyświetlić listę wszystkich klas, które zostały załadowane w bieżącej aplikacji:
```bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
To jest bardzo przydatne, jeśli chcesz **podpiąć metodę klasy i znasz tylko nazwę klasy**. Możesz użyć tej funkcji, aby **znaleźć moduł, do którego należy klasa**, a następnie podpiąć jego metodę.
### Podpięcie jest proste
#### Podpięcie (obserwowanie) metody
Z [kodu źródłowego](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) aplikacji wiemy, że **funkcja** _**sum()**_ **z klasy** _**MainActivity**_ jest uruchamiana **co sekundę**. Spróbujmy **zrzucić wszystkie możliwe informacje** za każdym razem, gdy funkcja jest wywoływana (argumenty, wartość zwracana i ślad wsteczny):
```bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
```
![](<../../../.gitbook/assets/image (71).png>)
#### Hookowanie (obserwowanie) całej klasy
Właściwie uważam, że wszystkie metody klasy MainActivity są naprawdę interesujące, więc **zahookujmy je wszystkie**. Bądź ostrożny, może to **spowodować awarię** aplikacji.
```bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
```
Jeśli grasz z aplikacją podczas gdy klasa jest podpięta, zobaczysz kiedy **każda funkcja jest wywoływana**, jej **argumenty** i **wartość zwracana**.
![](<../../../.gitbook/assets/image (72).png>)
#### Zmiana wartości logicznej zwracanej przez funkcję
Z kodu źródłowego można zobaczyć, że funkcja _checkPin_ otrzymuje argument typu _String_ i zwraca wartość logiczną. Zmieńmy funkcję tak, aby **zawsze zwracała true**:
![](<../../../.gitbook/assets/image (74).png>)
Teraz, jeśli wpiszesz cokolwiek w polu tekstowym dla kodu PIN, zobaczysz, że wszystko jest poprawne:
![](<../../../.gitbook/assets/image (77).png>)
### Instancje klasy
Wyszukaj i wyświetl **aktywne instancje określonej klasy Java**, określonej przez pełną nazwę klasy. Wynik to próba uzyskania wartości łańcuchowej dla odkrytego zarzutu, który zwykle **zawiera wartości właściwości obiektu**.
```
android heap print_instances <class>
```
![](<../../../.gitbook/assets/image (80).png>)
### Keystore/Intents
Możesz bawić się keystore i intents używając:
```bash
android keystore list
android intents launch_activity
android intent launch_service
```
#### Zrzut pamięci
##### Opis
Zrzut pamięci to proces pozyskiwania zawartości pamięci urządzenia mobilnego w celu analizy. Pozwala to na odkrycie poufnych informacji, takich jak klucze szyfrowania, tokeny uwierzytelniające, dane użytkownika itp.
##### Wykorzystanie
Aby wykonać zrzut pamięci, możemy skorzystać z narzędzia Objection. Oto przykładowe polecenie:
```bash
objection -g <nazwa_aplikacji> explore
```
Gdzie `<nazwa_aplikacji>` to nazwa aplikacji, której chcemy dokonać zrzutu pamięci.
##### Wynik
Po wykonaniu polecenia, Objection utworzy plik zrzutu pamięci w formacie `.dmp`. Możemy następnie przeglądać ten plik przy użyciu narzędzi do analizy pamięci, takich jak Volatility.
##### Uwaga
Zrzut pamięci może być nielegalny lub naruszać prywatność, jeśli jest wykonywany na urządzeniu bez zgody właściciela. Zawsze pamiętaj o przestrzeganiu prawa i etyki podczas wykonywania zrzutów pamięci.
```bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
```
#### Lista
```bash
memory list modules
```
![](<../../../.gitbook/assets/image (66).png>)
Na dole listy możesz zobaczyć fridę:
![](<../../../.gitbook/assets/image (67).png>)
Sprawdźmy, co frida eksportuje:
![](<../../../.gitbook/assets/image (68).png>)
#### Wyszukiwanie/Zapisywanie
Możesz również wyszukiwać i zapisywać w pamięci za pomocą objection:
```bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
```
### SQLite
Możecie użyć polecenia `sqlite` do interakcji z bazami danych SQLite.
### Wyjście
```bash
exit
```
## Czego mi brakuje w Objection
* Metody hookowania czasami powodują awarie aplikacji (to również z powodu Fridy).
* Nie można używać instancji klas do wywoływania funkcji instancji. Nie można również tworzyć nowych instancji klas i używać ich do wywoływania funkcji.
* Nie ma skrótu (podobnego do sslpinnin), który umożliwiałby hookowanie wszystkich wspólnych metod kryptograficznych używanych przez aplikację w celu zobaczenia zaszyfrowanego tekstu, tekstu jawnego, kluczy, IV i używanych algorytmów.
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**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**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi trikami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>