hacktricks/mobile-pentesting/ios-pentesting/ios-universal-links.md

122 lines
8.5 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获取[**官方PEASS和HackTricks的衣物**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>
2023-08-03 19:12:22 +00:00
通用链接允许**直接将用户重定向**到应用程序而无需通过Safari进行重定向。\
通用链接是**唯一的**,因此它们**不能被其他应用程序占用**因为它们使用标准的HTTP(S)链接到**所有者上传文件的网站,以确保网站和应用程序相关**。\
由于这些链接使用HTTP(S)协议,当**应用程序未安装时Safari将打开链接**,将用户重定向到页面。这使得**应用程序可以与未安装的应用程序进行通信**。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
要创建通用链接,需要**创建一个名为`apple-app-site-association`的JSON文件**,其中包含详细信息。然后,将此文件**托管在您的Web服务器的根目录**中(例如[https://google.com/apple-app-site-association](https://google.com/apple-app-site-association))。\
对于渗透测试人员来说,这个文件非常有趣,因为它**公开了路径**。它甚至可以公开尚未发布的版本的路径。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
## **检查关联域权利**
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
在Xcode中转到**Capabilities**选项卡,搜索**关联域**。您还可以检查`.entitlements`文件,查找`com.apple.developer.associated-domains`。每个域名都必须以`applinks:`为前缀,例如`applinks:www.mywebsite.com`。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
以下是Telegram的`.entitlements`文件的示例:
2021-05-21 16:38:18 +00:00
```markup
2023-08-03 19:12:22 +00:00
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
2021-05-21 16:38:18 +00:00
```
2023-08-03 19:12:22 +00:00
更详细的信息可以在[存档的Apple开发者文档](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple\_ref/doc/uid/TP40016308-CH12-SW2)中找到。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
如果你只有编译后的应用程序,可以按照这个指南提取权限:
2021-05-21 16:38:18 +00:00
{% content-ref url="extracting-entitlements-from-compiled-application.md" %}
[extracting-entitlements-from-compiled-application.md](extracting-entitlements-from-compiled-application.md)
{% endcontent-ref %}
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
## **检索Apple App Site Association文件**
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
尝试使用前一步骤获取的关联域名从服务器检索`apple-app-site-association`文件。该文件需要通过HTTPS访问没有任何重定向位于`https://<domain>/apple-app-site-association`或`https://<domain>/.well-known/apple-app-site-association`。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
您可以使用浏览器自己检索,或使用[Apple App Site Association (AASA) Validator](https://branch.io/resources/aasa-validator/)。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
## **检查链接接收方法**
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
为了接收链接并适当处理它们,应用委托必须实现[`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application)方法。如果您有原始项目,请尝试搜索此方法。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
请注意,如果应用使用[`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc)打开通往应用网站的通用链接,链接将不会在应用中打开。由于调用源自应用,它不会被处理为通用链接。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
* `webpageURL`的方案必须是HTTP或HTTPS任何其他方案都应该抛出异常。可以使用`URLComponents` / `NSURLComponents`的[`scheme`实例属性](https://developer.apple.com/documentation/foundation/urlcomponents/1779624-scheme)来验证这一点。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
## **检查数据处理方法**
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
当iOS作为通用链接的结果打开应用时应用会收到一个`NSUserActivity`对象,其`activityType`值为`NSUserActivityTypeBrowsingWeb`。活动对象的`webpageURL`属性包含用户访问的HTTP或HTTPS URL。以下Swift示例在打开URL之前验证了这一点
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
2023-08-03 19:12:22 +00:00
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// ...
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
return true
2021-05-21 16:38:18 +00:00
}
```
2023-08-03 19:12:22 +00:00
此外请记住如果URL包含参数在进行仔细的清理和验证之前不应该信任它们即使来自可信域。例如它们可能已被攻击者伪造或者可能包含格式错误的数据。如果是这种情况整个URL以及通用链接请求必须被丢弃。
2021-05-21 16:38:18 +00:00
2023-08-03 19:12:22 +00:00
`NSURLComponents` API可用于解析和操作URL的组件。这也可以是`application:continueUserActivity:restorationHandler:`方法的一部分,或者可能在从该方法调用的单独方法中发生。以下[示例](https://developer.apple.com/documentation/uikit/core\_app/allowing\_apps\_and\_websites\_to\_link\_to\_your\_content/handling\_universal\_links#3001935)演示了这一点:
2021-05-21 16:38:18 +00:00
```swift
func application(_ application: UIApplication,
2023-08-03 19:12:22 +00:00
continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true),
let path = components.path,
let params = components.queryItems else {
return false
2021-05-21 16:38:18 +00:00
}
2023-08-03 19:12:22 +00:00
if let albumName = params.first(where: { $0.name == "albumname" })?.value,
let photoIndex = params.first(where: { $0.name == "index" })?.value {
// Interact with album name and photo index
return true
} else {
// Handle when album and/or album name or photo index missing
return false
}
}
```
# 参考资料
2021-05-21 16:38:18 +00:00
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
2021-05-21 16:38:18 +00:00
2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<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>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一家 **网络安全公司** 工作吗?你想在 HackTricks 中 **为你的公司做广告** 吗?或者你想获得 **PEASS 的最新版本或下载 HackTricks 的 PDF 版本** 吗?请查看 [**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家 [**NFTs**](https://opensea.io/collection/the-peass-family) 集合 [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获得 [**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者在 **Twitter****关注** 我 [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向 [hacktricks 仓库](https://github.com/carlospolop/hacktricks) 和 [hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud) 提交 PR 来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>