9.9 KiB
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud no github.
Compartilhamento UIActivity
A partir do iOS 6, é possível para aplicativos de terceiros compartilhar dados (itens) através de mecanismos específicos como o AirDrop, por exemplo. Do ponto de vista do usuário, essa funcionalidade é a conhecida folha de atividade de compartilhamento do sistema que aparece após clicar no botão "Compartilhar".
Uma lista completa dos mecanismos de compartilhamento integrados disponíveis pode ser encontrada em UIActivity.ActivityType. Se não considerados apropriados para o aplicativo, os desenvolvedores têm a possibilidade de excluir alguns desses mecanismos de compartilhamento.
Enviando Itens
Ao testar o Compartilhamento UIActivity
, você deve prestar atenção especial a:
- os dados (itens) sendo compartilhados,
- as atividades personalizadas,
- os tipos de atividade excluídos.
O compartilhamento de dados via UIActivity
funciona criando um UIActivityViewController
e passando a ele os itens desejados (URLs, texto, uma imagem) em init(activityItems:applicationActivities:)
.
Se tiver o código-fonte, você deve examinar o UIActivityViewController
:
- Inspecione as atividades passadas para o método
init(activityItems:applicationActivities:)
. - Verifique se ele define atividades personalizadas (também sendo passadas para o método anterior).
- Verifique os
excludedActivityTypes
, se houver.
Se você só tem o aplicativo compilado/instalado, tente procurar pelo método e propriedade anteriores, por exemplo:
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
Recebendo Itens
Ao receber itens, você deve verificar:
- se o aplicativo declara tipos de documentos personalizados ao olhar para Exported/Imported UTIs (aba "Info" do projeto Xcode). A lista de todos os UTIs declarados pelo sistema (Uniform Type Identifiers) pode ser encontrada na documentação arquivada da Apple Developer.
- se o aplicativo especifica quaisquer tipos de documentos que ele pode abrir ao olhar para Document Types (aba "Info" do projeto Xcode). Se presentes, eles consistem em um nome e um ou mais UTIs que representam o tipo de dado (por exemplo, "public.png" para arquivos PNG). O iOS usa isso para determinar se o aplicativo é elegível para abrir um determinado documento (especificar Exported/Imported UTIs não é suficiente).
- se o aplicativo verifica adequadamente os dados recebidos ao olhar para a implementação de
application:openURL:options:
(ou sua versão obsoletaUIApplicationDelegate application:openURL:sourceApplication:annotation:
) no app delegate.
Se não tiver o código-fonte, você ainda pode olhar para o arquivo Info.plist
e procurar por:
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
se o aplicativo declara tipos de documentos personalizados exportados/importados.CFBundleDocumentTypes
para ver se o aplicativo especifica quaisquer tipos de documentos que ele pode abrir.
Uma explicação muito completa sobre o uso dessas chaves pode ser encontrada no Stackoverflow, mas aqui está um resumo:
UTExportedTypeDeclarations
: Use-os para definir seus próprios UTIs que seu aplicativo deseja ensinar ao sistema onde está instalado. Um UTI descreve um pedaço de dado (não necessariamente dados localizados dentro de um arquivo!) e requer pelo menos um identificador (com.example.MyCoolDataType
). Adicionalmente, pode ter um nome (My Cool Data Type
), uma ou mais extensões de nome de arquivo (.myCoolDataType
), um ou mais tipos MIME (x-application/my-cool-data-type
), um ou mais tipos de prancheta (usados ao transferir dados desse tipo usando copiar&colar), e um ou mais tipos de sistema operacional legado. Geralmente, você também quer que os UTIs estejam em conformidade com UTIs existentes (por exemplo, quando você diz que seu UTI está em conformidade compublic.data
, qualquer processo que possa lidar com dados genéricos também pode lidar com seu UTI).- Exemplo: Você define seu próprio formato de dados de arquivo proprietário e deseja que esse formato de dados também seja conhecido por outros aplicativos, plugins, extensões e assim por diante.
UTImportedTypeDeclarations
: Você usaUTImportedTypeDeclarations
para ensinar o sistema sobre UTIs que você quer que sejam conhecidos no sistema, mas que não são seus UTIs.- Exemplo: Seu aplicativo é capaz de ler o formato de dados proprietário de outro aplicativo, mas você não sabe se esse aplicativo está instalado no sistema.
CFBundleDocumentTypes
: Você usaCFBundleDocumentTypes
para informar ao sistema quais tipos de documentos seu aplicativo é capaz de abrir. A menos que você também liste seus UTIs aqui, esses UTIs não são associados ao seu aplicativo no Finder e seu aplicativo não aparecerá no menuAbrir Com >
.
A única coisa que você sempre deve definir para um tipo de documento é o papel. O papel pode ser "Visualizador" (você pode exibir esse tipo de arquivo, mas não pode editá-lo), "Editor" (você pode exibir e editar esse tipo de arquivo), "Nenhum" (não está especificado o que você pode fazer com esse arquivo).- Exemplo: Você quer que seu aplicativo seja associado a certos tipos de arquivos, identificados por extensão, tipo MIME ou identificador UTI. Se você quer que seu aplicativo seja associado a um tipo de UTI, o aplicativo deve importar ou exportar o tipo, caso contrário, o tipo pode não ser conhecido pelo sistema e registrar um tipo de UTI desconhecido simplesmente não tem efeito algum.
Teste Dinâmico
Para atividades de envio, você pode:
- Intercepte o método que vimos na análise estática (
init(activityItems:applicationActivities:)
) para obter osactivityItems
eapplicationActivities
. - Descubra as atividades excluídas interceptando a propriedade
excludedActivityTypes
.
Para receber itens, você pode:
- Compartilhar um arquivo com o aplicativo a partir de outro aplicativo ou enviá-lo via AirDrop ou e-mail. Escolha o arquivo de forma que ele acione o diálogo "Abrir com..." (ou seja, não há um aplicativo padrão que abrirá o arquivo, um PDF, por exemplo).
- Intercepte
application:openURL:options:
e quaisquer outros métodos que foram identificados em uma análise estática anterior. - Observe o comportamento do aplicativo.
- Além disso, você poderia enviar arquivos específicos malformados e/ou usar uma técnica de fuzzing.
Leia como aqui.
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras maneiras de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o merchandising oficial do PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga me no Twitter 🐦 @carlospolopm.
- Compartilhe suas dicas de hacking enviando PRs para os repositórios do HackTricks e HackTricks Cloud no github.