{% hint style="success" %} 学习与实践 AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ 学习与实践 GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持 HackTricks * 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)! * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 仓库提交 PR 来分享黑客技巧。
{% endhint %} 这是来自 [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/) 的相关信息摘要 ## 基本信息 自定义 URL 方案使应用能够使用自定义协议进行通信,详细信息见 [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1)。这些方案必须由应用声明,然后处理遵循这些方案的传入 URL。至关重要的是 **验证所有 URL 参数** 并 **丢弃任何格式不正确的 URL** 以防止通过此向量进行攻击。 给出了一个示例,其中 URI `myapp://hostname?data=123876123` 调用特定的应用操作。一个已知的漏洞出现在 Skype Mobile 应用中,它允许通过 `skype://` 协议进行未授权的呼叫操作。注册的方案可以在应用的 `Info.plist` 中的 `CFBundleURLTypes` 下找到。恶意应用可以通过重新注册 URI 来拦截敏感信息。 ### 应用查询方案注册 从 iOS 9.0 开始,要检查应用是否可用,`canOpenURL:` 需要在 `Info.plist` 中的 `LSApplicationQueriesSchemes` 下声明 URL 方案。这将应用可以查询的方案限制为 50,增强了隐私,防止了应用枚举。 ```xml LSApplicationQueriesSchemes url_scheme1 url_scheme2 ``` ### 测试 URL 处理和验证 开发者应检查源代码中的特定方法,以了解 URL 路径构造和验证,例如 `application:didFinishLaunchingWithOptions:` 和 `application:openURL:options:`。例如,Telegram 使用多种方法来打开 URL: ```swift func application(_ application: UIApplication, open url: URL, sourceApplication: String?) -> Bool { self.openUrl(url: url) return true } func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool { self.openUrl(url: url) return true } func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { self.openUrl(url: url) return true } func application(_ application: UIApplication, handleOpen url: URL) -> Bool { self.openUrl(url: url) return true } ``` ### 测试对其他应用的 URL 请求 像 `openURL:options:completionHandler:` 这样的方法对于打开 URL 以与其他应用交互至关重要。识别应用源代码中此类方法的使用对于理解外部通信至关重要。 ### 测试已弃用的方法 处理 URL 打开的已弃用方法,如 `application:handleOpenURL:` 和 `openURL:`,应被识别并审查其安全影响。 ### 模糊测试 URL 方案 模糊测试 URL 方案可以识别内存损坏漏洞。像 [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) 这样的工具可以通过打开具有不同有效负载的 URL 来自动化此过程,以监控崩溃,示例为 iGoat-Swift 应用中 URL 的操控: ```bash $ frida -U SpringBoard -l ios-url-scheme-fuzzing.js [iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}") Watching for crashes from iGoat... No logs were moved. Opened URL: iGoat://?contactNumber=0&message=0 ``` ## 参考文献 * [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0075/) {% hint style="success" %} 学习与实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ 学习与实践 GCP 黑客技术:[**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持 HackTricks * 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)! * **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **通过向** [**HackTricks**](https://github.com/carlospolop/hacktricks) 和 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 仓库提交 PR 来分享黑客技巧。
{% endhint %}