hacktricks/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

92 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Explotando una aplicación depurable
{{#include ../../banners/hacktricks-training.md}}
# **Evitando verificaciones de root y depurabilidad**
Esta sección de la publicación es un resumen de la publicación [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
## Pasos para hacer que una aplicación de Android sea depurable y evitar verificaciones
### **Haciendo la aplicación depurable**
Contenido basado en https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
1. **Descompilar el APK:**
- Utiliza la herramienta APK-GUI para descompilar el APK.
- En el archivo _android-manifest_, inserta `android:debuggable=true` para habilitar el modo de depuración.
- Vuelve a compilar, firmar y zipalign la aplicación modificada.
2. **Instalar la aplicación modificada:**
- Usa el comando: `adb install <application_name>`.
3. **Recuperar el nombre del paquete:**
- Ejecuta `adb shell pm list packages 3` para listar aplicaciones de terceros y encontrar el nombre del paquete.
4. **Configurar la aplicación para esperar la conexión del depurador:**
- Comando: `adb shell am setup-debug-app w <package_name>`.
- **Nota:** Este comando debe ejecutarse cada vez antes de iniciar la aplicación para asegurarse de que espera al depurador.
- Para persistencia, usa `adb shell am setup-debug-app w -persistent <package_name>`.
- Para eliminar todas las banderas, usa `adb shell am clear-debug-app <package_name>`.
5. **Preparar para la depuración en Android Studio:**
- Navega en Android Studio a _File -> Open Profile or APK_.
- Abre el APK recompilado.
6. **Establecer puntos de interrupción en archivos Java clave:**
- Coloca puntos de interrupción en `MainActivity.java` (específicamente en el método `onCreate`), `b.java` y `ContextWrapper.java`.
### **Evitando verificaciones**
La aplicación, en ciertos puntos, verificará si es depurable y también comprobará los binarios que indican un dispositivo rooteado. El depurador se puede usar para modificar la información de la aplicación, desactivar el bit de depurabilidad y alterar los nombres de los binarios buscados para evitar estas verificaciones.
Para la verificación de depurabilidad:
1. **Modificar la configuración de la bandera:**
- En la sección de variables de la consola del depurador, navega a: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- **Nota:** La representación binaria de `flags = 814267974` es `11000011100111011110`, lo que indica que la "Flag_debuggable" está activa.
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
Estos pasos aseguran colectivamente que la aplicación se pueda depurar y que ciertas verificaciones de seguridad se puedan evitar utilizando el depurador, facilitando un análisis o modificación más profundo del comportamiento de la aplicación.
El paso 2 implica cambiar un valor de bandera a 814267972, que se representa en binario como 110000101101000000100010100.
# **Explotando una vulnerabilidad**
Se proporcionó una demostración utilizando una aplicación vulnerable que contiene un botón y un textview. Inicialmente, la aplicación muestra "Crack Me". El objetivo es alterar el mensaje de "Try Again" a "Hacked" en tiempo de ejecución, sin modificar el código fuente.
## **Verificando la vulnerabilidad**
- La aplicación fue descompilada usando `apktool` para acceder al archivo `AndroidManifest.xml`.
- La presencia de `android_debuggable="true"` en el AndroidManifest.xml indica que la aplicación es depurable y susceptible a explotación.
- Vale la pena señalar que `apktool` se emplea únicamente para verificar el estado de depurabilidad sin alterar ningún código.
## **Preparando la configuración**
- El proceso implicó iniciar un emulador, instalar la aplicación vulnerable y usar `adb jdwp` para identificar los puertos de Dalvik VM que están escuchando.
- El JDWP (Java Debug Wire Protocol) permite depurar una aplicación que se ejecuta en una VM al exponer un puerto único.
- Se necesitó el reenvío de puertos para la depuración remota, seguido de la conexión de JDB a la aplicación objetivo.
## **Inyectando código en tiempo de ejecución**
- La explotación se llevó a cabo estableciendo puntos de interrupción y controlando el flujo de la aplicación.
- Se utilizaron comandos como `classes` y `methods <class_name>` para descubrir la estructura de la aplicación.
- Se estableció un punto de interrupción en el método `onClick`, y se controló su ejecución.
- Se utilizaron los comandos `locals`, `next` y `set` para inspeccionar y modificar variables locales, particularmente cambiando el mensaje "Try Again" a "Hacked".
- El código modificado se ejecutó utilizando el comando `run`, alterando con éxito la salida de la aplicación en tiempo real.
Este ejemplo demostró cómo se puede manipular el comportamiento de una aplicación depurable, destacando el potencial para explotaciones más complejas, como obtener acceso a la shell en el dispositivo en el contexto de la aplicación.
## Referencias
- [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](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](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
{{#include ../../banners/hacktricks-training.md}}