Large Bin Attack

हैकट्रिक्स का समर्थन करें

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

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

Bins & Memory Allocations

एक महान उदाहरण ढूंढना संभव है how2heap - large bin attack.

मुख्य रूप से यहाँ आप देख सकते हैं कि, नवीनतम "वर्तमान" संस्करण में glibc (2.35), यह नहीं जांचा गया है: P->bk_nextsize जिससे कि यदि कुछ शर्तें पूरी होती हैं तो एक बड़े बिन चंक के मान के साथ किसी भी पता को संशोधित करने की अनुमति है।

उस उदाहरण में आप निम्नलिखित शर्तें पाएंगे:

  • एक बड़ा चंक आवंटित किया गया है

  • पहले चंक से छोटा एक बड़ा चंक उसी सूची में आवंटित किया गया है

  • इसे इसलिए छोटा होना चाहिए क्योंकि यह सूची में पहले जाना चाहिए

  • (शीर्ष चंक के साथ मिलान नहीं होने देने के लिए एक चंक बनाया गया है)

  • फिर, पहला बड़ा चंक मुक्त किया जाता है और एक नया चंक उससे बड़ा आवंटित किया जाता है -> चंक1 बड़े बिन में जाता है

  • फिर, दूसरा बड़ा चंक मुक्त किया जाता है

  • अब, सुरक्षा दोष: हमलावर chunk1->bk_nextsize को [लक्ष्य-0x20] पर संशोधित कर सकता है

  • फिर, चंक 2 से बड़ा चंक आवंटित किया जाता है, इसलिए चंक2 बड़े बिन में डाला जाता है और पता chunk1->bk_nextsize->fd_nextsize को चंक2 के पते से अधिलेखित कर देता है

अन्य संभावित परिदृश्य हैं, यह बड़े बिन में एक चंक जो किसी वर्तमान X चंक से छोटा है जोड़ना है, इसलिए यह उससे पहले उसमें डालने की आवश्यकता है, और हमें X को संशोधित करने की क्षमता होनी चाहिए bk_nextsize क्योंकि यहाँ छोटे चंक का पता लिखा जाएगा।

यह मैलोक कोड malloc से है। टिप्पणियाँ अधिक अच्छी तरह से समझने के लिए जोड़ी गई हैं:

/* if smaller than smallest, bypass loop below */
assert (chunk_main_arena (bck->bk));
if ((unsigned long) (size) < (unsigned long) chunksize_nomask (bck->bk))
{
fwd = bck; // fwd = p1
bck = bck->bk; // bck = p1->bk

victim->fd_nextsize = fwd->fd; // p2->fd_nextsize = p1->fd (Note that p1->fd is p1 as it's the only chunk)
victim->bk_nextsize = fwd->fd->bk_nextsize; // p2->bk_nextsize = p1->fd->bk_nextsize
fwd->fd->bk_nextsize = victim->bk_nextsize->fd_nextsize = victim; // p1->fd->bk_nextsize->fd_nextsize = p2
}

इसका उपयोग किया जा सकता है libc के global_max_fast ग्लोबल वेरिएबल को ओवरराइट करने के लिए और फिर बड़े चंक्स के साथ एक फास्ट बिन हमला का शिकार बनने के लिए।

आप इस हमले की एक और शानदार व्याख्या को guyinatuxedo में भी पा सकते हैं।

अन्य उदाहरण

  • एक ही स्थिति में बड़े बिन हमला जैसा दिखाई देता है how2heap में।

  • लेखन प्राथमिकता अधिक जटिल है, क्योंकि यहाँ global_max_fast अनुपयोगी है।

  • एक्सप्लॉइट समाप्त करने के लिए FSOP की आवश्यकता है।

HackTricks का समर्थन करें

Last updated