WWW2Exec - __malloc_hook & __free_hook
Reading time: 5 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
Malloc Hook
जैसा कि आप Official GNU site पर देख सकते हैं, __malloc_hook
एक पॉइंटर है जो एक फ़ंक्शन के पते की ओर इशारा करता है जिसे malloc()
के कॉल होने पर कॉल किया जाएगा libc लाइब्रेरी के डेटा सेक्शन में संग्रहीत। इसलिए, यदि इस पते को एक One Gadget से ओवरराइट किया जाता है और malloc
को कॉल किया जाता है, तो One Gadget को कॉल किया जाएगा।
malloc
को कॉल करने के लिए, प्रोग्राम के इसे कॉल करने का इंतज़ार करना या printf("%10000$c")
को कॉल करना संभव है, जो बहुत सारे बाइट्स आवंटित करता है जिससे libc
को उन्हें हीप में आवंटित करने के लिए malloc
कॉल करना पड़ता है।
One Gadget के बारे में अधिक जानकारी के लिए:
warning
ध्यान दें कि GLIBC >= 2.34 के लिए हुक निष्क्रिय हैं। आधुनिक GLIBC संस्करणों पर उपयोग की जाने वाली अन्य तकनीकें हैं। देखें: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
Free Hook
इसका दुरुपयोग एक तेज़ बिन हमले के उदाहरण में किया गया था, जिसके बाद एक अनसॉर्टेड बिन हमले का दुरुपयोग किया गया था:
यदि बाइनरी में प्रतीक हैं तो __free_hook
का पता लगाने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है:
gef➤ p &__free_hook
इस पोस्ट में आप बिना प्रतीकों के फ्री हुक का पता लगाने के लिए चरण-दर-चरण गाइड पा सकते हैं। संक्षेप में, फ्री फ़ंक्शन में:
gef➤ x/20i free
0xf75dedc0 : push ebx
0xf75dedc1 : call 0xf768f625
0xf75dedc6 : add ebx,0x14323a
0xf75dedcc : sub esp,0x8
0xf75dedcf : mov eax,DWORD PTR [ebx-0x98]
0xf75dedd5 : mov ecx,DWORD PTR [esp+0x10]
0xf75dedd9 : mov eax,DWORD PTR [eax]--- यहाँ ब्रेक करें
0xf75deddb : test eax,eax ;<
0xf75deddd : jne 0xf75dee50
पिछले कोड में उल्लिखित ब्रेक में $eax
में फ्री हुक का पता स्थित होगा।
अब एक फास्ट बिन अटैक किया जाता है:
- सबसे पहले यह पता लगाया जाता है कि
__free_hook
स्थान पर 200 आकार के फास्ट चंक्स के साथ काम करना संभव है: gef➤ p &__free_hook
$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
में एक फास्ट बिन चंक प्राप्त करने के लिए0x1f8
आकार का एक और चंक बनाया जा सके, जिसेsystem
फ़ंक्शन के पते के साथ ओवरराइट किया जाता है। - और अंत में,
/bin/sh\x00
स्ट्रिंग वाला एक चंक डिलीट फ़ंक्शन को कॉल करके फ्री किया जाता है, जो__free_hook
फ़ंक्शन को ट्रिगर करता है जो सिस्टम को/bin/sh\x00
को पैरामीटर के रूप में इंगित करता है।
संदर्भ
- https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook
- https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।