Sfruttare un'applicazione debuggable
Reading time: 5 minutes
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.
Evitare controlli di root e debuggable
Questa sezione del post è un riassunto del post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Passaggi per rendere un'app Android debuggable e bypassare i controlli
Rendere l'app debuggable
Contenuto basato su https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Decompilare l'APK:
- Utilizzare lo strumento APK-GUI per decompilare l'APK.
- Nel file android-manifest, inserire
android:debuggable=true
per abilitare la modalità di debug. - Ricompilare, firmare e zipalignare l'applicazione modificata.
- Installare l'applicazione modificata:
- Usare il comando:
adb install <application_name>
.
- Recuperare il nome del pacchetto:
- Eseguire
adb shell pm list packages –3
per elencare le applicazioni di terze parti e trovare il nome del pacchetto.
- Impostare l'app per attendere la connessione del debugger:
- Comando:
adb shell am setup-debug-app –w <package_name>
. - Nota: Questo comando deve essere eseguito ogni volta prima di avviare l'applicazione per garantire che attenda il debugger.
- Per persistenza, utilizzare
adb shell am setup-debug-app –w -–persistent <package_name>
. - Per rimuovere tutti i flag, utilizzare
adb shell am clear-debug-app <package_name>
.
- Prepararsi per il debug in Android Studio:
- Navigare in Android Studio su File -> Open Profile or APK.
- Aprire l'APK ricompilato.
- Impostare i breakpoint nei file Java chiave:
- Posizionare i breakpoint in
MainActivity.java
(specificamente nel metodoonCreate
),b.java
eContextWrapper.java
.
Evitare i controlli
L'applicazione, in determinati punti, verificherà se è debuggable e controllerà anche i binari che indicano un dispositivo rootato. Il debugger può essere utilizzato per modificare le informazioni dell'app, disattivare il bit debuggable e alterare i nomi dei binari cercati per bypassare questi controlli.
Per il controllo debuggable:
- Modificare le impostazioni dei flag:
- Nella sezione variabili della console del debugger, navigare a:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Nota: La rappresentazione binaria di
flags = 814267974
è11000011100111011110
, indicando che il "Flag_debuggable" è attivo.
Questi passaggi garantiscono collettivamente che l'applicazione possa essere debuggata e che alcuni controlli di sicurezza possano essere bypassati utilizzando il debugger, facilitando un'analisi o una modifica più approfondita del comportamento dell'applicazione.
Il passaggio 2 comporta la modifica di un valore di flag a 814267972, che è rappresentato in binario come 110000101101000000100010100.
Sfruttare una vulnerabilità
È stata fornita una dimostrazione utilizzando un'app vulnerabile contenente un pulsante e un textview. Inizialmente, l'applicazione visualizza "Crack Me". L'obiettivo è modificare il messaggio da "Try Again" a "Hacked" durante l'esecuzione, senza modificare il codice sorgente.
Controllare la vulnerabilità
- L'applicazione è stata decompilata utilizzando
apktool
per accedere al fileAndroidManifest.xml
. - La presenza di
android_debuggable="true"
nell'AndroidManifest.xml indica che l'applicazione è debuggable e suscettibile di sfruttamento. - Vale la pena notare che
apktool
è impiegato esclusivamente per controllare lo stato debuggable senza alterare alcun codice.
Preparare la configurazione
- Il processo ha comportato l'avvio di un emulatore, l'installazione dell'app vulnerabile e l'uso di
adb jdwp
per identificare le porte Dalvik VM in ascolto. - Il JDWP (Java Debug Wire Protocol) consente il debug di un'applicazione in esecuzione in una VM esponendo una porta unica.
- Il port forwarding è stato necessario per il debug remoto, seguito dall'attacco di JDB all'applicazione target.
Iniettare codice durante l'esecuzione
- Lo sfruttamento è stato effettuato impostando breakpoint e controllando il flusso dell'applicazione.
- Comandi come
classes
emethods <class_name>
sono stati utilizzati per scoprire la struttura dell'applicazione. - Un breakpoint è stato impostato nel metodo
onClick
, e la sua esecuzione è stata controllata. - I comandi
locals
,next
eset
sono stati utilizzati per ispezionare e modificare le variabili locali, in particolare cambiando il messaggio "Try Again" in "Hacked". - Il codice modificato è stato eseguito utilizzando il comando
run
, alterando con successo l'output dell'applicazione in tempo reale.
Questo esempio ha dimostrato come il comportamento di un'applicazione debuggable possa essere manipolato, evidenziando il potenziale per exploit più complessi come ottenere accesso shell sul dispositivo nel contesto dell'applicazione.
Riferimenti
- https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
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.