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 से है। टिप्पणियाँ अधिक अच्छी तरह से समझने के लिए जोड़ी गई हैं:
इसका उपयोग किया जा सकता है libc के global_max_fast
ग्लोबल वेरिएबल को ओवरराइट करने के लिए और फिर बड़े चंक्स के साथ एक फास्ट बिन हमला का शिकार बनने के लिए।
आप इस हमले की एक और शानदार व्याख्या को guyinatuxedo में भी पा सकते हैं।
अन्य उदाहरण
एक ही स्थिति में बड़े बिन हमला जैसा दिखाई देता है how2heap में।
लेखन प्राथमिकता अधिक जटिल है, क्योंकि यहाँ
global_max_fast
अनुपयोगी है।एक्सप्लॉइट समाप्त करने के लिए FSOP की आवश्यकता है।
Last updated