WWW2Exec - __malloc_hook & __free_hook
मैलोक हुक
जैसा कि आप आधिकारिक जीएनयू साइट से जान सकते हैं, चर __malloc_hook
एक पॉइंटर है जो malloc()
को कॉल करने पर बुलाई जाएगी उस फ़ंक्शन के पते की ओर पॉइंट करता है जो लिबसी पुस्तकालय के डेटा सेक्शन में स्टोर होता है। इसलिए, यदि इस पते को ओवरराइट किया जाता है एक वन गैजेट के साथ उदाहरण के लिए और malloc
को कॉल किया जाता है, तो वन गैजेट को कॉल किया जाएगा।
malloc
को कॉल करने के लिए कार्यक्रम को इसे कॉल करने का इंतजार करना संभव है या printf("%10000$c")
को कॉल करके जिससे बहुत सारे बाइट्स आवंटित हो जाएं जिससे libc
को उन्हें हीप में आवंटित करने के लिए malloc
को कॉल करना पड़े।
वन गैजेट के बारे में अधिक जानकारी:
One Gadgetध्यान दें कि हुक GLIBC >= 2.34 के लिए अक्षम हैं। आधुनिक GLIBC संस्करणों पर उपयोग किए जा सकने वाले अन्य तकनीक हैं। देखें: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md।
फ्री हुक
इसे एक उदाहरण में दुरुपयोग किया गया था पेज से एक तेज बिन हमल के बाद एक अनुक्रमित बिन हमल का:
Unsorted Bin Attackयदि बाइनरी में प्रतीक हैं, तो निम्नलिखित कमांड के साथ __free_hook
का पता लगाना संभव है:
इस पोस्ट में आपको सिखाया गया है कि कैसे सिम्बल के बिना फ्री हुक का पता लगाया जा सकता है। सारांश में, फ्री फंक्शन में:
पिछले कोड में उल्लिखित ब्रेक में $eax
में फ्री हुक का पता होगा।
अब एक फास्ट बिन हमला किया जाता है:
सबसे पहले यह पता चलता है कि
__free_hook
स्थान पर फास्ट चंक्स के आकार 200 के साथ काम करना संभव है:
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook> gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
0x7ff1e9e6074f: 0x0000000000000000 0x0000000000000200
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
के एक चंक बनाया जाता है ताकि फास्ट बिन से पिछले बेकार चंक को पुनः प्राप्त किया जा सके ताकि__free_hook
में एक फास्ट बिन चंक प्राप्त किया जा सके जिसेsystem
फ़ंक्शन के पते से ओवरराइट किया जाता है।और अंत में
/bin/sh\x00
स्ट्रिंग को समेटने वाला एक चंक मुक्त किया जाता है डिलीट फ़ंक्शन को कॉल करके, जो__free_hook
फ़ंक्शन को ट्रिगर करता है जो सिस्टम के साथ/bin/sh\x00
के पैरामीटर के साथ पॉइंट करता है।
संदर्भ
Last updated