6.8 KiB
Sfruttare un'applicazione debuggabile
Impara l'hacking di AWS da zero a esperto con htARTE (HackTricks AWS Red Team Expert)!
Altri modi per supportare HackTricks:
- Se vuoi vedere la tua azienda pubblicizzata su HackTricks o scaricare HackTricks in PDF Controlla i PACCHETTI DI ABBONAMENTO!
- Ottieni il merchandising ufficiale di PEASS & HackTricks
- Scopri The PEASS Family, la nostra collezione di NFT esclusivi
- Unisciti al 💬 gruppo Discord o al gruppo Telegram o seguici su Twitter 🐦 @carlospolopm.
- Condividi i tuoi trucchi di hacking inviando PR ai repository GitHub di HackTricks e HackTricks Cloud.
Bypassare i controlli di root e debuggabilità
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'applicazione Android debuggabile e bypassare i controlli
Rendere l'applicazione debuggabile
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:
- Utilizzare il comando:
adb install <nome_applicazione>
.
- 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'applicazione in attesa di una connessione del debugger:
- Comando:
adb shell am setup-debug-app –w <nome_pacchetto>
. - Nota: Questo comando deve essere eseguito ogni volta prima di avviare l'applicazione per assicurarsi che attenda il debugger.
- Per la persistenza, utilizzare
adb shell am setup-debug-app –w -–persistent <nome_pacchetto>
. - Per rimuovere tutti i flag, utilizzare
adb shell am clear-debug-app <nome_pacchetto>
.
- Prepararsi per il debug in Android Studio:
- Navigare in Android Studio su File -> Apri profilo o APK.
- Aprire l'APK ricompilato.
- Impostare i punti di interruzione nei file Java chiave:
- Posizionare i punti di interruzione in
MainActivity.java
(specificamente nel metodoonCreate
),b.java
eContextWrapper.java
.
Bypassare i controlli
L'applicazione, in determinati punti, verificherà se è debuggabile e controllerà anche la presenza di binari che indicano un dispositivo con root. Il debugger può essere utilizzato per modificare le informazioni dell'applicazione, annullare il bit di debuggabilità e modificare i nomi dei binari cercati per bypassare questi controlli.
Per il controllo di debuggabilità:
- Modificare le impostazioni del flag:
- Nella sezione delle variabili della console del debugger, passare a:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Nota: La rappresentazione binaria di
flags = 814267974
è11000011100111011110
, che indica che il "Flag_debuggable" è attivo.
Questi passaggi assicurano collettivamente che l'applicazione possa essere debuggata e che determinati controlli di sicurezza possano essere bypassati utilizzando il debugger, facilitando un'analisi o una modifica più approfondita del comportamento dell'applicazione.
Il passaggio 2 prevede la modifica di un valore del flag a 814267972, che è rappresentato in binario come 110000101101000000100010100.
Sfruttare una vulnerabilità
È stata fornita una dimostrazione utilizzando un'applicazione 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.
Verifica della vulnerabilità
- L'applicazione è stata decompilata utilizzando
apktool
per accedere al fileAndroidManifest.xml
. - La presenza di
android_debuggable="true"
in AndroidManifest.xml indica che l'applicazione è debuggabile e suscettibile di essere sfruttata. - È importante notare che
apktool
viene utilizzato esclusivamente per verificare lo stato di debuggabilità senza modificare alcun codice.
Preparazione dell'ambiente
- Il processo ha coinvolto l'avvio di un emulatore, l'installazione dell'applicazione vulnerabile e l'utilizzo di
adb jdwp
per identificare le porte Dalvik VM in ascolto. - JDWP (Java Debug Wire Protocol) consente il debug di un'applicazione in esecuzione in una VM esponendo una porta univoca.
- È stato necessario l'inoltro delle porte per il debug remoto, seguito dall'attacco di JDB all'applicazione target.
Iniezione di codice in tempo di esecuzione
- Lo sfruttamento è stato effettuato impostando punti di interruzione e controllando il flusso dell'applicazione.
- Sono stati utilizzati comandi come
classes
emethods <nome_classe>
per scoprire la struttura dell'applicazione. - È stato impostato un punto di interruzione nel metodo
onClick
, e la sua esecuzione è stata controllata. - Sono stati utilizzati i comandi
locals
,next
eset
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
, modificando con successo l'output dell'applicazione in tempo reale.
Questo esempio ha dimostrato come il comportamento di un'applicazione debuggabile possa essere manipolato, evidenziando il potenziale per exploit più complessi come l'accesso alla shell sul dispositivo nel contesto dell'applicazione.