hacktricks/binary-exploitation/heap/house-of-orange.md

13 KiB

House of Orange

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूलभूत जानकारी

कोड

लक्ष्य

  • malloc_printerr फ़ंक्शन का दुरुपयोग

आवश्यकताएँ

  • ऊपरी चंक का आकार अधिलेखित करें
  • Libc और हीप लीक्स

पृष्ठभूमि

इस उदाहरण के टिप्पणियों से कुछ आवश्यक पृष्ठभूमि:

बात यह है, पुराने संस्करणों में libc में, जब malloc_printerr फ़ंक्शन को कॉल किया जाता था तो यह _IO_list_all में संग्रहीत _IO_FILE संरचियों की सूची के माध्यम से चलाता था, और वास्तव में उस संरचना में एक निर्देशिका पॉइंटर को एक्जीक्यूट करता था।
यह हमला एक नकली _IO_FILE संरचना बनाएगा जिसे हम _IO_list_all में लिखेंगे, और malloc_printerr को चलाएगा।
फिर यह वह पता चलाएगा जिस पते को हमने _IO_FILE संरचनाओं के जंप टेबल में संग्रहीत किया है, और हमें कोड निष्पादित करने की अनुमति मिलेगी।

हमला

हमला ऊपरी चंक को अनसॉर्टेड बिन में प्राप्त करके शुरू होता है। इसे mmap आवंटन को ट्रिगर करने वाले mmp_.mmap_threshold (डिफ़ॉल्ट 128K) से छोटा लेकर malloc को कॉल करके प्राप्त किया जाता है। जब भी ऊपरी चंक का आकार संशोधित किया जाता है, तो यह महत्वपूर्ण है कि ऊपरी चंक + इसका आकार पेज-संरेखित हो और पिछला इनयूज़ बिट हमेशा सेट रहे।

अनसॉर्टेड बिन में ऊपरी चंक प्राप्त करने के लिए, एक चंक आवंटित करें ताकि ऊपरी चंक बनाने के लिए, ऊपरी चंक का आकार बदलें (आवंटित चंक में ओवरफ़्लो होने के साथ) ताकि ऊपरी चंक + आकार पेज-संरेखित हो और पिछला इनयूज़ बिट सेट हो। फिर नए ऊपरी चंक के आकार से अधिक एक चंक आवंटित करें। ध्यान दें कि ऊपरी चंक को अनसॉर्टेड बिन में प्राप्त करने के लिए कभी free कॉल नहीं किया जाता है।

पुराना ऊपरी चंक अब अनसॉर्टेड बिन में है। माना जा सकता है कि हम उसमें से डेटा पढ़ सकते हैं (शायद एक विकल्पन से जो ओवरफ़्लो का कारण भी हो सकता है), तो उससे libc पतों को लीक करना संभव है और _IO_list_all का पता लगाना संभव है।

एक अनसॉर्टेड बिन हमला अधिलेखित करने के द्वारा किया जाता है, ओवरफ़्लो का दुरुपयोग करके topChunk->bk->fwd = _IO_list_all - 0x10 लिखने के लिए। जब एक नया चंक आवंटित किया जाता है, तो पुराना ऊपरी चंक विभाजित हो जाएगा, और एक प्वाइंटर अनसॉर्टेड बिन में लिखा जाएगा _IO_list_all में।

अगला कदम पुराने ऊपरी चंक का आकार छोटा करना है ताकि एक छोटे बिन में फिट हो, विशेष रूप से उसका आकार 0x61 सेट करना। इसके दो उद्देश्य हैं:

  1. छोटे बिन 4 में इन्सर्शन: जब malloc अनसॉर्टेड बिन के माध्यम से स्कैन करता है और इस चंक को देखता है, तो यह इसे छोटे बिन 4 में डालने का प्रयास करेगा क्योंकि इसका आकार छोटा है। यह चंक छोटे बिन 4 की सूची के शीर्ष पर जाता है जो _IO_list_all के चंक के FD पॉइंटर का स्थान है क्योंकि हमने अनसॉर्टेड बिन हमला के माध्यम से _IO_list_all में एक क्लोज पता लिखा था।
  2. मैलोक चेक को ट्रिगर करना: यह चंक आकार मानिपुलेशन malloc को आंतरिक जांच करने के लिए कारण बनाएगा। जब यह झूठा फॉरवर्ड चंक का आकार जांचता है, जो शून्य होगा, तो यह एक त्रुटि को ट्रिगर करेगा और malloc_printerr को कॉल करेगा।

छोटे बिन का मानिपुलेशन आपको चंक के फॉरवर्ड पॉइंटर को नियंत्रित करने की अनुमति देगा। _IO_list_all के साथ ओवरलैप का उपयोग एक नकली _IO_FILE संरचना बनाने के लिए किया जाता है। संरचना को सावधानी से तैयार किया जाता है ताकि मुख्य क्षेत्र जैसे _IO_write_base और _IO_write_ptr जैसे महत्वपूर्ण क्षेत्रों को शामिल किया जाए जो libc में आंतरिक जांचों को पार करने वाले मान्यताएँ देते हैं। इसके अतिरिक्त, एक जंप टेबल नकली संरचना के भीतर बनाई जाती है, जहां एक निर्देशिका पॉइंटर को एक पते पर सेट किया जाता है जहां विभिन्न कोड (उदाहरण के लिए, system फ़ंक्शन) को निष्पादित किया जा सकता है।

तकनीक के शेष हिस्से को सारांशित करने के लिए:

  • पुराने ऊपरी चंक का आकार कम करें: पुराने ऊपरी चंक का आकार समायोजित करें ताकि इसे छोटे बिन में फिट किया जा सके।
  • नकली _IO_FILE संरचना सेट करें: पुराने ऊपरी चं

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके: