mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-25 04:23:33 +00:00
382 lines
18 KiB
Markdown
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>
|