13 KiB
House of Orange
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- अगर आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान देखें!
- आधिकारिक PEASS और HackTricks swag प्राप्त करें
- हमारे संग्रह NFTs का खोज करें, The PEASS Family
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- HackTricks और HackTricks Cloud github repos में PRs सबमिट करके अपने हैकिंग ट्रिक्स साझा करें।
मूलभूत जानकारी
कोड
- https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_orange.c में एक उदाहरण खोजें
- इस पैच में एक्सप्लोइटेशन तकनीक ठीक की गई थी (2.26 से पहले काम करती थी)
- और अधिक टिप्पणियों के साथ समान उदाहरण https://guyinatuxedo.github.io/43-house_of_orange/house_orange_exp/index.html
लक्ष्य
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 सेट करना। इसके दो उद्देश्य हैं:
- छोटे बिन 4 में इन्सर्शन: जब
malloc
अनसॉर्टेड बिन के माध्यम से स्कैन करता है और इस चंक को देखता है, तो यह इसे छोटे बिन 4 में डालने का प्रयास करेगा क्योंकि इसका आकार छोटा है। यह चंक छोटे बिन 4 की सूची के शीर्ष पर जाता है जो_IO_list_all
के चंक के FD पॉइंटर का स्थान है क्योंकि हमने अनसॉर्टेड बिन हमला के माध्यम से_IO_list_all
में एक क्लोज पता लिखा था। - मैलोक चेक को ट्रिगर करना: यह चंक आकार मानिपुलेशन
malloc
को आंतरिक जांच करने के लिए कारण बनाएगा। जब यह झूठा फॉरवर्ड चंक का आकार जांचता है, जो शून्य होगा, तो यह एक त्रुटि को ट्रिगर करेगा औरmalloc_printerr
को कॉल करेगा।
छोटे बिन का मानिपुलेशन आपको चंक के फॉरवर्ड पॉइंटर को नियंत्रित करने की अनुमति देगा। _IO_list_all के साथ ओवरलैप का उपयोग एक नकली _IO_FILE संरचना बनाने के लिए किया जाता है। संरचना को सावधानी से तैयार किया जाता है ताकि मुख्य क्षेत्र जैसे _IO_write_base
और _IO_write_ptr
जैसे महत्वपूर्ण क्षेत्रों को शामिल किया जाए जो libc में आंतरिक जांचों को पार करने वाले मान्यताएँ देते हैं। इसके अतिरिक्त, एक जंप टेबल नकली संरचना के भीतर बनाई जाती है, जहां एक निर्देशिका पॉइंटर को एक पते पर सेट किया जाता है जहां विभिन्न कोड (उदाहरण के लिए, system
फ़ंक्शन) को निष्पादित किया जा सकता है।
तकनीक के शेष हिस्से को सारांशित करने के लिए:
- पुराने ऊपरी चंक का आकार कम करें: पुराने ऊपरी चंक का आकार समायोजित करें ताकि इसे छोटे बिन में फिट किया जा सके।
- नकली
_IO_FILE
संरचना सेट करें: पुराने ऊपरी चं
संदर्भ
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_orange/
- https://guyinatuxedo.github.io/43-house_of_orange/house_orange_exp/index.html
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके HackTricks और HackTricks Cloud github repos में।