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

14 KiB
Raw Blame History

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

Universal links का उपयोग करके सीधे उपयोगकर्ताओं को ऐप में रीडायरेक्ट किया जा सकता है, सफारी के माध्यम से रीडायरेक्शन के बिना।
Universal links अद्वितीय होते हैं, इसलिए उन्हें अन्य ऐप्स द्वारा दावा नहीं किया जा सकता क्योंकि वे मानक HTTP(S) लिंक्स का उपयोग करते हैं वेबसाइट पर जहां मालिक ने एक फाइल अपलोड की है ताकि यह सुनिश्चित किया जा सके कि वेबसाइट और ऐप संबंधित हैं
चूंकि ये लिंक HTTP(S) स्कीम्स का उपयोग करते हैं, जब ऐप इंस्टॉल नहीं होता है, सफारी लिंक खोलेगा उपयोगकर्ताओं को पेज पर रीडायरेक्ट करते हुए। यह ऐप्स को ऐप के साथ संवाद करने की अनुमति देता है भले ही वह इंस्टॉल न हो

Universal links बनाने के लिए apple-app-site-association नामक एक JSON फाइल बनाने की आवश्यकता होती है जिसमें विवरण होते हैं। फिर इस फाइल को आपके वेबसर्वर की रूट डायरेक्टरी में होस्ट किया जाना चाहिए (उदाहरण के लिए https://google.com/apple-app-site-association)।
पेंटेस्टर के लिए यह फाइल बहुत दिलचस्प होती है क्योंकि यह पथों का खुलासा करती है। यह उन रिलीज़ के पथों का भी खुलासा कर सकती है जो अभी तक प्रकाशित नहीं हुए हैं।

Associated Domains Entitlement की जांच करना

Xcode में, Capabilities टैब पर जाएं और Associated Domains के लिए खोजें। आप .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>

अधिक विस्तृत जानकारी archived Apple Developer Documentation में पाई जा सकती है।

यदि आपके पास केवल संकलित एप्लिकेशन है, तो आप इस गाइड का अनुसरण करके entitlements निकाल सकते हैं:

{% content-ref url="extracting-entitlements-from-compiled-application.md" %} extracting-entitlements-from-compiled-application.md {% endcontent-ref %}

Apple App Site Association File प्राप्त करना

पिछले चरण से प्राप्त डोमेन्स का उपयोग करके सर्वर से apple-app-site-association फाइल प्राप्त करने का प्रयास करें। इस फाइल को https://<domain>/apple-app-site-association या https://<domain>/.well-known/apple-app-site-association पर HTTPS के माध्यम से, बिना किसी रीडायरेक्ट के, सुलभ होना चाहिए।

आप इसे अपने ब्राउज़र के साथ स्वयं प्राप्त कर सकते हैं या Apple App Site Association (AASA) Validator का उपयोग कर सकते हैं।

लिंक्स को प्राप्त करने और उचित रूप से संभालने के लिए, एप्लिकेशन डेलिगेट को application:continueUserActivity:restorationHandler: को लागू करना होगा। यदि आपके पास मूल प्रोजेक्ट है तो इस विधि की खोज करने का प्रयास करें।

कृपया ध्यान दें कि यदि एप्लिकेशन openURL:options:completionHandler: का उपयोग करके एप्लिकेशन की वेबसाइट के लिए एक यूनिवर्सल लिंक खोलता है, तो लिंक एप्लिकेशन में नहीं खुलेगा। चूंकि कॉल एप्लिकेशन से आती है, इसे एक यूनिवर्सल लिंक के रूप में संभाला नहीं जाएगा।

  • webpageURL की स्कीम HTTP या HTTPS होनी चाहिए (किसी अन्य स्कीम को एक अपवाद फेंकना चाहिए)। URLComponents / NSURLComponents की scheme इंस्टेंस प्रॉपर्टी का उपयोग इसे सत्यापित करने के लिए किया जा सकता है।

Data Handler Method की जाँच करना

जब iOS एक यूनिवर्सल लिंक के परिणामस्वरूप एक एप्लिकेशन खोलता है, तो एप्लिकेशन को NSUserActivityTypeBrowsingWeb के activityType मान के साथ एक 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" %}

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके: