Integer Overflow
मूल जानकारी
इंटीजर ओवरफ्लो के मूल में कंप्यूटर प्रोग्रामिंग में डेटा टाइप की साइज द्वारा लगाई गई सीमा और डेटा की व्याख्या की सीमा होती है।
उदाहरण के लिए, एक 8-बिट असाइन्ड इंटीजर मान्यता दे सकता है 0 से 255 तक के मान। यदि आप 8-बिट असाइन्ड इंटीजर में मान 256 स्टोर करने का प्रयास करते हैं, तो इसकी स्टोरेज क्षमता की सीमा के कारण यह 0 पर वापस लौट जाएगा। उसी तरह, 16-बिट असाइन्ड इंटीजर के लिए, जो मान 0 से 65,535 तक रख सकता है, 65,535 में 1 जोड़ने से मान फिर से 0 पर वापस जाएगा।
इसके अतिरिक्त, एक 8-बिट साइन्ड इंटीजर मान्यता दे सकता है -128 से 127 तक के मान। इसका कारण यह है कि एक बिट का उपयोग साइन (सकारात्मक या नकारात्मक) को प्रतिनिधित्व करने के लिए किया जाता है, जिससे 7 बिट उत्कृष्टता को प्रतिनिधित्व करने के लिए बचते हैं। सबसे नकारात्मक संख्या को -128 (बाइनरी 10000000
) के रूप में प्रतिनिधित किया जाता है, और सबसे सकारात्मक संख्या 127 (बाइनरी 01111111
) है।
अधिकतम मान
संभावित वेब सुरक्षा उत्थानों के लिए अधिकतम समर्थित मानों को जानना बहुत दिलचस्प है:
इंटीजर ओवरफ्लो क्या है?
इंटीजर ओवरफ्लो एक स्थिति है जब एक प्रोग्राम एक इंटीजर वैल्यू को उसकी सीमा से अधिक बढ़ाने की कोशिश करता है, जिससे यह वैल्यू अपने डेटा टाइप के लिए अवैध हो जाता है। यह एक साधारण सुरक्षा समस्या है जो कोड इंजेक्शन और अन्य हैकिंग तकनीकों में प्रयोग किया जा सकता है।
इंटीजर ओवरफ्लो के प्रकार:
साइन्ड इंटीजर ओवरफ्लो: जब एक नकारात्मक इंटीजर वैल्यू को उसकी सीमा से अधिक बढ़ाने की कोशिश की जाती है।
अनसाइन्ड इंटीजर ओवरफ्लो: जब एक धनात्मक इंटीजर वैल्यू को उसकी सीमा से अधिक बढ़ाने की कोशिश की जाती है।
इंटीजर ओवरफ्लो कैसे काम करता ह।
जब एक इंटीजर वैल्यू अपनी सीमा से अधिक बढ़ाता है, तो यह वैल्यू अपने डेटा टाइप के लिए अवैध हो जाता है और अनुमानित परिणाम पैदा कर सकता है। यह अनुमानित परिणाम एक हैकर को अनुमति देने के लिए उपयोग किया जा सकता है, जिससे उन्हें अनुमति प्राप्त करने की अनुमति मिलती है जो उन्हें नहीं मिलनी चाहिए थी।
उदाहरण
प्योर ओवरफ्लो
छापा गया परिणाम 0 होगा क्योंकि हमने char को ओवरफ्लो कर दिया है:
साइन्ड से अनसाइन्ड परिवर्तन
एक स्थिति का विचार करें जहाँ एक साइन्ड इंटीजर उपयोगकर्ता इनपुट से पढ़ा जाता है और फिर उसे एक संदर्भ में उपयोग किया जाता है जो इसे एक असाइन्ड इंटीजर के रूप में देखता है, सही मान्यता के बिना:
इस उदाहरण में, यदि एक उपयोगकर्ता एक नकारात्मक संख्या दर्ज करता है, तो यह बड़ी असाइन्ड इंटीजर के रूप में व्याख्या की जाएगी क्योंकि बाइनरी मानों की व्याख्या के तरीके के कारण अप्रत्याशित व्यवहार की ओर ले जा सकती है।
अन्य उदाहरण
केवल 1B का उपयोग पासवर्ड के आकार को संग्रहित करने के लिए किया जाता है, इसे ओवरफ्लो करना संभव है और इसे यह महसूस कराना है कि यह 4 की लंबाई है जबकि वास्तव में यह 260 है ताकि लंबाई की जांच सुरक्षा को छल सके
कुछ नंबरों को देकर z3 का उपयोग करके पहले नंबर से गुणा करने पर दूसरे नंबर को देखें:
केवल 1B का उपयोग पासवर्ड के आकार को संग्रहित करने के लिए किया जाता है, इसे ओवरफ्लो करना संभव है और इसे यह महसूस कराना है कि यह 4 की लंबाई है जबकि वास्तव में यह 260 है ताकि लंबाई की जांच सुरक्षा को छल सके और स्टैक में अगले स्थानीय चर को ओवरराइट करें और दोनों सुरक्षाओं को छल सकें
ARM64
यह ARM64 में बदलाव नहीं होता जैसा कि आप इस ब्लॉग पोस्ट में देख सकते हैं।
Last updated