Double Free
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यदि आप एक मेमोरी ब्लॉक को एक से अधिक बार मुक्त करते हैं, तो यह आवंटक के डेटा को गड़बड़ कर सकता है और हमलों के लिए दरवाजे खोल सकता है। यह कैसे होता है: जब आप एक मेमोरी ब्लॉक को मुक्त करते हैं, तो यह मुक्त टुकड़ों की सूची में वापस चला जाता है (जैसे "फास्ट बिन")। यदि आप एक ही ब्लॉक को लगातार दो बार मुक्त करते हैं, तो आवंटक इसे पहचानता है और एक त्रुटि फेंकता है। लेकिन यदि आप बीच में एक और टुकड़ा मुक्त करते हैं, तो डबल-फ्री जांच को बायपास किया जाता है, जिससे भ्रष्टाचार होता है।
अब, जब आप नई मेमोरी के लिए पूछते हैं ( malloc
का उपयोग करके), तो आवंटक आपको एक ब्लॉक दे सकता है जिसे दो बार मुक्त किया गया है। इससे दो अलग-अलग पॉइंटर्स एक ही मेमोरी स्थान की ओर इशारा कर सकते हैं। यदि एक हमलावर उन पॉइंटर्स में से एक को नियंत्रित करता है, तो वे उस मेमोरी की सामग्री को बदल सकते हैं, जो सुरक्षा समस्याओं का कारण बन सकता है या यहां तक कि उन्हें कोड निष्पादित करने की अनुमति भी दे सकता है।
Example:
इस उदाहरण में, कई मुक्त किए गए चंक्स (7) के साथ tcache भरने के बाद, कोड चंक h
को मुक्त करता है, फिर चंक i
को, और फिर h
को फिर से, जिससे एक डबल फ्री होती है (जिसे Fast Bin dup भी कहा जाता है)। यह पुनः आवंटन के समय ओवरलैपिंग मेमोरी पते प्राप्त करने की संभावना खोलता है, जिसका अर्थ है कि दो या अधिक पॉइंटर्स एक ही मेमोरी स्थान की ओर इशारा कर सकते हैं। एक पॉइंटर के माध्यम से डेटा में हेरफेर करने से दूसरे पर प्रभाव पड़ सकता है, जिससे एक महत्वपूर्ण सुरक्षा जोखिम और शोषण की संभावना उत्पन्न होती है।
इसे निष्पादित करते समय, ध्यान दें कि i1
और i2
को वही पता मिला:
हम केवल Fast-Bin आकार के चंक्स आवंटित कर सकते हैं सिवाय आकार 0x70
के, जो सामान्य __malloc_hook
ओवरराइट को रोकता है।
इसके बजाय, हम Fast Bin dup (1/2 मौका) के लिए लक्ष्य के रूप में 0x56
से शुरू होने वाले PIE पते का उपयोग करते हैं।
एक स्थान जहाँ PIE पते संग्रहीत होते हैं वह है main_arena
, जो Glibc के अंदर है और __malloc_hook
के पास है।
हम main_arena
के एक विशिष्ट ऑफसेट को लक्षित करते हैं ताकि वहां एक चंक आवंटित किया जा सके और __malloc_hook
तक पहुंचने के लिए चंक्स को आवंटित करना जारी रखें ताकि कोड निष्पादन प्राप्त किया जा सके।
Tcache बिन और एक नल-बाइट ओवरफ्लो का उपयोग करके, हम एक डबल-फ्री स्थिति प्राप्त कर सकते हैं:
हम आकार 0x110
के तीन चंक्स (A
, B
, C
) आवंटित करते हैं
हम B
को मुक्त करते हैं
हम A
को मुक्त करते हैं और नल-बाइट ओवरफ्लो का उपयोग करने के लिए फिर से आवंटित करते हैं
अब B
का आकार क्षेत्र 0x100
है, 0x111
के बजाय, इसलिए हम इसे फिर से मुक्त कर सकते हैं
हमारे पास एक Tcache-बिन है जिसका आकार 0x110
है और एक जिसका आकार 0x100
है जो एक ही पते की ओर इशारा करते हैं। इसलिए हमारे पास एक डबल फ्री है।
हम Tcache poisoning का उपयोग करके डबल फ्री का लाभ उठाते हैं।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)