7.6 KiB
零基础学习AWS黑客攻击直至成为专家,通过 htARTE (HackTricks AWS 红队专家)!
支持HackTricks的其他方式:
- 如果您想在 HackTricks中看到您的公司广告 或 下载HackTricks的PDF版本,请查看订阅计划!
- 获取 官方PEASS & HackTricks商品
- 发现 PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上 关注 我 @carlospolopm.
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
通用链接允许直接将用户重定向到应用程序,无需经过Safari进行重定向。
通用链接是独一无二的,因此其他应用无法认领,因为它们使用标准的HTTP(S)链接到网站,网站所有者已上传文件以确保网站和应用程序相关。
由于这些链接使用HTTP(S)方案,当应用未安装时,Safari将打开链接,将用户重定向到页面。这允许应用程序即使未安装也能与应用程序通信。
要创建通用链接,需要创建一个名为apple-app-site-association
的JSON文件,并填写详细信息。然后,需要将此文件托管在您的Web服务器的根目录中(例如https://google.com/apple-app-site-association)。
对于渗透测试人员来说,这个文件非常有趣,因为它泄露了路径。它甚至可能泄露尚未发布的版本的路径。
检查关联域名权限
在Xcode中,转到功能标签并搜索关联域名。您也可以检查.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>
更多详细信息可以在存档的苹果开发者文档中找到。
如果您只有编译后的应用程序,您可以按照以下指南提取权限:
{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}
检索苹果应用站点关联文件
尝试使用您从上一步获取的关联域名从服务器检索apple-app-site-association
文件。这个文件需要通过HTTPS访问,地址为https://<domain>/apple-app-site-association
或 https://<domain>/.well-known/apple-app-site-association
,且不经过任何重定向。
您可以使用浏览器自行检索,或使用苹果应用站点关联(AASA)验证器。
检查链接接收方法
为了接收链接并适当处理,应用代理必须实现application:continueUserActivity:restorationHandler:
方法。如果您有原始项目,请尝试搜索此方法。
请注意,如果应用使用openURL:options:completionHandler:
打开到应用网站的通用链接,链接不会在应用中打开。由于调用来自应用,它不会被作为通用链接处理。
webpageURL
的方案必须是HTTP或HTTPS(任何其他方案应该抛出异常)。可以使用URLComponents
/NSURLComponents
的scheme
实例属性来验证这一点。
检查数据处理方法
当iOS因通用链接打开应用时,应用会收到一个带有NSUserActivityTypeBrowsingWeb
值的NSUserActivity
对象。活动对象的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" %}
通过 htARTE (HackTricks AWS Red Team Expert)从零开始学习AWS黑客技术!
支持HackTricks的其他方式:
- 如果您希望在HackTricks中看到您的公司广告或下载HackTricks的PDF版本,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 探索PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组或telegram群组或在Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。