WWW2Exec - __malloc_hook & __free_hook
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)
जैसा कि आप Official GNU site पर देख सकते हैं, __malloc_hook
एक पॉइंटर है जो एक फ़ंक्शन के पते की ओर इशारा करता है जिसे malloc()
के कॉल होने पर कॉल किया जाएगा जो libc लाइब्रेरी के डेटा सेक्शन में संग्रहीत है। इसलिए, यदि इस पते को एक One Gadget से ओवरराइट किया जाता है और malloc
को कॉल किया जाता है, तो One Gadget को कॉल किया जाएगा।
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।
इसका दुरुपयोग एक तेज़ बिन हमले के उदाहरण में किया गया था, जिसके बाद एक अनसॉर्टेड बिन हमले का दुरुपयोग किया गया था:
यदि बाइनरी में प्रतीक हैं तो __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
का एक चंक बनाया जाता है ताकि फास्ट बिन से पिछले बेकार चंक को पुनः प्राप्त किया जा सके, ताकि आकार 0x1f8
का एक और चंक बनाया जा सके ताकि __free_hook
में एक फास्ट बिन चंक प्राप्त किया जा सके जिसे system
फ़ंक्शन के पते के साथ ओवरराइट किया जाता है।
और अंत में, एक चंक जिसमें स्ट्रिंग /bin/sh\x00
है, को डिलीट फ़ंक्शन को कॉल करके मुक्त किया जाता है, जो __free_hook
फ़ंक्शन को ट्रिगर करता है जो /bin/sh\x00
को पैरामीटर के रूप में सिस्टम की ओर इंगित करता है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)