hacktricks/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md

6 KiB

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

Otras formas de apoyar a HackTricks:

Página copiada de https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#universal-links

Si solo tienes el IPA de la aplicación o simplemente la aplicación instalada en un dispositivo con jailbreak, normalmente no podrás encontrar archivos .entitlements. Esto también podría ser el caso para el archivo embedded.mobileprovision. Sin embargo, deberías poder extraer las listas de propiedades de los entitlements del binario de la aplicación por ti mismo (que previamente has obtenido como se explica en el capítulo "Pruebas de Seguridad Básicas en iOS", sección "Adquisición del Binario de la Aplicación").

Los siguientes pasos deberían funcionar incluso al apuntar a un binario encriptado. Si por alguna razón no funcionan, tendrás que desencriptar y extraer la aplicación con, por ejemplo, Clutch (si es compatible con tu versión de iOS), frida-ios-dump o similar.

Extrayendo la Lista de Entitlements del Binario de la Aplicación

Si tienes el binario de la aplicación en tu computadora, un enfoque es usar binwalk para extraer (-e) todos los archivos XML (-y=xml):

$ binwalk -e -y=xml ./Telegram\ X

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
1430180       0x15D2A4        XML document, version: "1.0"
1458814       0x16427E        XML document, version: "1.0"

O puedes usar radare2 (-qc para ejecutar un comando silenciosamente y salir) para buscar todas las cadenas en el binario de la app (izz) que contengan "PropertyList" (~PropertyList):

$ r2 -qc 'izz~PropertyList' ./Telegram\ X

0x0015d2a4 ascii <?xml version="1.0" encoding="UTF-8" standalone="yes"?>\n<!DOCTYPE plist PUBLIC
"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">
...<key>com.apple.security.application-groups</key>\n\t\t<array>
\n\t\t\t<string>group.ph.telegra.Telegraph</string>...

0x0016427d ascii H<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC
"-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">\n
<dict>\n\t<key>cdhashes</key>...

En ambos casos (binwalk o radare2) pudimos extraer los mismos dos archivos plist. Si inspeccionamos el primero (0x0015d2a4) vemos que pudimos recuperar completamente el archivo de entitlements original de Telegram.

Nota: el comando strings no ayudará aquí ya que no podrá encontrar esta información. Es mejor usar grep con la bandera -a directamente en el binario o usar radare2 (izz)/rabin2 (-zz).

Si accedes al binario de la app en el dispositivo con jailbreak (por ejemplo, vía SSH), puedes usar grep con la bandera -a, --text (trata todos los archivos como texto ASCII):

$ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/
15E6A58F-1CA7-44A4-A9E0-6CA85B65FA35/Telegram X.app/Telegram\ X

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
...

Juega con la bandera -A num, --after-context=num para mostrar más o menos líneas. También puedes usar herramientas como las que presentamos anteriormente, si también las tienes instaladas en tu dispositivo iOS con jailbreak.

Este método debería funcionar incluso si el binario de la aplicación aún está cifrado (se probó contra varias aplicaciones de la App Store).

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

Otras formas de apoyar a HackTricks: