mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
121 lines
9.9 KiB
Markdown
121 lines
9.9 KiB
Markdown
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
|
|
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|
|
|
|
|
|
Les liens universels permettent de **rediriger les utilisateurs directement** vers l'application sans passer par Safari pour la redirection.\
|
|
Les liens universels sont **uniques**, donc ils **ne peuvent pas être revendiqués par d'autres applications** car ils utilisent des liens HTTP(S) standard vers le **site web où le propriétaire a téléchargé un fichier pour s'assurer que le site web et l'application sont liés**.\
|
|
Comme ces liens utilisent des schémas HTTP(S), lorsque l'**application n'est pas installée, Safari ouvrira le lien** en redirigeant les utilisateurs vers la page. Cela permet aux **applications de communiquer avec l'application même si elle n'est pas installée**.
|
|
|
|
Pour créer des liens universels, il est nécessaire de **créer un fichier JSON appelé `apple-app-site-association`** avec les détails. Ensuite, ce fichier doit être **hébergé dans le répertoire racine de votre serveur web** (par exemple [https://google.com/apple-app-site-association](https://google.com/apple-app-site-association)).\
|
|
Pour le testeur de pénétration, ce fichier est très intéressant car il **dévoile les chemins**. Il peut même révéler des chemins de versions qui n'ont pas encore été publiées.
|
|
|
|
## **Vérification de l'attribution des domaines associés**
|
|
|
|
Dans Xcode, allez à l'onglet **Capabilities** et recherchez **Associated Domains**. Vous pouvez également inspecter le fichier `.entitlements` en recherchant `com.apple.developer.associated-domains`. Chacun des domaines doit être préfixé par `applinks:`, comme `applinks:www.mywebsite.com`.
|
|
|
|
Voici un exemple du fichier `.entitlements` de Telegram :
|
|
```markup
|
|
<key>com.apple.developer.associated-domains</key>
|
|
<array>
|
|
<string>applinks:telegram.me</string>
|
|
<string>applinks:t.me</string>
|
|
</array>
|
|
```
|
|
Des informations plus détaillées peuvent être trouvées dans la [Documentation archivée des développeurs Apple](https://developer.apple.com/library/archive/documentation/General/Conceptual/AppSearch/UniversalLinks.html#//apple_ref/doc/uid/TP40016308-CH12-SW2).
|
|
|
|
Si vous n'avez que l'application compilée, vous pouvez extraire les entitlements en suivant ce guide :
|
|
|
|
{% content-ref url="extracting-entitlements-from-compiled-application.md" %}
|
|
[extracting-entitlements-from-compiled-application.md](extracting-entitlements-from-compiled-application.md)
|
|
{% endcontent-ref %}
|
|
|
|
## Récupération du fichier Apple App Site Association
|
|
|
|
Essayez de récupérer le fichier `apple-app-site-association` depuis le serveur en utilisant les domaines associés que vous avez obtenus à partir de l'étape précédente. Ce fichier doit être accessible via HTTPS, sans redirection, à `https://<domain>/apple-app-site-association` ou `https://<domain>/.well-known/apple-app-site-association`.
|
|
|
|
Vous pouvez le récupérer vous-même avec votre navigateur ou utiliser le [validateur Apple App Site Association (AASA)](https://branch.io/resources/aasa-validator/).
|
|
|
|
## Vérification de la méthode de réception de lien
|
|
|
|
Afin de recevoir des liens et de les gérer de manière appropriée, le délégué de l'application doit implémenter [`application:continueUserActivity:restorationHandler:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623072-application). Si vous avez le projet original, essayez de rechercher cette méthode.
|
|
|
|
Veuillez noter que si l'application utilise [`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc) pour ouvrir un lien universel vers le site web de l'application, le lien ne s'ouvrira pas dans l'application. Comme l'appel provient de l'application, il ne sera pas géré comme un lien universel.
|
|
|
|
* Le schéma de `webpageURL` doit être HTTP ou HTTPS (tout autre schéma doit générer une exception). La propriété d'instance [`scheme`](https://developer.apple.com/documentation/foundation/urlcomponents/1779624-scheme) de `URLComponents` / `NSURLComponents` peut être utilisée pour vérifier cela.
|
|
|
|
## Vérification de la méthode de gestion de données
|
|
|
|
Lorsque iOS ouvre une application en tant que résultat d'un lien universel, l'application reçoit un objet `NSUserActivity` avec une valeur `activityType` de `NSUserActivityTypeBrowsingWeb`. La propriété `webpageURL` de l'objet d'activité contient l'URL HTTP ou HTTPS que l'utilisateur accède. L'exemple suivant en Swift vérifie exactement cela avant d'ouvrir l'URL :
|
|
```swift
|
|
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
|
|
}
|
|
```
|
|
De plus, n'oubliez pas que si l'URL contient des paramètres, ils ne doivent pas être considérés comme fiables avant d'être soigneusement nettoyés et validés (même s'ils proviennent d'un domaine de confiance). Par exemple, ils pourraient avoir été falsifiés par un attaquant ou pourraient inclure des données malformées. Si tel est le cas, l'ensemble de l'URL et donc la demande de lien universel doivent être rejetés.
|
|
|
|
L'API `NSURLComponents` peut être utilisée pour analyser et manipuler les composants de l'URL. Cela peut également faire partie de la méthode `application:continueUserActivity:restorationHandler:` elle-même ou peut être appelé à partir d'une méthode distincte. L'exemple suivant démontre cela: [example](https://developer.apple.com/documentation/uikit/core\_app/allowing\_apps\_and\_websites\_to\_link\_to\_your\_content/handling\_universal\_links#3001935).
|
|
```swift
|
|
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
|
|
}
|
|
}
|
|
```
|
|
# Références
|
|
|
|
{% embed url="https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#testing-object-persistence-mstg-platform-8" %}
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
- Travaillez-vous dans une entreprise de **cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
|
|
- Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
|
|
- Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
|
|
- **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
|
|
- **Partagez vos astuces de piratage en soumettant des PR au [repo hacktricks](https://github.com/carlospolop/hacktricks) et au [repo hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
|
|
|
|
</details>
|