Uninitialized Variables
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यहाँ मुख्य विचार यह है कि अनइनीशियलाइज़्ड वेरिएबल्स के साथ क्या होता है क्योंकि उनके लिए असाइन की गई मेमोरी में पहले से जो मान था, वही होगा। उदाहरण:
Function 1: initializeVariable
: हम एक वेरिएबल x
घोषित करते हैं और इसे एक मान असाइन करते हैं, मान लीजिए 0x1234
। यह क्रिया मेमोरी में एक स्थान आरक्षित करने और उसमें एक विशिष्ट मान डालने के समान है।
Function 2: useUninitializedVariable
: यहाँ, हम एक और वेरिएबल y
घोषित करते हैं लेकिन इसे कोई मान असाइन नहीं करते। C में, अनइनीशियलाइज़्ड वेरिएबल्स स्वचालित रूप से शून्य पर सेट नहीं होते। इसके बजाय, वे अपनी मेमोरी स्थान पर अंतिम बार संग्रहीत मान को बनाए रखते हैं।
जब हम इन दोनों फंक्शन्स को क्रमिक रूप से चलाते हैं:
initializeVariable
में, x
को एक मान (0x1234
) असाइन किया जाता है, जो एक विशिष्ट मेमोरी पते को भरता है।
useUninitializedVariable
में, y
घोषित किया जाता है लेकिन इसे कोई मान असाइन नहीं किया जाता, इसलिए यह x
के ठीक बाद का मेमोरी स्थान लेता है। y
को अनइनीशियलाइज़ करने के कारण, यह x
द्वारा उपयोग किए गए उसी मेमोरी स्थान से मान "विरासत में" ले लेता है, क्योंकि वही अंतिम मान था जो वहाँ था।
यह व्यवहार निम्न-स्तरीय प्रोग्रामिंग में एक प्रमुख अवधारणा को दर्शाता है: मेमोरी प्रबंधन महत्वपूर्ण है, और अनइनीशियलाइज़्ड वेरिएबल्स अप्रत्याशित व्यवहार या सुरक्षा कमजोरियों का कारण बन सकते हैं, क्योंकि वे अनजाने में मेमोरी में छोड़े गए संवेदनशील डेटा को रख सकते हैं।
अनइनीशियलाइज़्ड स्टैक वेरिएबल्स कई सुरक्षा जोखिम पैदा कर सकते हैं जैसे:
डेटा लीक: संवेदनशील जानकारी जैसे पासवर्ड, एन्क्रिप्शन कुंजी, या व्यक्तिगत विवरण अनइनीशियलाइज़्ड वेरिएबल्स में संग्रहीत होने पर उजागर हो सकती है, जिससे हमलावरों को इस डेटा को पढ़ने की संभावना मिलती है।
जानकारी का खुलासा: अनइनीशियलाइज़्ड वेरिएबल्स की सामग्री प्रोग्राम की मेमोरी लेआउट या आंतरिक संचालन के बारे में विवरण प्रकट कर सकती है, जिससे हमलावरों को लक्षित हमलों को विकसित करने में मदद मिलती है।
क्रैश और अस्थिरता: अनइनीशियलाइज़्ड वेरिएबल्स से संबंधित संचालन अपरिभाषित व्यवहार का परिणाम दे सकते हैं, जिससे प्रोग्राम क्रैश या अप्रत्याशित परिणाम हो सकते हैं।
मनमाने कोड का निष्पादन: कुछ परिदृश्यों में, हमलावर इन कमजोरियों का लाभ उठाकर प्रोग्राम के निष्पादन प्रवाह को बदल सकते हैं, जिससे उन्हें मनमाना कोड निष्पादित करने की अनुमति मिलती है, जिसमें दूरस्थ कोड निष्पादन खतरों को शामिल किया जा सकता है।
initializeAndPrint
फ़ंक्शन: यह फ़ंक्शन एक पूर्णांक चर initializedVar
घोषित करता है, इसे 100
का मान सौंपता है, और फिर चर के मेमोरी पते और मान को प्रिंट करता है। यह कदम सीधा है और दिखाता है कि एक प्रारंभिक चर कैसे व्यवहार करता है।
demonstrateUninitializedVar
फ़ंक्शन: इस फ़ंक्शन में, हम एक पूर्णांक चर uninitializedVar
घोषित करते हैं बिना इसे प्रारंभ किए। जब हम इसके मान को प्रिंट करने का प्रयास करते हैं, तो आउटपुट एक यादृच्छिक संख्या दिखा सकता है। यह संख्या उस मेमोरी स्थान पर पहले जो डेटा था, उसे दर्शाती है। वातावरण और संकलक के आधार पर, वास्तविक आउटपुट भिन्न हो सकता है, और कभी-कभी, सुरक्षा के लिए, कुछ संकलक स्वचालित रूप से चर को शून्य पर प्रारंभ कर सकते हैं, हालांकि इस पर भरोसा नहीं किया जाना चाहिए।
main
फ़ंक्शन: main
फ़ंक्शन उपरोक्त दोनों फ़ंक्शनों को अनुक्रम में कॉल करता है, एक प्रारंभिक चर और एक अनप्रारंभिक चर के बीच का अंतर प्रदर्शित करता है।
यह ARM64 में बिल्कुल नहीं बदलता है क्योंकि स्थानीय चर भी स्टैक में प्रबंधित होते हैं, आप इस उदाहरण की जांच कर सकते हैं जहाँ यह दिखाया गया है।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)