Objection Tutorial

Aprende a hackear AWS desde cero hasta convertirte en un experto con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers! ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!

Introducción

objection - Exploración móvil en tiempo de ejecución

Objection es un kit de herramientas de exploración móvil en tiempo de ejecución, impulsado por Frida. Fue construido con el objetivo de ayudar a evaluar aplicaciones móviles y su postura de seguridad sin la necesidad de un dispositivo móvil con jailbreak o rooteado.

Nota: Esto no es una forma de bypass de jailbreak / root. Al usar objection, sigues estando limitado por todas las restricciones impuestas por el sandbox aplicable que estás enfrentando.

Resumen

El objetivo de objection es permitir al usuario llamar a las principales acciones que ofrece Frida. De lo contrario, el usuario necesitará crear un script único para cada aplicación que desee probar.

Tutorial

Para este tutorial voy a utilizar el APK que puedes descargar aquí:

O desde su repositorio original (descargar app-release.apk)

Instalación

pip3 install objection

Conexión

Realiza una conexión ADB regular y inicia el servidor frida en el dispositivo (y verifica que frida esté funcionando tanto en el cliente como en el servidor).

Si estás utilizando un dispositivo con root, es necesario seleccionar la aplicación que deseas probar dentro de la opción --gadget. En este caso:

frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

Acciones Básicas

No se van a listar todos los comandos posibles de objeciones en este tutorial, solo los que he encontrado más útiles.

Entorno

Algunas informaciones interesantes (como contraseñas o rutas) podrían encontrarse dentro del entorno.

env

Información sobre Frida

frida

Subir/Descargar

file download <remote path> [<local path>]
file upload <local path> [<remote path>]

Importar script de frida

import <local path frida-script>

Anclaje SSL

android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Detección de root

android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Comando Exec

android shell_exec whoami

Capturas de pantalla

android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

Análisis estático convertido en dinámico

En una aplicación real, deberíamos conocer toda la información descubierta en esta parte antes de usar objection gracias al análisis estático. De todos modos, de esta manera quizás puedas ver algo nuevo ya que aquí solo tendrás una lista completa de clases, métodos y objetos exportados.

Esto también es útil si de alguna manera no puedes obtener algo de código fuente legible de la aplicación.

Listar actividades, receptores y servicios

android hooking list activities
android hooking list services
android hooking list receivers

Frida lanzará un error si no se encuentra ninguno

Obteniendo la actividad actual

android hooking get current_activity

Buscar Clases

Comencemos buscando clases dentro de nuestra aplicación

android hooking search classes asvid.github.io.fridaapp

Métodos de búsqueda de una clase

Ahora vamos a extraer los métodos dentro de la clase MainActivity:

android hooking search methods asvid.github.io.fridaapp MainActivity

Listar Métodos declarados de una clase con sus parámetros

Vamos a averiguar qué parámetros necesitan los métodos de la clase:

android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Listar clases

También puedes listar todas las clases que se cargaron dentro de la aplicación actual:

android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

Esto es muy útil si quieres enganchar el método de una clase y solo conoces el nombre de la clase. Puedes usar esta función para buscar qué módulo es dueño de la clase y luego enganchar su método.

Enganchar siendo fácil

Enganchar (observar) un método

Desde el código fuente de la aplicación sabemos que la función sum() de MainActivity se ejecuta cada segundo. Intentemos volcar toda la información posible cada vez que se llame a la función (argumentos, valor de retorno y backtrace):

android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Enganchar (observar) toda una clase

En realidad, encuentro todos los métodos de la clase MainActivity muy interesantes, vamos a engancharlos todos. Ten cuidado, esto podría crashear la aplicación.

android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

Si juegas con la aplicación mientras la clase está enganchada, verás cuándo se llama a cada función, sus argumentos y el valor de retorno.

Cambiar el valor de retorno booleano de una función

Desde el código fuente puedes ver que la función checkPin recibe un String como argumento y devuelve un booleano. Vamos a hacer que la función siempre devuelva true:

Ahora, si escribes algo en el cuadro de texto para el código PIN, verás que cualquier cosa es válida:

Instancias de Clase

Busca e imprime instancias en vivo de una clase Java específica, especificada por un nombre de clase completamente calificado. Out es el resultado de un intento de obtener un valor de cadena para una objeción descubierta que típicamente contendría valores de propiedad para el objeto.

android heap print_instances <class>

Almacenamiento de claves/Intents

Puedes jugar con el almacenamiento de claves e intents usando:

android keystore list
android intents launch_activity
android intent launch_service

Memoria

Volcado

memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Lista

memory list modules

En la parte inferior de la lista puedes ver frida:

Veamos qué está exportando frida:

Búsqueda/Escritura

También puedes buscar y escribir dentro de la memoria con objection:

memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)

SQLite

Puedes usar el comando sqlite para interactuar con bases de datos sqlite.

Exit

exit

Lo que echo de menos en Objection

  • Los métodos de enganche a veces hacen que la aplicación se bloquee (esto también se debe a Frida).

  • No puedes usar las instancias de las clases para llamar funciones de la instancia. Y no puedes crear nuevas instancias de clases y usarlas para llamar funciones.

  • No hay un atajo (como el de sslpinnin) para enganchar todos los métodos de cifrado comunes utilizados por la aplicación para ver texto cifrado, texto plano, claves, IV y algoritmos utilizados.

Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma de recompensas por errores premium creada por hackers, para hackers! Únete a nosotros en https://go.intigriti.com/hacktricks hoy, ¡y comienza a ganar recompensas de hasta $100,000!

Aprende a hackear AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización