8.5 KiB
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一个网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品The PEASS Family
-
加入 💬 Discord群组 或 telegram群组 或 关注我在Twitter上的🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
通用链接允许直接将用户重定向到应用程序,而无需通过Safari进行重定向。
通用链接是唯一的,因此它们不能被其他应用程序占用,因为它们使用标准的HTTP(S)链接到所有者上传文件的网站,以确保网站和应用程序相关。
由于这些链接使用HTTP(S)协议,当应用程序未安装时,Safari将打开链接,将用户重定向到页面。这使得应用程序可以与未安装的应用程序进行通信。
要创建通用链接,需要创建一个名为apple-app-site-association
的JSON文件,其中包含详细信息。然后,将此文件托管在您的Web服务器的根目录中(例如https://google.com/apple-app-site-association)。
对于渗透测试人员来说,这个文件非常有趣,因为它公开了路径。它甚至可以公开尚未发布的版本的路径。
检查关联域权利
在Xcode中,转到Capabilities选项卡,搜索关联域。您还可以检查.entitlements
文件,查找com.apple.developer.associated-domains
。每个域名都必须以applinks:
为前缀,例如applinks:www.mywebsite.com
。
以下是Telegram的.entitlements
文件的示例:
<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>
更详细的信息可以在存档的Apple开发者文档中找到。
如果你只有编译后的应用程序,可以按照这个指南提取权限:
{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}
检索Apple App Site Association文件
尝试使用前一步骤获取的关联域名从服务器检索apple-app-site-association
文件。该文件需要通过HTTPS访问,没有任何重定向,位于https://<domain>/apple-app-site-association
或https://<domain>/.well-known/apple-app-site-association
。
您可以使用浏览器自己检索,或使用Apple App Site Association (AASA) Validator。
检查链接接收方法
为了接收链接并适当处理它们,应用委托必须实现application:continueUserActivity:restorationHandler:
方法。如果您有原始项目,请尝试搜索此方法。
请注意,如果应用使用openURL:options:completionHandler:
打开通往应用网站的通用链接,链接将不会在应用中打开。由于调用源自应用,它不会被处理为通用链接。
webpageURL
的方案必须是HTTP或HTTPS(任何其他方案都应该抛出异常)。可以使用URLComponents
/NSURLComponents
的scheme
实例属性来验证这一点。
检查数据处理方法
当iOS作为通用链接的结果打开应用时,应用会收到一个NSUserActivity
对象,其activityType
值为NSUserActivityTypeBrowsingWeb
。活动对象的webpageURL
属性包含用户访问的HTTP或HTTPS URL。以下Swift示例在打开URL之前验证了这一点:
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// ...
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}
return true
}
此外,请记住,如果URL包含参数,在进行仔细的清理和验证之前,不应该信任它们(即使来自可信域)。例如,它们可能已被攻击者伪造,或者可能包含格式错误的数据。如果是这种情况,整个URL以及通用链接请求必须被丢弃。
NSURLComponents
API可用于解析和操作URL的组件。这也可以是application:continueUserActivity:restorationHandler:
方法的一部分,或者可能在从该方法调用的单独方法中发生。以下示例演示了这一点:
func application(_ application: UIApplication,
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
}
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
}
}
参考资料
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
☁️ HackTricks 云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家 网络安全公司 工作吗?你想在 HackTricks 中 为你的公司做广告 吗?或者你想获得 PEASS 的最新版本或下载 HackTricks 的 PDF 版本 吗?请查看 订阅计划!
-
发现我们的独家 NFTs 集合 The PEASS Family
-
加入 💬 Discord 群组 或 Telegram 群组,或者在 Twitter 上 关注 我 🐦@carlospolopm。
-
通过向 hacktricks 仓库 和 hacktricks-cloud 仓库 提交 PR 来分享你的黑客技巧。