hacktricks/binary-exploitation/heap/tcache-bin-attack.md

11 KiB

Tcache Bin हमला

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

मूल जानकारी

एक tcache bin क्या है इसके बारे में अधिक जानकारी के लिए इस पृष्ठ की जाँच करें:

{% content-ref url="bins-and-memory-allocations.md" %} bins-and-memory-allocations.md {% endcontent-ref %}

सबसे पहले, ध्यान दें कि Tcache को glibc संस्करण 2.26 में पेश किया गया था।

गायिनाटुक्सीडो पेज में प्रस्तावित Tcache हमला तेज बिन हमले के बहुत ही समान है जहाँ लक्ष्य है कि एक मुक्त चंक में बिन के अंदर अगले चंक के पॉइंटर को एक विचित पते पर ओवरराइट करना ताकि बाद में उस विशेष पते को आवंटित किया जा सके और संभावित रूप से पॉइंटर्स को ओवरराइट किया जा सके।

हालांकि, आजकल, यदि आप उल्लिखित कोड को चलाते हैं तो आपको त्रुटि मिलेगी: malloc(): unaligned tcache chunk detected। इसलिए, नए पॉइंटर में एक संरेखित पता लिखना आवश्यक है (या यह लिखने के लिए पर्याप्त बार बाइनरी को चलाना होगा ताकि लिखा गया पता वास्तव में संरेखित हो)।

Tcache इंडेक्स हमला

सामान्यत: हीप की शुरुआत में एक चंक मिल सकता है जिसमें tcache में प्रति इंडेक्स चंक की मात्रा और प्रत्येक tcache इंडेक्स के मुख्य चंक का पता होता है। यदि किसी कारणवश इस जानकारी को संशोधित किया जा सकता है, तो यह संभव होगा कि किसी इंडेक्स के मुख्य चंक को एक इच्छित पते पर पहुंचाया जा सके (जैसे malloc हुक) ताकि फिर उस इंडेक्स के आकार का चंक आवंटित किया जा सके और इस मामले में malloc हुक की सामग्री को ओवरराइट किया जा सके।

उदाहरण

  • CTF https://guyinatuxedo.github.io/29-tcache/dcquals19_babyheap/index.html
  • Libc जानकारी लीक: Tcaches को भरना संभव है, असंगठित सूची में एक चंक जोड़ना, tcache को खाली करना और असंगठित बिन से चंक को पुनः आवंटित करना केवल पहले 8B को ओवरराइट करते हुए, चंक से दूसरा पता libc से अविक्षित रखना ताकि हम इसे पढ़ सकें
  • Tcache हमला: बाइनरी में एक 1B हीप ओवरफ्लो है। इसे बड़ा करने के लिए एक आवंटित चंक के आकार हेडर को बदलने के लिए इसका दुरुपयोग किया जाएगा। फिर, यह चंक मुक्त किया जाएगा, इसे नकली आकार के tcache चंकों के tcache में जोड़ दिया जाएगा। फिर, हम एक चंक आवंटित करेंगे जिसमें नकली आकार होगा, और पिछला चंक वापस दिया जाएगा जानते हुए कि यह चंक वास्तव में छोटा था और यह संभावना देता है कि मेमोरी में अगले चंक को ओवरराइट किया जाए
    हम इसका दुरुपयोग करेंगे ताकि अगले चंक का FD पॉइंटर ओवरराइट करने के लिए malloc_hook को पॉइंट करें, तो फिर यह संभव होगा कि 2 पॉइंटर्स आवंटित किए जाएं: पहला वास्तविक पॉइंटर जिसे हमने अभी किया है, और फिर दूसरा आवंटन malloc_hook में एक चंक लौटाएगा जिसे हम एक वन गैजेट लिखने के लिए दुरुपयोग कर सकते हैं।
  • CTF https://guyinatuxedo.github.io/29-tcache/plaid19_cpp/index.html
  • Libc जानकारी लीक: यहाँ एक उपयोग के बाद मुक्ति और डबल मुक्ति है। इस व्रिटअप में लेखक ने एक छोटे बिन में रखे गए एक चंक के पते को पढ़कर libc का पता लगाया।
  • Tcache हमला: एक डबल मुक्ति के माध्यम से एक Tcache किया जाता है। एक ही चंक को दो बार मुक्त किया जाता है, इसलिए Tcache के अंदर चंक खुद को पॉइंट करेगा। फिर, इसे आवंटित किया जाएगा, इसका FD पॉइंटर फ्री हुक को पॉइंट करने के लिए संशोधित किया जाएगा और फिर यह फिर से आवंटित किया जाएगा ताकि सूची में अगला चंक फ्री हुक में हो। फिर, यह भी आवंटित किया जाएगा और यह संभव होगा कि यहाँ system का पता लिखा जाए ताकि जब "/bin/sh" शामिल malloc किया जाए तो हमें एक शैल मिले।
  • CTF https://guyinatuxedo.github.io/44-more_tcache/csaw19_popping_caps0/index.html
  • यहाँ मुख्य दोष है कि किसी भी पते को हीप में मुक्त करने की क्षमता है जिसका ऑफसेट दिखाता है
  • Tcache इंडेक्स हमला: एक ऐसा आकार आवंटित और मुक्त करने की संभावना है जिसे tcache चंक में संग्रहित किया जाएगा (tcache बिनों की जानकारी वाला चंक) जो मान 0x100 के मान का पता लगाएगा। यह इसलिए है क्योंकि tcache अलग-अलग बाइट्स में हर बिन में चंकों की मात्रा संग्रहित करता है, इसलिए एक विशिष्ट इंडेक्स में एक चंक एक विशिष्ट इंडेक्स में मान 0x100 उत्पन्न करता है।
  • फिर, यह मान ऐसा दिखता है कि 0x100 के आकार का एक चंक है। इस पते को मुक्त करने से यह चंकों के इंडेक्स में 0x100 के आकार के चंकों का पता जोड़ देगा।
  • फिर, आकार 0x100 का एक चंक आवंटित करना, पिछला पता एक चंक के रूप में लौटाया जाएगा, जो अन्य tcache इंडेक्स को ओवरराइट करने की अनुमति देगा।
    उदाहरण के लिए उस इंडेक्स में malloc