hacktricks/binary-exploitation/heap/unsorted-bin-attack.md

15 KiB

अनसॉर्टेड बिन हमला

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

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

मौलिक जानकारी

अनसॉर्टेड बिन क्या है इसके बारे में अधिक जानकारी के लिए इस पेज की जाँच करें:

{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}

अनसॉर्टेड सूचियों के लिए unsorted_chunks (av) के पते को चंक के bk पते में लिखने की क्षमता होती है। इसलिए, यदि कोई हमलावर अनसॉर्टेड बिन के अंदर एक चंक में bk पॉइंटर का पता संशोधित कर सकता है, तो वह किसी भी पते में उस पते को लिख सकता है जो एक libc पते लीक करने या कुछ रक्षा को छलने में मददगार हो सकता है।

इसलिए, मौलिक रूप से, यह हमला किसी भी बड़ी संख्या के साथ किसी भी अर्बिट्रेरी पते को अधिक करने की अनुमति देता है (जो एक हीप पता या एक libc पता हो सकता है) जैसे कि कुछ स्टैक पता जो लीक हो सकता है या कुछ प्रतिबंध जैसे global_max_fast जैसे ग्लोबल चर को बड़े आकार के फास्ट बिन बिन्स बनाने की अनुमति देने के लिए (और एक अनसॉर्टेड बिन हमले से एक तेज बिन हमले में पास करने के लिए)।

{% hint style="success" %} https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle में प्रदान किए गए उदाहरण को देखने और 0x400 और 0x500 की बजाय 0x4000 और 0x5000 का उपयोग करने से (tcaches को टालने के लिए) आप देख सकते हैं कि आजकल त्रुटि malloc(): unsorted double linked list corrupted ट्रिगर होती है।

इसलिए, इस अनसॉर्टेड बिन हमले को अब (अन्य जांचों के बीच) डबल लिंक्ड सूची को ठीक करने की क्षमता भी होनी चाहिए ताकि यह बाईपास हो victim->bck->fd == victim या नहीं victim->fd == av (arena)। जिसका मतलब है कि हमें जहां पता लिखना चाहते हैं, उसके fd स्थान में नकली चंक का पता होना चाहिए और नकली चंक fd एरियना को पॉइंट करना चाहिए। {% endhint %}

{% hint style="danger" %} ध्यान दें कि यह हमला अनसॉर्टेड बिन को क्षति पहुंचाता है (इसलिए छोटे और बड़े भी)। इसलिए अब हम सिर्फ फास्ट बिन से आवंटन का उपयोग कर सकते हैं (एक अधिक जटिल कार्यक्रम अन्य आवंटन कर सकता है और क्रैश हो सकता है), और इसे ट्रिगर करने के लिए हमें एक ही आकार का आवंटन करना होगा या कार्यक्रम क्रैश हो जाएगा।

ध्यान दें कि इस मामले में global_max_fast बनाना इस मामले में मददगार हो सकता है, जिसमें भरोसा करना है कि फास्ट बिन सभी अन्य आवंटन का ध्यान रखेगा जब तक उत्पादन पूरा नहीं हो जाता है। {% endhint %}

guyinatuxedo के कोड से यह बहुत अच्छे से समझाता है, हालांकि यदि आप मैलोकों को इतना बड़ा आवंटन करने के लिए संशोधित करते हैं ताकि एक टीकैच में समाप्त न हों, तो आप देख सकते हैं कि पहले उल्लिखित त्रुटि आती है जो इस तकनीक को रोकती है: malloc(): unsorted double linked list corrupted

अनसॉर्टेड बिन इनफोलीक हमला

यह वास्तव में एक बहुत मौलिक अवधारणा है। अनसॉर्टेड बिन में चंक्स के पास बिन बनाने के लिए डबल पॉइंटर होते हैं। अनसॉर्टेड बिन में पहला चंक वास्तव में FD और BK लिंक्स मुख्य एरियना (libc) के एक हिस्से को पॉइंट करेगा।
इसलिए, यदि आप एक चंक को अनसॉर्टेड बिन में डाल सकते हैं और इसे पढ़ सकते हैं (उपयोग के बाद मुक्त करें) या इसे फिर से आवंटित कर सकते हैं बिना कम से कम 1 पॉइंटर को ओवरराइट किए तो फिर आपके पास एक libc इन्फो लीक हो सकता है।

इस लेख में उपयोग किया गया हमला, एक 4 चंक्स संरचना (A, B, C और D - D केवल शीर्ष चंक के साथ समेलन को रोकने के लिए) का दुरुपयोग किया गया था, ताकि B में एक नल बाइट ओवरफ्लो किया गया था ताकि C को इसका इंडिकेट करने के लिए कि B अप्रयुक्त था। साथ ही, B में prev_size डेटा संशोधित किया गया था ताकि आकार B का न होकर A+B हो।
फिर C को मुक्त किया गया, और A+B के साथ समेलिट किया गया (लेकिन B अभी भी उपयोग में था)। A के आकार का एक नया चंक आवंटित किया गया और फिर लीक होने वाले libc पतों को B में लिखा गया जहां से वे लीक हो गए।

संदर्भ और अन्य उदाहरण

  • https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#hitcon-training-lab14-magic-heap
  • लक्ष्य एक ग्लोबल चर को 4869 से अधिक मान के साथ ओवरराइट करना है ताकि झंडा मिल सके और PIE सक्षम नहीं है।
  • विचारणीय आकारों के चंक उत्पन्न किए जा सकते हैं और एक इच्छित आकार के हीप ओवरफ्लो है।
  • हमला शुरू होता है 3 चंक्स बनाकर: चंक0 ओवरफ्लो का दुरुपयोग करने के लिए, चंक1 ओवरफ्लो किया जाने के लिए और चंक2 ताकि शीर्ष चंक पिछले वालों को समेलन न करें।
  • फिर, चंक1 को मुक्त किया गया और चंक0 को ओवरफ्लो किया गया ताकि चंक1 का bk पॉइंट 0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6076f <list_all_lock+15>: 0x0000000000000000 0x0000000000000000 0x7ff1e9e6077f <_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
  • यदि हम इस स्थान पर आकार 0x200 का एक तेज चंक प्राप्त कर लेते हैं, तो एक फ़ंक्शन पॉइंटर को ओवरराइट करना संभव होगा जो कार्यान्वित होगा
  • इसके लिए, आकार 0xfc का एक नया चंक बनाया जाता है और मर्ज़ कार्य को उस पॉइंटर के साथ दो बार बुलाया जाता है, इस तरह हम तेज बिन में आकार 0xfc*2 = 0x1f8 के एक फ्री चंक का पॉइंटर प्राप्त करते हैं।
  • फिर, इस चंक में संपादन कार्य को बुलाया जाता है ताकि इस तेज बिन का fd पता पिछले __free_hook फ़ंक्शन की ओर इशारा करे।
  • फिर, आकार 0x1f8 के एक चंक बनाया जाता है ताकि तेज बिन से पिछला अफ़ाल चंक प्राप्त किया जा सके ताकि एक और चंक आकार 0x1f8 बनाया जा सके जिससे __free_hook में एक तेज बिन चंक प्राप्त किया जा सके जिसे system फ़ंक्शन का पता ओवरराइट किया जाता है।
  • और अंत में /bin/sh\x00 स्ट्रिंग को समेटने वाला एक चंक मुक्त किया जाता है, हटाने कार्य को बुलाया जाता है, जो __free_hook फ़ंक्शन को ट्रिगर करता है जो सिस्टम के साथ /bin/sh\x00 के पैरामीटर के साथ इशारा करता है।
  • CTF https://guyinatuxedo.github.io/33-custom_misc_heap/csaw19_traveller/index.html
  • एक और उदाहरण जो अनसॉर्टेड बिन में चंक को समेटने और एक libc इन्फोलीक प्राप्त करने और फिर एक फ़ास्ट बिन हमला करने के लिए 1B ओवरफ़्लो का दुरुपयोग करता है ताकि मैलोक हुक को एक वन गैजेट पता के साथ ओवरराइट किया जा सके
Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

Other ways to support HackTricks: