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

6 KiB
Raw Blame History

iOS通用链接

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持HackTricks的其他方式

介绍

通用链接通过直接在应用中打开内容绕过Safari重定向的需求为用户提供了无缝重定向体验。这些链接是独特且安全的,因为其他应用无法声明它们。这是通过在网站的根目录上托管apple-app-site-association JSON文件来实现的建立了网站和应用之间可验证的链接。在应用未安装的情况下Safari将接管并将用户重定向到网页保持应用的存在。

对于渗透测试人员,apple-app-site-association文件尤为重要,因为它可能会揭示敏感路径,可能包括与未发布功能相关的路径。

分析关联域权利

开发人员通过在Xcode的功能选项卡中配置关联域或检查.entitlements文件来启用通用链接。每个域名都以applinks:为前缀。例如Telegram的配置可能如下所示

<key>com.apple.developer.associated-domains</key>
<array>
<string>applinks:telegram.me</string>
<string>applinks:t.me</string>
</array>

获取苹果应用网站关联文件

应从服务器使用在授权中指定的域检索apple-app-site-association文件。确保文件可以通过HTTPS直接访问网址为https://<domain>/apple-app-site-association。工具如Apple App Site Association (AASA) Validator可帮助完成此过程。

处理应用中的通用链接

应用必须实现特定方法来正确处理通用链接。要查找的主要方法是application:continueUserActivity:restorationHandler:。处理的URL方案必须是HTTP或HTTPS其他方案将不受支持。

验证数据处理方法

当通用链接打开应用时,将通过NSUserActivity对象将URL传递给应用。在处理此URL之前必须验证和清理它以防止安全风险。以下是用Swift示例演示此过程

func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// Check for web browsing activity and valid URL
if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {
application.open(url, options: [:], completionHandler: nil)
}

return true
}

URL应该被仔细解析和验证特别是如果它们包含参数以防止潜在的欺骗或格式不正确的数据。NSURLComponents API对于这个目的非常有用如下所示

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 {
// Process the URL with album name and photo index

return true

} else {
// Handle invalid or missing parameters

return false
}
}

通过勤奋的配置和验证,开发人员可以确保通用链接提升用户体验的同时保持安全和隐私标准。

参考资料

从零开始学习AWS黑客技术成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式