Integer Overflow
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)
एक 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 में नहीं बदलता जैसा कि आप इस ब्लॉग पोस्ट में देख सकते हैं।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)