tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Analiza aplikacji React Native
Aby potwierdzić, czy aplikacja została zbudowana na frameworku React Native, wykonaj następujące kroki:
-
Zmień nazwę pliku APK na plik zip i rozpakuj go do nowego folderu, używając polecenia
cp com.example.apk example-apk.zip
orazunzip -qq example-apk.zip -d ReactNative
. -
Przejdź do nowo utworzonego folderu ReactNative i zlokalizuj folder assets. W tym folderze powinieneś znaleźć plik
index.android.bundle
, który zawiera React JavaScript w zminifikowanym formacie. -
Użyj polecenia
find . -print | grep -i ".bundle$"
aby wyszukać plik JavaScript.
Kod Javascript
Jeśli sprawdzając zawartość index.android.bundle
znajdziesz kod JavaScript aplikacji (nawet jeśli jest zminifikowany), możesz analizować go w celu znalezienia wrażliwych informacji i luk w zabezpieczeniach.
Ponieważ bundle zawiera właściwie cały kod JS aplikacji, możliwe jest podzielenie go na różne pliki (co potencjalnie ułatwia jego inżynierię wsteczną) przy użyciu narzędzia react-native-decompiler.
Webpack
Aby dalej analizować kod JavaScript, możesz przesłać plik do https://spaceraccoon.github.io/webpack-exploder/ lub wykonać następujące kroki:
- Utwórz plik o nazwie
index.html
w tym samym katalogu z następującym kodem:
<script src="./index.android.bundle"></script>
-
Otwórz plik
index.html
w Google Chrome. -
Otwórz Narzędzie dewelopera, naciskając Command+Option+J dla OS X lub Control+Shift+J dla Windows.
-
Kliknij na "Sources" w Narzędziu dewelopera. Powinieneś zobaczyć plik JavaScript podzielony na foldery i pliki, tworzące główny pakiet.
Jeśli znajdziesz plik o nazwie index.android.bundle.map
, będziesz mógł analizować kod źródłowy w niezmienionej formie. Pliki map zawierają mapowanie źródła, co pozwala na mapowanie zminimalizowanych identyfikatorów.
Aby wyszukać wrażliwe dane uwierzytelniające i punkty końcowe, wykonaj następujące kroki:
-
Zidentyfikuj wrażliwe słowa kluczowe do analizy kodu JavaScript. Aplikacje React Native często korzystają z usług stron trzecich, takich jak Firebase, punkty końcowe usługi AWS S3, klucze prywatne itp.
-
W tym konkretnym przypadku zaobserwowano, że aplikacja korzysta z usługi Dialogflow. Wyszukaj wzór związany z jej konfiguracją.
-
Miałeś szczęście, że wrażliwe dane uwierzytelniające zakodowane na sztywno zostały znalezione w kodzie JavaScript podczas procesu rekonesansu.
Zmień kod JS i odbuduj
W tym przypadku zmiana kodu jest łatwa. Musisz tylko zmienić nazwę aplikacji, aby używała rozszerzenia .zip
i wyodrębnić ją. Następnie możesz zmodyfikować kod JS wewnątrz tego pakietu i odbudować aplikację. To powinno wystarczyć, aby umożliwić ci wstrzyknięcie kodu do aplikacji w celach testowych.
## Hermes bytecode
Jeśli pakiet zawiera Hermes bytecode, nie będziesz mógł uzyskać dostępu do kodu Javascript aplikacji (nawet do wersji zminimalizowanej).
Możesz sprawdzić, czy pakiet zawiera Hermes bytecode, uruchamiając następujące polecenie:
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96
Możesz jednak użyć narzędzi hbctool, hermes-dec lub hermes_rs, aby zdekompilować bajtkod i również zdekompilować go do pseudo kodu JS. Aby to zrobić, na przykład te polecenia:
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js
Zmiana kodu i odbudowa
Idealnie powinieneś być w stanie zmodyfikować zdisasemblerowany kod (zmieniając porównanie, wartość lub cokolwiek, co musisz zmodyfikować), a następnie odbudować bajtkod i odbudować aplikację.
Narzędzie hbctool wspiera disasemblerowanie pakietu i ponowne budowanie go po wprowadzeniu zmian, jednak obsługuje tylko stare wersje bajtkodu Hermes.
Narzędzie hermes-dec nie wspiera odbudowy bajtkodu.
Narzędzie hermes_rs wspiera odbudowę bajtkodu, ale jest to w rzeczywistości biblioteka, a nie narzędzie CLI.
Analiza dynamiczna
Możesz spróbować dynamicznie analizować aplikację, używając Frida, aby włączyć tryb dewelopera aplikacji React i użyć react-native-debugger
, aby się do niej podłączyć. Jednak do tego potrzebujesz źródła aplikacji. Więcej informacji na ten temat znajdziesz w https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/.
Odniesienia
- https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7
- https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications
- https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.