6 KiB
iOS通用链接
从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或 关注我们的Twitter 🐦 @carlospolopm。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
介绍
通用链接通过直接在应用中打开内容,绕过Safari重定向的需求,为用户提供了无缝重定向体验。这些链接是独特且安全的,因为其他应用无法声明它们。这是通过在网站的根目录上托管apple-app-site-association
JSON文件来实现的,建立了网站和应用之间可验证的链接。在应用未安装的情况下,Safari将接管并将用户引导到网页,保持应用的存在。
对于渗透测试人员,apple-app-site-association
文件尤为重要,因为它可能会揭示敏感路径,可能包括与未发布功能相关的路径。
分析关联域权利
开发人员通过在Xcode的Capabilities选项卡中配置关联域或检查.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
。工具如苹果应用网站关联(AASA)验证器可以帮助进行此过程。
处理应用中的通用链接
应用必须实现特定方法来正确处理通用链接。要查找的主要方法是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
}
URLs 应该被仔细解析和验证,特别是如果它们包含参数,以防止潜在的欺骗或格式不正确的数据。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
}
}
通过勤奋的配置和验证,开发人员可以确保通用链接提升用户体验的同时保持安全和隐私标准。
参考资料
- https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0070/#static-analysis
- https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8
从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!
支持HackTricks的其他方式:
- 如果您想看到您的公司在HackTricks中做广告或下载PDF格式的HackTricks,请查看订阅计划!
- 获取官方PEASS & HackTricks周边产品
- 探索PEASS家族,我们的独家NFTs
- 加入 💬 Discord群 或 电报群 或在Twitter 🐦 @carlospolopm上关注我们。
- 通过向HackTricks和HackTricks Cloud github仓库提交PR来分享您的黑客技巧。