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

49 lines
11 KiB
Markdown

# Tcache Bin हमला
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी को **HackTricks में विज्ञापित करना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सदस्यता योजनाएं देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें, हमारा संग्रह अनन्य [**NFTs**](https://opensea.io/collection/the-peass-family)
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** पर **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## मूल जानकारी
एक tcache bin क्या है इसके बारे में अधिक जानकारी के लिए इस पृष्ठ की जाँच करें:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
सबसे पहले, ध्यान दें कि Tcache को glibc संस्करण 2.26 में पेश किया गया था।
[**गायिनाटुक्सीडो पेज**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) में प्रस्तावित **Tcache** हमला तेज बिन हमले के बहुत ही समान है जहाँ लक्ष्य है कि एक मुक्त चंक में बिन के अंदर अगले चंक के पॉइंटर को एक विचित पते पर ओवरराइट करना ताकि बाद में उस विशेष पते को आवंटित किया जा सके और संभावित रूप से पॉइंटर्स को ओवरराइट किया जा सके।
हालांकि, आजकल, यदि आप उल्लिखित कोड को चलाते हैं तो आपको त्रुटि मिलेगी: **`malloc(): unaligned tcache chunk detected`**। इसलिए, नए पॉइंटर में एक संरेखित पता लिखना आवश्यक है (या यह लिखने के लिए पर्याप्त बार बाइनरी को चलाना होगा ताकि लिखा गया पता वास्तव में संरेखित हो)।
### Tcache इंडेक्स हमला
सामान्यत: हीप की शुरुआत में एक चंक मिल सकता है जिसमें **tcache में प्रति इंडेक्स चंक की मात्रा** और **प्रत्येक tcache इंडेक्स के मुख्य चंक का पता** होता है। यदि किसी कारणवश इस जानकारी को संशोधित किया जा सकता है, तो यह संभव होगा कि **किसी इंडेक्स के मुख्य चंक को एक इच्छित पते पर पहुंचाया जा सके** (जैसे malloc हुक) ताकि फिर उस इंडेक्स के आकार का चंक आवंटित किया जा सके और इस मामले में malloc हुक की सामग्री को ओवरराइट किया जा सके।
## उदाहरण
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](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](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](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* यहाँ मुख्य दोष है कि किसी भी पते को हीप में `मुक्त` करने की क्षमता है जिसका ऑफसेट दिखाता है
* **Tcache इंडेक्स हमला**: एक ऐसा आकार आवंटित और मुक्त करने की संभावना है जिसे tcache चंक में संग्रहित किया जाएगा (tcache बिनों की जानकारी वाला चंक) जो मान 0x100 के मान का पता लगाएगा। यह इसलिए है क्योंकि tcache अलग-अलग बाइट्स में हर बिन में चंकों की मात्रा संग्रहित करता है, इसलिए एक विशिष्ट इंडेक्स में एक चंक एक विशिष्ट इंडेक्स में मान 0x100 उत्पन्न करता है।
* फिर, यह मान ऐसा दिखता है कि 0x100 के आकार का एक चंक है। इस पते को `मुक्त` करने से यह चंकों के इंडेक्स में 0x100 के आकार के चंकों का पता जोड़ देगा।
* फिर, **आकार 0x100** का एक चंक आवंटित करना, पिछला पता एक चंक के रूप में लौटाया जाएगा, जो अन्य tcache इंडेक्स को ओवरराइट करने की अनुमति देगा।\
उदाहरण के लिए उस इंडेक्स में malloc