Fast Bin Attack
मौलिक जानकारी
फास्ट बिन क्या है इसके बारे में अधिक जानकारी के लिए इस पेज की जाँच करें:
Bins & Memory Allocationsक्योंकि फास्ट बिन एक सिंगली लिंक्ड सूची है, इसमें अन्य बिन्स की तुलना में कम सुरक्षा होती है और किसी भी मेमोरी पते में चंक को बाद में आवंटित करने के लिए एक फ्रीड फास्ट बिन चंक में एक पते को संशोधित करना पर्याप्त है।
सारांश में:
आप एक पूर्ण उदाहरण यहाँ से पा सकते हैं जिसमें एक बहुत अच्छी तरह से समझाया गया कोड है https://guyinatuxedo.github.io/28-fastbin_attack/explanation_fastbinAttack/index.html:
यदि ग्लोबल वेरिएबल global_max_fast
की मान को एक बड़ी संख्या से अधिलेखित किया जा सकता है, तो यह बड़े आकार के फास्ट बिन चंक उत्पन्न करने की अनुमति देता है, जिससे पहले संभावना नहीं थी। इस स्थिति का उपयोग बड़े बिन हमला और अनसॉर्टेड बिन हमला के संदर्भ में उपयुक्त है।
उदाहरण
चंक आवंटित करना संभव है, उन्हें मुक्त करना, उनकी सामग्री पढ़ना और उन्हें भरना (एक ओवरफ्लो दुरुपयोगिता के साथ)।
जानकारी लीक के लिए चंक को समेटें: तकनीक आमतौर पर ओवरफ्लो का दुरुपयोग करना है ताकि एक नकली
prev_size
बनाया जा सके ताकि एक पिछला चंक एक बड़े चंक में डाला जाए, इसलिए जब एक और चंक वाला बड़ा चंक आवंटित किया जाता है, तो उसकी डेटा को प्रिंट करना संभव है और libc (main_arena+88
) का पता लगाना संभव है।मैलोक हुक को अधिलेखित करें: इसके लिए, और पिछले ओवरलैपिंग स्थिति का दुरुपयोग करने के लिए, दो चंक होने की संभावना थी जो एक ही स्मृति को दर्शा रहे थे। इसलिए, उन्हें दोनों मुक्त करना (सुरक्षा प्रोटेक्शन से बचने के लिए बीच में एक और चंक को मुक्त करना) संभव था कि फास्ट बिन में एक ही चंक दो बार हो। फिर, इसे फिर से आवंटित करना संभव था, अगले चंक के पते को
__malloc_hook
के एक बिट पहले पहुंचाने के लिए अधिलेखित करना संभव था (ताकि यह एक निःशुल्क आकार मानता है - एक और बायपास), इसे फिर से आवंटित करना और फिर एक चंक आवंटित करना जो मैलोक हुक्स को प्राप्त करेगा। अंत में एक वन गैजेट वहां लिखा गया था।एक हीप ओवरफ्लो और उसके बाद का उपयोग फ्री और डबल फ्री करने के कारण होता है क्योंकि जब एक चंक मुक्त किया जाता है तो संभव है कि पॉइंटर्स को पुनः उपयोग किया जा सकता है और पुनः मुक्त किया जा सकता है
Libc जानकारी लीक: कुछ चंक्स को मुक्त करें और उन्हें मुख्य एरिना स्थान के एक हिस्से का पॉइंटर मिलेगा। जैसे ही आप मुक्त पॉइंटर्स को पुनः उपयोग कर सकते हैं, इस पते को पढ़ें।
फास्ट बिन हमला: सभी आवंटन के पॉइंटर्स को एक एरे में संग्रहीत किया जाता है, इसलिए हम कुछ फास्ट बिन चंक्स को मुक्त कर सकते हैं और अंतिम वाले में पते को अधिलेखित करने के लिए पता बदल सकते हैं। फिर, हमें एक बराबर आकार के कुछ चंक्स आवंटित करने की अनुमति है और हमें पहले वास्तविक चंक और फिर नकली चंक प्राप्त होगा जिसमें पॉइंटर्स का एरे होगा। अब हम इस आवंटन पॉइंटर्स को अधिलेखित करने के लिए इसे अधिलेखित कर सकते हैं ताकि
free
का GOT पताsystem
को पॉइंट करें और फिर चंक 1 में"/bin/sh"
लिखें ताकि फिरfree(chunk1)
को कॉल करने परsystem("/bin/sh")
का निष्पादन हो।अनसॉर्टेड बिन में एक बाइट ओवरफ्लो का दुरुपयोग करने का एक और उदाहरण और एक libc जानकारी लीक प्राप्त करने के बाद एक फास्ट बिन हमला करने के लिए एक मैलोक हुक को एक वन गैजेट पते के साथ अधिलेखित करने का उपयोग किया गया
एक जानकारी लीक का दुरुपयोग करने के बाद अनसॉर्टेड बिन का दुरुपयोग करने के बाद एक libc पता और एक PIE पता लीक करने के लिए, इस CTF का शिकार एक फास्ट बिन हमला करने का उपयोग किया गया था ताकि नियंत्रित चंक्स के पॉइंटर्स के पते लिखने के लिए एक चंक को आवंटित करना संभव हो। इसलिए कुछ फास्ट बिन हमलों को अधिलेखित करने से पहले लिब्स/हीप पतों का दुरुपयोग करना सामान्य है (जब आवश्यक हो)।
हम केवल
0x100
से अधिक आकार के चंक्स आवंटित कर सकते हैं।एक अनसॉर्टेड बिन हमले का उपयोग करके
global_max_fast
को अधिलेखित करें (ASLR के कारण 1/16 बार काम करता है, क्योंकि हमें 12 बिटों को संशोधित करने की आवश्यकता है, लेकिन हमें 16 बिटों को संशोधित करना है)।फास्ट बिन हमला एक ग्लोबल एरे को संशोधित करने के लिए। यह एक अर्बिट्रे रीड/राइट प्राइमिटिव देता है, जिससे कि GOT को संशोधित किया जा सकता है और किसी कार्य को
system
को पॉइंट करने के लिए सेट किया जा सकता है।
Last updated