hacktricks/binary-exploitation/heap/heap-overflow.md

12 KiB

हीप ओवरफ्लो

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

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

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

हीप ओवरफ्लो एक स्टैक ओवरफ्लो की तरह है लेकिन हीप में। मुख्य रूप से इसका मतलब है कि हीप में कुछ स्थान आरक्षित किया गया था ताकि कुछ डेटा स्टोर किया जा सके और स्टोर किया गया डेटा आरक्षित स्थान से अधिक था।

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

{% hint style="success" %} ओवरफ्लो ऑफसेट्स खोजने के लिए आप स्टैक ओवरफ्लो में उपयोग किए गए वही पैटर्न उपयोग कर सकते हैं। {% endhint %}

स्टैक ओवरफ्लो बनाम हीप ओवरफ्लो

स्टैक ओवरफ्लो में व्यवस्थित और डेटा जो कि स्टैक में मौजूद होने वाला है जिस समय दोष को ट्रिगर किया जा सकता है, यह अच्छी तरह से विश्वसनीय है। इसका कारण यह है कि स्टैक लीनियर है, हमेशा मेमोरी में बढ़ता है, प्रोग्राम चलाने के कुछ विशेष स्थानों पर स्टैक मेमोरी में हमेशा समान प्रकार के डेटा स्टोर होता है और हर फंक्शन द्वारा उपयोग किए जाने वाले स्टैक भाग के अंत में कुछ विशेष संरचना होती है।

हालांकि, हीप ओवरफ्लो के मामले में, क्योंकि उपयोग की गई मेमोरी लीनियर नहीं है लेकिन आकार के अनुसार विभाजन और क्षेत्रों द्वारा आवंटित चंक्स आम तौर पर मेमोरी के अलग-अलग स्थानों में होते हैं (एक के बगल में नहीं) क्योंकि पिछले मुक्त मेमोरी का उपयोग किया जाता है पहले नए चंक्स का आवंटन करने से पहले। यह कठिन है कि वह वस्तु कौन है जो ओवरफ्लो होने वाली वस्तु के साथ टकराएगी। इसलिए, जब एक हीप ओवरफ्लो पाया जाता है, इसे आवश्यकता होती है कि एक विश्वसनीय तरीके से ढूंढा जाए कि वांछित वस्तु को उससे अगले मेमोरी में बनाया जाए जिससे ओवरफ्लो हो सकता है।

इसके लिए उपयोग किए जाने वाले तकनीकों में से एक हीप ग्रूमिंग है जिसका उपयोग उदाहरण के लिए इस पोस्ट में किया जाता है। पोस्ट में यह बताया गया है कि जब iOS कर्नेल में किसी जोन को मेमोरी स्टोर करने के लिए मेमोरी की कमी होती है, तो इसे एक कर्नेल पेज द्वारा विस्तारित किया जाता है, और इस पेज को उम्मीद की गई आकारों के चंक्स में विभाजित किया जाता है जो क्रम में उपयोग किए जाएंगे (iOS संस्करण 9.2 तक, फिर इन चंक्स का उपयोग इन हमलों के अटैक को कठिन बनाने के लिए एक यादृच्छिक तरीके से किया जाता है)।

इसलिए, पिछले पोस्ट में जहां एक हीप ओवरफ्लो हो रहा है, ओवरफ्लो होने वाले वस्तु को एक पीड़ित क्रम से टकराने के लिए कई kallocs को कई धागों द्वारा मजबूर किया जाता है ताकि सभी मुक्त चंक्स भरे जाएं और एक नया पेज बनाया जाए

एक विशेष आकार के वस्तुओं के साथ इस भरने को मजबूत करने के लिए, एक iOS मश पोर्ट के साथ आउट-ऑफ-लाइन आवंटन एक आदर्श उम्मीदवार है। संदेश के आकार को तैयार करके, kalloc आवंटन का आकार स्पष्ट करना संभव है और जब संबंधित मश पोर्ट नष्ट होता है, तो संबंधित आवंटन तुरंत kfree में वापस जाएगा।

फिर, इनमें से कुछ प्लेसहोल्डर मुक्त किए जा सकते हैं। kalloc.4096 मुक्त सूची तत्काल पिछले-में-पहले क्रम में तत्काल रिहाई देती है, जिसका मतलब है कि यदि कुछ प्लेसहोल्डर मुक्त किए जाते हैं और उत्पादन को कई पीड़ित वस्तुओं को आवंटित करने की कोशिश करते हुए जब ओवरफ्लो होने वाली वस्तु को आवंटित करने की कोशिश की जाती है, तो संभावना है कि इस वस्तु के बाद एक पीड़ित वस्तु होगी।

उदाहरण libc

इस पृष्ठ में एक मौलिक हीप ओवरफ्लो अनुकरण मिल सकता है जो दिखाता है कि अगले चंक के पिछले में उपयोग बिट और पिछले आकार की स्थिति को ओवरराइट करके एक उपयोग किया गया चंक समेटना संभव है (इसे अप्रयुक्त महसूस कराने के लिए) और फिर से इसे आवंटित करना जिससे एक अलग पॉइंटर में उपयोग किए जा रहे डेटा को ओवरराइट किया जा सकता है।

[प्रोटोस्टार हीप 0](https://g

python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

दूसरे तरीके HackTricks का समर्थन करने के लिए: