hacktricks/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md

8.8 KiB
Raw Blame History

从零到英雄学习AWS黑客攻击技巧 htARTE (HackTricks AWS Red Team Expert)

支持HackTricks的其他方式

UIActivity分享

从iOS 6开始第三方应用可以通过特定机制例如AirDrop 分享数据(项目)。从用户的角度来看这个功能是众所周知的系统级别的_分享活动表_在点击“分享”按钮后出现。

完整的内置分享机制列表可以在UIActivity.ActivityType中找到。如果认为这些分享机制不适合应用,开发者可以选择排除一些分享机制

发送项目

在测试UIActivity分享时,您应该特别注意:

  • 被分享的数据(项目),
  • 自定义活动,
  • 被排除的活动类型。

通过UIActivity分享数据的工作原理是创建一个UIActivityViewController并传递所需的项目URLs, 文本, 图片)到init(activityItems:applicationActivities:)

如果有源代码,您应该查看UIActivityViewController

  • 检查传递给init(activityItems:applicationActivities:)方法的活动。
  • 检查是否定义了自定义活动(也传递给前面的方法)。
  • 验证excludedActivityTypes,如果有的话。

如果您只有编译/安装的应用,请尝试搜索前面的方法和属性,例如:

$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:

接收项目

在接收项目时,您应该检查:

  • 应用程序是否通过查看 Exported/Imported UTIsXcode 项目的 "Info" 标签)声明自定义文档类型。所有系统声明的 UTIs统一类型标识符列表可以在存档的 Apple 开发者文档中找到。
  • 应用程序是否通过查看 Document TypesXcode 项目的 "Info" 标签指定了它可以打开的_文档类型_。如果存在它们由名称和一个或多个代表数据类型的 UTIs 组成(例如,"public.png" 用于 PNG 文件。iOS 使用此信息来确定应用程序是否有资格打开给定的文档(仅指定 Exported/Imported UTIs 是不够的)。
  • 应用程序是否通过查看应用程序委托中的 application:openURL:options:(或其已弃用的版本 UIApplicationDelegate application:openURL:sourceApplication:annotation:正确验证接收到的数据

如果没有源代码,您仍然可以查看 Info.plist 文件并搜索:

  • UTExportedTypeDeclarations/UTImportedTypeDeclarations,如果应用程序声明了导出/导入的_自定义文档类型_。
  • CFBundleDocumentTypes查看应用程序是否指定了它可以打开的_文档类型_。

关于这些键的使用的非常完整的解释可以在 Stackoverflow 上找到,但这里有一个总结:

  • UTExportedTypeDeclarations:使用它们来定义您的应用程序希望教给系统的您自己的 UTIsUTI 描述了一段数据不一定是位于文件内的数据!),至少需要一个标识符com.example.MyCoolDataType)。此外,它可能有一个名称My Cool Data Type),一个或多个文件名扩展名.myCoolDataType),一个或多个MIME 类型x-application/my-cool-data-type),一个或多个剪贴板 类型(在使用复制&粘贴传输该类数据时使用),以及一个或多个传统操作系统类型。通常,您还希望 UTIs 遵循现有的 UTIs例如当您说您的 UTI 遵循 public.data 时,任何可以处理通用数据的进程也可以处理您的 UTI
  • 例如:您定义了自己的专有文件数据格式,并希望其他应用程序、插件、扩展等也知道这种数据格式。
  • UTImportedTypeDeclarations:您使用 UTImportedTypeDeclarations教给系统您希望在系统中已知但不是您的 UTIs
  • 例如:您的应用程序能够读取另一个应用程序的专有数据格式,但您不知道该应用程序是否甚至安装在系统上。
  • CFBundleDocumentTypes:您使用 CFBundleDocumentTypes 来告诉系统您的应用程序能够打开哪些文档类型。除非您还在这里列出您的 UTIs,否则这些 UTIs 不会与您的应用程序关联在 Finder 中,您的应用程序不会出现在 Open With > 菜单中。
    您必须为文档类型设置的唯一事情是角色。角色可以是“Viewer”(您可以显示该文件类型,但不能编辑它),“Editor”(您可以显示和编辑该文件类型),“None”(未指定您可以对该文件做什么)。
  • 例如:您希望您的应用程序与某些文件类型关联无论是通过扩展名、MIME 类型还是 UTI 标识符来识别。如果您希望您的应用程序与 UTI 类型关联,应用程序应该导入或导出该类型,否则该类型可能不为系统所知,注册未知 UTI 类型根本没有效果。

动态测试

对于发送活动,您可以:

对于接收项目,您可以:

  • 通过另一个应用程序与该应用程序_分享_文件或通过 AirDrop 或电子邮件发送。选择文件以触发“打开方式...”对话框(即,没有默认应用程序会打开该文件,例如 PDF
  • Hook application:openURL:options: 和之前静态分析中识别的任何其他方法。
  • 观察应用程序行为。
  • 此外,您可以发送特定的畸形文件和/或使用模糊测试技术。

阅读如何 在这里

从零到英雄学习 AWS 黑客攻击,使用 htARTE (HackTricks AWS Red Team Expert)

支持 HackTricks 的其他方式: