tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
Analisi dell'Applicazione React Native
Per confermare se l'applicazione è stata costruita sul framework React Native, segui questi passaggi:
-
Rinomina il file APK con un'estensione zip ed estrailo in una nuova cartella usando il comando
cp com.example.apk example-apk.zip
eunzip -qq example-apk.zip -d ReactNative
. -
Naviga nella nuova cartella ReactNative e individua la cartella assets. All'interno di questa cartella, dovresti trovare il file
index.android.bundle
, che contiene il JavaScript React in un formato minificato. -
Usa il comando
find . -print | grep -i ".bundle$"
per cercare il file JavaScript.
Codice Javascript
Se controllando i contenuti di index.android.bundle
trovi il codice JavaScript dell'applicazione (anche se minificato), puoi analizzarlo per trovare informazioni sensibili e vulnerabilità.
Poiché il bundle contiene effettivamente tutto il codice JS dell'applicazione, è possibile dividerlo in diversi file (potenzialmente facilitando il suo reverse engineering) utilizzando lo strumento react-native-decompiler.
Webpack
Per analizzare ulteriormente il codice JavaScript, puoi caricare il file su https://spaceraccoon.github.io/webpack-exploder/ o seguire questi passaggi:
- Crea un file chiamato
index.html
nella stessa directory con il seguente codice:
<script src="./index.android.bundle"></script>
-
Apri il file
index.html
in Google Chrome. -
Apri la Developer Toolbar premendo Command+Option+J per OS X o Control+Shift+J per Windows.
-
Clicca su "Sources" nella Developer Toolbar. Dovresti vedere un file JavaScript suddiviso in cartelle e file, che compongono il bundle principale.
Se trovi un file chiamato index.android.bundle.map
, potrai analizzare il codice sorgente in un formato non minificato. I file di mappatura contengono mappature sorgente, che ti permettono di mappare identificatori minificati.
Per cercare credenziali sensibili e endpoint, segui questi passaggi:
-
Identifica parole chiave sensibili per analizzare il codice JavaScript. Le applicazioni React Native spesso utilizzano servizi di terze parti come Firebase, endpoint del servizio AWS S3, chiavi private, ecc.
-
In questo caso specifico, è stato osservato che l'applicazione utilizzava il servizio Dialogflow. Cerca un modello relativo alla sua configurazione.
-
È stato fortunato che credenziali sensibili hard-coded siano state trovate nel codice JavaScript durante il processo di ricognizione.
Cambia il codice JS e ricostruisci
In questo caso cambiare il codice è facile. Devi solo rinominare l'app per utilizzare l'estensione .zip
ed estrarla. Poi puoi modificare il codice JS all'interno di questo bundle e ricostruire l'app. Questo dovrebbe essere sufficiente per permetterti di iniettare codice nell'app per scopi di test.
## Bytecode Hermes
Se il bundle contiene bytecode Hermes, non potrai accedere al codice Javascript dell'app (neanche alla versione minificata).
Puoi controllare se il bundle contiene bytecode Hermes eseguendo il seguente comando:
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96
Tuttavia, puoi utilizzare gli strumenti hbctool, hermes-dec o hermes_rs per disassemblare il bytecode e anche per decompilarlo in un codice JS pseudo. Per fare ciò, ad esempio, questi comandi:
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js
Modifica il codice e ricostruisci
Idealmente dovresti essere in grado di modificare il codice disassemblato (cambiando un confronto, un valore o qualsiasi cosa tu debba modificare) e poi ricostruire il bytecode e poi ricostruire l'app.
Lo strumento hbctool supporta il disassemblaggio del bundle e la ricostruzione dopo che sono state apportate le modifiche, tuttavia supporta solo versioni obsolete del bytecode di Hermes.
Lo strumento hermes-dec non supporta la ricostruzione del bytecode.
Lo strumento hermes_rs supporta la ricostruzione del bytecode, ma è in realtà una libreria e non uno strumento CLI.
Analisi Dinamica
Potresti provare ad analizzare dinamicamente l'app utilizzando Frida per abilitare la modalità sviluppatore dell'app React e utilizzare react-native-debugger
per collegarti ad essa. Tuttavia, per questo hai apparentemente bisogno del codice sorgente dell'app. Puoi trovare ulteriori informazioni su questo in https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/.
Riferimenti
- 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
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.