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

99 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 你在**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**电报群组**](https://t.me/peass) 或 **关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
</details>
# UIActivity Sharing
从iOS 6开始第三方应用可以通过特定机制例如AirDrop共享数据项目。从用户的角度来看这个功能是众所周知的系统级“共享活动表”在点击“分享”按钮后出现。
可以在[UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype)中找到可用的内置共享机制的完整列表。如果对于应用程序来说不合适,**开发人员可以排除其中一些共享机制**。
## **发送项目**
在测试`UIActivity`共享时,应特别注意以下内容:
* 被共享的数据(项目),
* 自定义活动,
* 排除的活动类型。
通过创建`UIActivityViewController`并将所需的项目URL、文本、图片传递给[`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init)来实现通过`UIActivity`共享数据。
如果有源代码,应查看`UIActivityViewController`
* 检查传递给`init(activityItems:applicationActivities:)`方法的活动。
* 检查是否定义了自定义活动(也传递给上述方法)。
* 验证`excludedActivityTypes`,如果有的话。
如果只有已编译/安装的应用程序,请尝试搜索上述方法和属性,例如:
```bash
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
```
## **接收项目**
在接收项目时,您应该检查以下内容:
* 如果应用程序通过查看Xcode项目的“Info”选项卡来**声明自定义文档类型**,则可以查看**导出/导入UTI**Uniform Type Identifiers的列表。所有系统声明的UTI的列表可以在[存档的Apple开发者文档](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259)中找到。
* 如果应用程序通过查看Xcode项目的“Info”选项卡来**指定其可以打开的任何文档类型**,则应检查**文档类型**。如果存在它们由名称和一个或多个表示数据类型的UTI组成例如PNG文件的“public.png”。iOS使用此信息来确定应用程序是否有资格打开给定的文档仅指定导出/导入UTI是不够的
* 如果应用程序通过查看应用程序委托中的[`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc)(或其已弃用的版本[`UIApplicationDelegate application:openURL:sourceApplication:annotation:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application?language=objc))来**正确验证接收到的数据**。
如果没有源代码,您仍然可以查看`Info.plist`文件并搜索以下内容:
* 如果应用程序声明了导出/导入的**自定义文档类型**,则可以查看`UTExportedTypeDeclarations`/`UTImportedTypeDeclarations`。
* 如果应用程序指定了其可以打开的**文档类型**,则可以查看`CFBundleDocumentTypes`。
关于使用这些键的非常详细的解释可以在[Stackoverflow](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i)上找到,但这里有一个摘要:
* `UTExportedTypeDeclarations`:用于定义应用程序希望教给安装在系统上的系统的**自定义UTI**。**UTI描述了一段数据**(不一定是文件内的数据!)并且至少需要一个**标识符**`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类型根本没有任何效果。
## 动态测试
对于**发送活动**,您可以:
* 钩取我们在静态分析中看到的方法([`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init))以获取`activityItems`和`applicationActivities`。
* 通过钩取[`excludedActivityTypes`属性](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622009-excludedactivitytypes)来找出被排除的活动类型。
对于接收项目,您可以:
* 从另一个应用程序或通过AirDrop或电子邮件与应用程序**共享**文件。选择文件以触发“打开方式…”对话框没有默认应用程序会打开文件例如PDF
* 钩取`application:openURL:options:`和之前静态分析中识别出的任何其他方法。
* 观察应用程序行为。
* 此外,您可以发送特定的格式错误文件和/或使用模糊测试技术。
**在此处阅读更多**[**(英文)**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#dynamic-analysis-8)**。**
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- 您在**网络安全公司**工作吗您想在HackTricks中看到您的公司广告吗或者您想获得PEASS的**最新版本或下载PDF格式的HackTricks**?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
- 发现我们的独家[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
- 获取[**官方PEASS和HackTricks衣物**](https://peass.creator-spring.com)
- **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或在**Twitter**上**关注**我[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧**。
</details>