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 का समर्थन करें

Malloc Hook

जैसा कि आप Official GNU site पर देख सकते हैं, __malloc_hook एक पॉइंटर है जो एक फ़ंक्शन के पते की ओर इशारा करता है जिसे malloc() के कॉल होने पर कॉल किया जाएगा libc लाइब्रेरी के डेटा सेक्शन में संग्रहीत। इसलिए, यदि इस पते को एक One Gadget से ओवरराइट किया जाता है और malloc को कॉल किया जाता है, तो One Gadget को कॉल किया जाएगा

malloc को कॉल करने के लिए, प्रोग्राम के इसे कॉल करने का इंतज़ार करना या printf("%10000$c") को कॉल करना संभव है, जो बहुत सारे बाइट्स आवंटित करता है जिससे libc को उन्हें हीप में आवंटित करने के लिए malloc कॉल करना पड़ता है।

One Gadget के बारे में अधिक जानकारी के लिए:

One Gadget

warning

ध्यान दें कि GLIBC >= 2.34 के लिए हुक निष्क्रिय हैं। आधुनिक GLIBC संस्करणों पर उपयोग की जाने वाली अन्य तकनीकें हैं। देखें: https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md.

Free Hook

इसका दुरुपयोग एक तेज़ बिन हमले के उदाहरण में किया गया था, जिसके बाद एक अनसॉर्टेड बिन हमले का दुरुपयोग किया गया था:

Unsorted Bin Attack

यदि बाइनरी में प्रतीक हैं तो __free_hook का पता लगाने के लिए निम्नलिखित कमांड का उपयोग किया जा सकता है:

bash
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 को पैरामीटर के रूप में इंगित करता है।

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें