hacktricks/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md
2023-06-06 18:56:34 +00:00

5.4 KiB

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

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 poderá encontrar arquivos .entitlements. Isso também pode ser o caso do arquivo embedded.mobileprovision. Ainda assim, você deve ser capaz de extrair as listas de propriedades de direitos do aplicativo binário (que você obteve anteriormente, conforme explicado no capítulo "Teste de segurança básica do iOS", seção "Obtendo o binário do aplicativo").

As seguintes etapas devem funcionar mesmo ao direcionar um binário criptografado. Se, por algum motivo, eles 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 propriedades de direitos do aplicativo binário

Se você tiver 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 silenciosamente um comando e sair) para pesquisar todas as strings no binário do aplicativo (izz) contendo "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>...

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

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

Se você acessar o binário do aplicativo no dispositivo com jailbreak (por exemplo, via SSH), pode usar o grep com a opção -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 tiverem sido instaladas em seu dispositivo iOS com jailbreak.

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