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

6 KiB

Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks:

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

Se você só tem o IPA do aplicativo ou simplesmente o aplicativo instalado em um dispositivo com jailbreak, normalmente não será possível encontrar arquivos .entitlements. Isso também pode acontecer com o arquivo embedded.mobileprovision. Ainda assim, você deve ser capaz de extrair as listas de propriedades de entitlements do binário do aplicativo por conta própria (o qual você obteve anteriormente, conforme explicado no capítulo "iOS Basic Security Testing", seção "Acquiring the App Binary").

Os seguintes passos devem funcionar mesmo quando direcionados a um binário criptografado. Se por algum motivo não funcionarem, você terá que descriptografar e extrair o aplicativo com, por exemplo, Clutch (se compatível com sua versão do iOS), frida-ios-dump ou similar.

Extraindo a Lista de Entitlements Plist do Binário do Aplicativo

Se você tem o binário do aplicativo em seu computador, uma abordagem é usar o binwalk para extrair (-e) todos os arquivos 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"

Ou você pode usar o radare2 (-qc para executar um comando silenciosamente e sair) para procurar todas as strings no binário do app (izz) que contenham "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>...

Nos dois casos (binwalk ou radare2), conseguimos extrair os mesmos dois arquivos plist. Se inspecionarmos o primeiro (0x0015d2a4), veremos que conseguimos recuperar completamente o arquivo de entitlements original do Telegram.

Nota: o comando strings não ajudará aqui, pois não será capaz de encontrar essa informação. Melhor usar grep com a flag -a diretamente no binário ou usar radare2 (izz)/rabin2 (-zz).

Se você acessar o binário do aplicativo em um dispositivo com jailbreak (por exemplo, via SSH), você pode usar grep com a flag -a, --text (trata todos os arquivos 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>
...

Brinque com a flag -A num, --after-context=num para exibir mais ou menos linhas. Você também pode usar ferramentas como as que apresentamos acima, se também as tiver instalado em seu dispositivo iOS com jailbreak.

Este método deve funcionar mesmo que o binário do aplicativo ainda esteja criptografado (foi testado contra vários aplicativos da App Store).

Aprenda hacking em AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Outras formas de apoiar o HackTricks: