hacktricks/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md

89 lines
16 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
<summary><strong>शून्य से नायक तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
2022-04-28 16:01:33 +00:00
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) में या **Twitter** 🐦 पर मुझे **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
2022-04-28 16:01:33 +00:00
</details>
# UIActivity शेयरिंग
iOS 6 से शुरू होकर तीसरे-पक्ष के ऐप्स के लिए विशिष्ट तंत्रों के माध्यम से **डेटा (आइटम्स) साझा करना** संभव है [उदाहरण के लिए AirDrop की तरह](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3). उपयोगकर्ता के दृष्टिकोण से, यह सुविधा वह प्रसिद्ध सिस्टम-वाइड _शेयर एक्टिविटी शीट_ है जो "शेयर" बटन पर क्लिक करने के बाद दिखाई देती है।
उपलब्ध निर्मित शेयरिंग तंत्रों की पूरी सूची [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype) में पाई जा सकती है। यदि ऐप के लिए उपयुक्त नहीं माना जाता है, तो डेवलपर्स के पास कुछ शेयरिंग तंत्रों को **बाहर करने की संभावना होती है**
## **आइटम्स भेजना**
`UIActivity` शेयरिंग का परीक्षण करते समय आपको विशेष ध्यान देना चाहिए:
* शेयर किए जा रहे डेटा (आइटम्स) पर,
* कस्टम एक्टिविटीज पर,
* बाहर किए गए एक्टिविटी प्रकारों पर।
`UIActivity` के माध्यम से डेटा शेयरिंग का काम `UIActivityViewController` बनाकर और वांछित आइटम्स (URLs, टेक्स्ट, एक चित्र) को [`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init) में पास करके होता है।
यदि सोर्स कोड हो, तो आपको `UIActivityViewController` पर नजर डालनी चाहिए:
* `init(activityItems:applicationActivities:)` मेथड को पास की गई एक्टिविटीज की जांच करें।
* जांचें कि क्या यह कस्टम एक्टिविटीज को परिभाषित करता है (जो पिछले मेथड को भी पास किया जा रहा है)।
* `excludedActivityTypes` की पुष्टि करें, यदि कोई हो।
यदि आपके पास केवल संकलित/स्थापित ऐप है, तो पिछले मेथड और प्रॉपर्टी की खोज करने का प्रयास करें, उदाहरण के लिए:
```bash
$ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems
0x1000df034 45 44 initWithActivityItems:applicationActivities:
```
2023-11-06 08:38:02 +00:00
## **आइटम प्राप्त करना**
आइटम प्राप्त करते समय, आपको जांचना चाहिए:
* क्या ऐप **घोषित करता है** _**कस्टम डॉक्यूमेंट प्रकार**_** ** को **Exported/Imported UTIs** में देखकर ("Info" टैब Xcode प्रोजेक्ट में). सभी सिस्टम घोषित UTIs (Uniform Type Identifiers) की सूची [archived Apple Developer Documentation](https://developer.apple.com/library/archive/documentation/Miscellaneous/Reference/UTIRef/Articles/System-DeclaredUniformTypeIdentifiers.html#//apple_ref/doc/uid/TP40009259) में मिल सकती है।
* क्या ऐप किसी _**डॉक्यूमेंट प्रकार को खोल सकता है**_ यह निर्दिष्ट करता है **Document Types** में देखकर ("Info" टैब Xcode प्रोजेक्ट में). यदि मौजूद हैं, तो वे नाम और एक या अधिक UTIs के होते हैं जो डेटा प्रकार का प्रतिनिधित्व करते हैं (उदाहरण के लिए, "public.png" PNG फाइलों के लिए). iOS इसका उपयोग यह निर्धारित करने के लिए करता है कि क्या ऐप किसी दिए गए डॉक्यूमेंट को खोलने के लिए योग्य है (केवल Exported/Imported UTIs को निर्दिष्ट करना पर्याप्त नहीं है).
* क्या ऐप सही ढंग से _**प्राप्त डेटा की जांच करता है**_ ऐप डेलिगेट में [`application:openURL:options:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623112-application?language=objc) (या इसके पुराने संस्करण [`UIApplicationDelegate application:openURL:sourceApplication:annotation:`](https://developer.apple.com/documentation/uikit/uiapplicationdelegate/1623073-application?language=objc)) के कार्यान्वयन को देखकर।
यदि स्रोत कोड नहीं है तो आप `Info.plist` फाइल में देख सकते हैं और खोज सकते हैं:
* `UTExportedTypeDeclarations`/`UTImportedTypeDeclarations` यदि ऐप ने _कस्टम डॉक्यूमेंट प्रकार_ का निर्यात/आयात घोषित किया है।
* `CFBundleDocumentTypes` यह देखने के लिए कि क्या ऐप किसी _डॉक्यूमेंट प्रकार को खोल सकता है_
इन कुंजियों के उपयोग के बारे में एक बहुत ही पूर्ण विवरण [Stackoverflow पर](https://stackoverflow.com/questions/21937978/what-are-utimportedtypedeclarations-and-utexportedtypedeclarations-used-for-on-i) मिल सकता है लेकिन यहां आपके पास एक सारांश है:
* `UTExportedTypeDeclarations`: इनका उपयोग आप अपने **खुद के UTIs** को परिभाषित करने के लिए करते हैं जिन्हें आपका ऐप सिस्टम को सिखाना चाहता है जिस पर यह स्थापित है। एक **UTI एक डेटा का वर्णन करता है** (_जरूरी नहीं कि फाइल के अंदर स्थित डेटा!_) और इसके लिए कम से कम एक **पहचानकर्ता** (`com.example.MyCoolDataType`) की आवश्यकता होती है। इसके अलावा इसमें एक **नाम** (`My Cool Data Type`), एक या अधिक फाइल नाम **एक्सटेंशन** (`.myCoolDataType`), एक या अधिक **MIME** **प्रकार** (`x-application/my-cool-data-type`), एक या अधिक **पेस्टबोर्ड** **प्रकार** (कॉपी\&पेस्ट का उपयोग करते समय उस प्रकार के डेटा को स्थानांतरित करने के लिए उपयोग किया जाता है), और एक या अधिक **पुराने OS प्रकार** हो सकते हैं। आमतौर पर आप चाहते हैं कि UTIs मौजूदा UTIs के अनुरूप हों (उदाहरण के लिए, जब आप कहते हैं कि आपका UTI `public.data` के अनुरूप है, तो कोई भी प्रक्रिया जो सामान्य डेटा के साथ काम कर सकती है, वह आपके UTI के साथ भी काम कर सकती है).
* उदा.: आप अपने स्वयं के प्रोप्राइटरी फाइल डेटा प्रारूप को परिभाषित करते हैं और आप चाहते हैं कि यह डेटा प्रारूप अन्य ऐप्स, प्लगइन्स, एक्सटेंशन्स आदि के लिए भी ज्ञात हो।
* `UTImportedTypeDeclarations`: आप `UTImportedTypeDeclarations` का उपयोग करते हैं **सिस्टम को UTIs के बारे में सिखाने के लिए जिन्हें आप सिस्टम में ज्ञात करना चाहते हैं लेकिन जो आपके UTIs नहीं हैं**
* उदा.: आपका ऐप किसी अन्य एप्लिकेशन के प्रोप्राइटरी डेटा प्रारूप को पढ़ सकता है, फिर भी आप नहीं जानते कि वह एप्लिकेशन सिस्टम पर स्थापित भी है या नहीं।
* `CFBundleDocumentTypes`: आप `CFBundleDocumentTypes` का उपयोग करते हैं सिस्टम को बताने के लिए कि आपका ऐप किस डॉक्यूमेंट प्रकार को खोल सकता है। जब तक आप **अपने UTIs को यहां भी सूचीबद्ध नहीं करते**, ये UTIs आपके ऐप के साथ Finder में जुड़े नहीं होते हैं और आपका ऐप `Open With >` मेनू में नहीं दिखाई देगा। \
डॉक्यूमेंट प्रकार के लिए आपको हमेशा जो चीज सेट करनी चाहिए वह है भूमिका। **भूमिका** "**Viewer**" (आप उस फाइल प्रकार को दिखा सकते हैं लेकिन उसे संपादित नहीं कर सकते), "**Editor**" (आप उस फाइल प्रकार को दिखा और संपादित कर सकते हैं), "**None**" (यह निर्दिष्ट नहीं है कि आप उस फाइल के साथ क्या कर सकते हैं) हो सकती है।
* उदा.: आप चाहते हैं कि आपका **ऐप कुछ निश्चित फाइल प्रकारों के साथ जुड़ा हो**, चाहे वह एक्सटेंशन द्वारा, MIME प्रकार द्वारा, या UTI पहचानकर्ता द्वारा पहचाना जाए। **यदि आप चाहते हैं कि आपका ऐप किसी UTI प्रकार के साथ जुड़ा हो, तो ऐप को उस प्रकार को आयात या निर्यात करना चाहिए**, अन्यथा प्रकार सिस्टम के लिए ज्ञात नहीं हो सकता है और अज्ञात UTI प्रकार के लिए पंजीकरण का कोई प्रभाव नहीं होता है।
## डायनामिक परीक्षण
**भेजने की गतिविधियों** के लिए आप:
* स्थिर विश्लेषण में देखे गए विधि को हुक करें ([`init(activityItems:applicationActivities:)`](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622019-init)) `activityItems` और `applicationActivities` प्राप्त करने के लिए।
* हुक करके बाहर की गई गतिविधियों का पता लगाएं [`excludedActivityTypes` property](https://developer.apple.com/documentation/uikit/uiactivityviewcontroller/1622009-excludedactivitytypes)।
आइटम प्राप्त करने के लिए आप:
* किसी अन्य ऐप से फाइल को ऐप के साथ _शेयर_ करें या इसे AirDrop या ई-मेल के माध्यम से भेजें। फाइल का चयन करें ताकि यह "Open with..." संवाद को ट्रिगर करे (यानी कोई डिफ़ॉल्ट ऐप नहीं है जो फाइल को खोलेगा, उदाहरण के लिए एक PDF)।
* `application:openURL:options:` और किसी भी अन्य विधियों को हुक करें जो पिछले स्थिर विश्लेषण में पहचानी गई थीं।
* ऐप व्यवहार का अवलोकन करें।
* इसके अलावा, आप विशिष्ट दोषपूर्ण फाइलें भेज सकते हैं और/या एक fuzzing तकनीक का उपयोग कर सकते हैं।
**पढ़ें कैसे** [**यहां**](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06h-testing-platform-interaction#dynamic-analysis-8)**.**
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
2022-04-28 16:01:33 +00:00
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**स