- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करना चाहिए? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें।**
कस्टम URL स्कीम [ऐप्स को एक कस्टम प्रोटोकॉल के माध्यम से संचार करने की अनुमति देते हैं](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 पैरामीटरों की पुष्टि करें** और **अवैध URL को छोड़ दें**। इसके अलावा, उपयोगकर्ता के डेटा को जोखिम में न डालने वाले **क्रियाएँ** को ही उपलब्ध कराएं।
उदाहरण के लिए, URI: `myapp://hostname?data=123876123` ऐप्लिकेशन mydata (जिसने स्कीम `mydata` को **रजिस्टर** किया है) को **होस्टनेम**`hostname` के संबंधित **क्रिया** को बुलाएगा और मान `123876123` के साथ **पैरामीटर**`data` को भेजेगा।
एक संकटग्रस्त उदाहरण है [Skype Mobile ऐप में बग](http://www.dhanjani.com/blog/2010/11/insecure-handling-of-url-schemes-in-apples-ios.html), जिसे 2010 में खोजा गया था: Skype ऐप ने `skype://` प्रोटोकॉल हैंडलर को रजिस्टर किया था, जिसने **अन्य ऐप्स को अन्य Skype उपयोगकर्ताओं और फ़ोन नंबरों पर कॉल करने की अनुमति दी**। दुर्भाग्य से, Skype ने कॉल करने से पहले उपयोगकर्ताओं से अनुमति नहीं मांगी, इसलिए किसी भी ऐप ने उपयोगकर्ता के ज्ञान के बिना विभिन्न नंबरों पर कॉल कर सकता था। हमलावर ने इस संक्रमण का उपयोग करके एक अदृश्य `<iframe src="skype://xxx?call"></iframe>` (जहां `xxx` को एक प्रीमियम नंबर से बदल दिया गया था) रखा, इसलिए किसी भी Skype उपयोगकर्ता ने अनजाने में एक खतरनाक वेबसाइट पर जाने पर प्रीमियम नंबर को कॉल किया।
आप ऐप्लिकेशन द्वारा **रजिस्टर किए गए स्कीम** को ऐप के **`Info.plist`** फ़ाइल में ढूंढ़ सकते हैं, **`CFBundleURLTypes`** के लिए खोज करके (उदाहरण [iGoat-Swift](https://github.com/OWASP/iGoat-Swift) से):
यहां ध्यान दें, कि **दुष्ट एप्लिकेशन URIs को पुनः पंजीकृत कर सकते हैं** जो पहले से ही एप्लिकेशन्स द्वारा पंजीकृत हो चुके होते हैं। इसलिए, यदि आप **URIs के माध्यम से संवेदनशील जानकारी भेज रहे हैं** (myapp://hostname?password=123456), तो एक **दुष्ट** एप्लिकेशन इस **संवेदनशील****जानकारी** के साथ URI को **अवरोधित** कर सकती है।
इसके अलावा, इन URIs का **इनपुट जांचा और स्वच्छ किया जाना चाहिए**, क्योंकि यह **दुष्ट****मूलों** से आ सकता है जो SQLInjections, XSS, CSRF, Path Traversals या अन्य संभावित सुरक्षा दुरुपयोग करने की कोशिश कर रहे हों।
ऐप्स [`canOpenURL:`](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc) को कॉल करके **लक्षित ऐप्लिकेशन उपलब्ध है या नहीं** की जांच कर सकते हैं। हालांकि, यह विधि दुष्ट ऐप्लिकेशन द्वारा **स्थापित ऐप्स की गणना करने** के रूप में इस्तेमाल की जा रही थी, [iOS 9.0 से URL स्कीम्स को भी घोषित](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl?language=objc#discussion) किया जाना चाहिए, ऐप के `Info.plist` फ़ाइल में `LSApplicationQueriesSchemes` कुंजी और **अधिकतम 50 URL स्कीम्स** की एक सरणी जोड़कर।
`canOpenURL` हमेशा `NO` लौटाएगा अविणियत योजनाओं के लिए, चाहे उपयुक्त ऐप स्थापित हो या न हो। हालांकि, यह प्रतिबंध केवल `canOpenURL` के लिए ही लागू होता है।
*`application:didFinishLaunchingWithOptions:` विधि या `application:will-FinishLaunchingWithOptions:`: यह निर्णय कैसे लिया जाता है और URL के बारे में जानकारी कैसे प्राप्त की जाती है, इसे सत्यापित करें।
* [`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc): यह सत्यापित करें कि संसाधन कैसे खोला जा रहा है, अर्थात डेटा कैसे पार्स किया जा रहा है, [विकल्प](https://developer.apple.com/documentation/uikit/uiapplication/openurloptionskey) की सत्यापन करें, विशेष रूप से यदि कॉलिंग ऐप द्वारा पहुंच ([`sourceApplication`](https://developer.apple.com/documentation/uikit/uiapplication/openurloptionskey/1623128-sourceapplication)) की अनुमति देनी चाहिए या नहीं। कस्टम URL योजना का उपयोग करते समय ऐप को उपयोगकर्ता की अनुमति भी चाहिए सकती है।
टेलीग्राम में [चार अलग-अलग विधियों का उपयोग किया जाता है](https://github.com/peter-iakovlev/Telegram-iOS/blob/87e0a33ac438c1d702f2a0b75bf21f26866e346f/Telegram-iOS/AppDelegate.swift#L1250):
विधि [`openURL:options:completionHandler:`](https://developer.apple.com/documentation/uikit/uiapplication/1648685-openurl?language=objc) और [विचलित `UIApplication` की `openURL:` विधि](https://developer.apple.com/documentation/uikit/uiapplication/1622961-openurl?language=objc) जिम्मेदार हैं **URL खोलने** के लिए (अर्थात अन्य ऐप्स को अनुरोध भेजने / प्रश्न करने के लिए) जो वर्तमान ऐप के लिए स्थानीय हो सकता है या यह एक ऐसा हो सकता है जिसे एक अलग ऐप द्वारा प्रदान किया जाना चाहिए। यदि आपके पास मूल स्रोत कोड है, तो आप सीधे उन विधियों के उपयोग की खोज कर सकते हैं।
इसके अलावा, यदि आप जानना चाहते हैं कि क्या ऐप विशेष सेवाओं या ऐप्स को प्रश्न कर रहा है, और यदि ऐप विख्यात है, तो आप ऑनलाइन सामान्य URL schemes की खोज कर सकते हैं और उन्हें अपने **greps (l**[**iOS ऐप स्कीमों की सूची**](https://ios.gadgethacks.com/how-to/always-updated-list-ios-app-url-scheme-names-paths-for-shortcuts-0184033/)**)** में शामिल कर सकते हैं।
* **Safari**: एक URL scheme को जल्दी से टेस्ट करने के लिए आप Safari में URL को खोल सकते हैं और देख सकते हैं कि ऐप कैसे व्यवहार करता है। उदाहरण के लिए, यदि आप `tel://123456789` लिखते हैं तो Safari कोशिश करेगा कि वह नंबर को कॉल करना शुरू करे।
* **Notes App**: कस्टम URL scheme को टेस्ट करने के लिए आप लिंक को लंबे समय तक दबा सकते हैं। उन्हें खोलने के लिए संपादन मोड से बाहर निकलना न भूलें। ध्यान दें कि आप केवल ऐप स्थापित होने पर ही कस्टम URL scheme वाले लिंक पर क्लिक या लंबे समय तक दबा सकते हैं, अगर नहीं हैं तो वे _क्लिक करने योग्य लिंक_ के रूप में हाइलाइट नहीं होंगे।
* IDB शुरू करें, अपनी डिवाइस से कनेक्ट करें और लक्षित ऐप का चयन करें। आप [IDB दस्तावेज़ीकरण](https://www.idbtool.com/documentation/setup.html) में विवरण देख सकते हैं।
* **URL Handlers** खंड में जाएं। **URL schemes** में, **Refresh** पर क्लिक करें, और बाएं ओर आपको टेस्ट हो रहे ऐप में परिभाषित सभी कस्टम schemes की सूची मिलेगी। आप इन schemes को खोलकर उन्हें लोड कर सकते हैं, दाएं ओर **Open** पर क्लिक करके। एक सादा URI scheme (उदाहरण के लिए, `myURLscheme://` खोलकर) खोलकर आप छिपी हुई कार्यक्षमता (उदाहरण के लिए, एक डिबग विंडो) का पता लगा सकते हैं और स्थानीय प्रमाणीकरण को छलना कर सकते हैं।
इस उदाहरण में [Frida CodeShare](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) से लेखक ने गैर-सार्वजनिक API `LSApplicationWorkspace.openSensitiveURL:withOptions:` का उपयोग करके URL को खोलने के लिए किया है (SpringBoard ऐप से):
> ध्यान दें कि गैर-सार्वजनिक API का उपयोग ऐप स्टोर पर अनुमति नहीं है, इसलिए हम इन्हें टेस्ट भी नहीं करते हैं, लेकिन हमें अपने डायनामिक विश्लेषण के लिए उनका उपयोग करने की अनुमति है।
ऊपर जो हमने सीखा है, उसे अब अपनी पसंद की भाषा में अपने खुद के फज़र बनाने के लिए उपयोग किया जा सकता है, जैसे Python में और [Frida के RPC](https://www.frida.re/docs/javascript-api/#rpc) का उपयोग करके `openURL` को कॉल करें। वह फज़र निम्नलिखित कार्य करना चाहिए:
Frida के साथ इसे करना बहुत आसान है, आप इस [ब्लॉग पोस्ट](https://grepharder.github.io/blog/0x03\_learning\_about\_universal\_links\_and\_fuzzing\_url\_schemes\_on\_ios\_with\_frida.html) का उल्लेख कर सकते हैं जो iGoat-Swift ऐप (iOS 11.1.2 पर काम करता है) को फज़िलता करता है।
फज़र चलाने से पहले हमें इनपुट के रूप में URL schemes की आवश्यकता होती है। स्टेटिक विश्लेषण से हम जानते हैं कि iGoat-Swift ऐप निम्नलिखित URL scheme और पैरामीटर का समर्थन करता है: `iGoat://?contactNumber={0}&message={0}`.
- क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **हैकट्रिक्स में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें।**