10 KiB
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.
Partage UIActivity
À partir d'iOS 6, il est possible pour les applications tierces de partager des données (éléments) via des mécanismes spécifiques comme AirDrop, par exemple. Du point de vue de l'utilisateur, cette fonctionnalité est la bien connue feuille d'activité de partage accessible après avoir cliqué sur le bouton "Partager".
Une liste complète des mécanismes de partage intégrés disponibles peut être trouvée dans UIActivity.ActivityType. Si jugés inappropriés pour l'application, les développeurs ont la possibilité d'exclure certains de ces mécanismes de partage.
Envoi d'éléments
Lors du test du partage UIActivity
, vous devriez porter une attention particulière à :
- les données (éléments) partagées,
- les activités personnalisées,
- les types d'activités exclus.
Le partage de données via UIActivity
fonctionne en créant un UIActivityViewController
et en lui passant les éléments souhaités (URLs, texte, une image) sur init(activityItems:applicationActivities:)
.
Si vous avez le code source, vous devriez examiner le UIActivityViewController
:
- Inspectez les activités passées à la méthode
init(activityItems:applicationActivities:)
. - Vérifiez s'il définit des activités personnalisées (également passées à la méthode précédente).
- Vérifiez les
excludedActivityTypes
, le cas échéant.
Si vous n'avez que l'application compilée/installée, essayez de rechercher la méthode et la propriété précédentes, par exemple :
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
Réception d'éléments
Lors de la réception d'éléments, vous devez vérifier :
- si l'application déclare des types de documents personnalisés en consultant les UTIs Exportés/Importés (onglet "Info" du projet Xcode). La liste de tous les UTIs déclarés par le système (Uniform Type Identifiers) est disponible dans la documentation archivée d'Apple Developer.
- si l'application spécifie des types de documents qu'elle peut ouvrir en consultant les Types de Documents (onglet "Info" du projet Xcode). Si présents, ils se composent d'un nom et d'un ou plusieurs UTIs qui représentent le type de données (par exemple, "public.png" pour les fichiers PNG). iOS utilise cela pour déterminer si l'application est éligible pour ouvrir un document donné (spécifier des UTIs Exportés/Importés ne suffit pas).
- si l'application vérifie correctement les données reçues en examinant l'implémentation de
application:openURL:options:
(ou sa version obsolèteUIApplicationDelegate application:openURL:sourceApplication:annotation:
) dans le délégué de l'application.
Sans avoir le code source, vous pouvez toujours examiner le fichier Info.plist
et rechercher :
UTExportedTypeDeclarations
/UTImportedTypeDeclarations
si l'application déclare des types de documents personnalisés exportés/importés.CFBundleDocumentTypes
pour voir si l'application spécifie des types de documents qu'elle peut ouvrir.
Une explication très complète de l'utilisation de ces clés peut être trouvée sur Stackoverflow mais voici un résumé :
UTExportedTypeDeclarations
: Utilisez-les pour définir vos propres UTIs que votre application veut enseigner au système sur lequel elle est installée. Un UTI décrit un morceau de données (pas nécessairement des données situées dans un fichier !) et nécessite au moins un identifiant (com.example.MyCoolDataType
). De plus, il peut avoir un nom (My Cool Data Type
), une ou plusieurs extensions de nom de fichier (.myCoolDataType
), un ou plusieurs types MIME (x-application/my-cool-data-type
), un ou plusieurs types de presse-papiers (utilisés lors du transfert de données de ce type en utilisant copier&coller), et un ou plusieurs types OS hérités. Généralement, vous voulez aussi que les UTIs se conforment à des UTIs existants (par exemple, lorsque vous dites que votre UTI se conforme àpublic.data
, tout processus qui peut traiter des données génériques peut également traiter votre UTI).- Exemple : Vous définissez votre propre format de données de fichier propriétaire et vous voulez que ce format de données soit également connu des autres applications, plugins, extensions, etc.
UTImportedTypeDeclarations
: Vous utilisezUTImportedTypeDeclarations
pour enseigner au système des UTIs que vous voulez être connus dans le système mais qui ne sont pas vos UTIs.- Exemple : Votre application est capable de lire le format de données propriétaire d'une autre application, mais vous ne savez pas si cette application est même installée sur le système.
CFBundleDocumentTypes
: Vous utilisezCFBundleDocumentTypes
pour indiquer au système quels types de documents votre application est capable d'ouvrir. À moins que vous ne listiez également vos UTIs ici, ces UTIs ne sont pas associés à votre application dans le Finder et votre application n'apparaîtra pas dans le menuOuvrir avec >
.
La seule chose que vous devez toujours définir pour un type de document est le rôle. Le rôle peut être "Viewer" (vous pouvez afficher ce type de fichier mais vous ne pouvez pas le modifier), "Editor" (vous pouvez afficher et modifier ce type de fichier), "None" (il n'est pas spécifié ce que vous pouvez faire avec ce fichier).- Exemple : Vous voulez que votre application soit associée à certains types de fichiers, identifiés soit par extension, soit par type MIME, soit par identifiant UTI. Si vous voulez que votre application soit associée à un type UTI, l'application doit soit importer soit exporter le type, sinon le type peut ne pas être connu du système et l'enregistrement à un type UTI inconnu n'a tout simplement aucun effet.
Test Dynamique
Pour les activités d'envoi, vous pouvez :
- Intercepter la méthode que nous avons vue dans l'analyse statique (
init(activityItems:applicationActivities:)
) pour obtenir lesactivityItems
etapplicationActivities
. - Découvrir les activités exclues en interceptant la propriété
excludedActivityTypes
.
Pour la réception d'éléments, vous pouvez :
- Partager un fichier avec l'application depuis une autre application ou l'envoyer via AirDrop ou e-mail. Choisissez le fichier de manière à déclencher la boîte de dialogue "Ouvrir avec..." (c'est-à-dire qu'il n'y a pas d'application par défaut qui ouvrira le fichier, un PDF par exemple).
- Intercepter
application:openURL:options:
et toute autre méthode identifiée lors d'une analyse statique précédente. - Observer le comportement de l'application.
- De plus, vous pourriez envoyer des fichiers spécifiquement malformés et/ou utiliser une technique de fuzzing.
Lisez comment ici.
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens de soutenir HackTricks :
- Si vous voulez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.