mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
99 lines
9.5 KiB
Markdown
99 lines
9.5 KiB
Markdown
<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>
|