7.8 KiB
Explotando una aplicación depurable
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repos de github.
Evitando verificaciones de root y depurables
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
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
- 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.
- Instalar la aplicación modificada:
- Usa el comando:
adb install <application_name>
.
- Recuperar el nombre del paquete:
- Ejecuta
adb shell pm list packages –3
para listar aplicaciones de terceros y encontrar el nombre del paquete.
- 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>
.
- Preparar para la depuración en Android Studio:
- Navega en Android Studio a File -> Open Profile or APK.
- Abre el APK recompilado.
- Establecer puntos de interrupción en archivos Java clave:
- Coloca puntos de interrupción en
MainActivity.java
(específicamente en el métodoonCreate
),b.java
yContextWrapper.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 depurable y alterar los nombres de los binarios buscados para evitar estas verificaciones.
Para la verificación depurable:
- 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
es11000011100111011110
, lo que indica que la "Flag_debuggable" está activa.
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 archivoAndroidManifest.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 depurable 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
ymethods <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
yset
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://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repos de github.