hacktricks/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md
2023-08-03 19:12:22 +00:00

9.5 KiB
Raw Blame History

☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

UIActivity Sharing

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

可以在UIActivity.ActivityType中找到可用的内置共享机制的完整列表。如果对于应用程序来说不合适,开发人员可以排除其中一些共享机制

发送项目

在测试UIActivity共享时,应特别注意以下内容:

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

通过创建UIActivityViewController并将所需的项目URL、文本、图片传递给init(activityItems:applicationActivities:)来实现通过UIActivity共享数据。

如果有源代码,应查看UIActivityViewController

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

如果只有已编译/安装的应用程序,请尝试搜索上述方法和属性,例如:

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

接收项目

在接收项目时,您应该检查以下内容:

  • 如果应用程序通过查看Xcode项目的“Info”选项卡来声明自定义文档类型,则可以查看导出/导入UTIUniform Type Identifiers的列表。所有系统声明的UTI的列表可以在存档的Apple开发者文档中找到。
  • 如果应用程序通过查看Xcode项目的“Info”选项卡来指定其可以打开的任何文档类型,则应检查文档类型。如果存在它们由名称和一个或多个表示数据类型的UTI组成例如PNG文件的“public.png”。iOS使用此信息来确定应用程序是否有资格打开给定的文档仅指定导出/导入UTI是不够的
  • 如果应用程序通过查看应用程序委托中的application:openURL:options:(或其已弃用的版本UIApplicationDelegate application:openURL:sourceApplication:annotation:)来正确验证接收到的数据

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

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

关于使用这些键的非常详细的解释可以在Stackoverflow上找到,但这里有一个摘要:

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

动态测试

对于发送活动,您可以:

对于接收项目,您可以:

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

在此处阅读更多(英文)

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