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

83 lines
15 KiB
Markdown
Raw Normal View History

# अनसॉर्टेड बिन हमला
<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) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](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>
## मौलिक जानकारी
अनसॉर्टेड बिन क्या है इसके बारे में अधिक जानकारी के लिए इस पेज की जाँच करें:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
अनसॉर्टेड सूचियों के लिए `unsorted_chunks (av)` के पते को चंक के `bk` पते में लिखने की क्षमता होती है। इसलिए, यदि कोई हमलावर अनसॉर्टेड बिन के अंदर एक चंक में `bk` पॉइंटर का पता **संशोधित कर सकता है**, तो वह **किसी भी पते में उस पते को लिख सकता है** जो एक libc पते लीक करने या कुछ रक्षा को छलने में मददगार हो सकता है।
इसलिए, मौलिक रूप से, यह हमला किसी भी बड़ी संख्या के साथ **किसी भी अर्बिट्रेरी पते को अधिक करने की अनुमति देता है** (जो एक हीप पता या एक libc पता हो सकता है) जैसे कि कुछ स्टैक पता जो लीक हो सकता है या कुछ प्रतिबंध जैसे **`global_max_fast`** जैसे ग्लोबल चर को बड़े आकार के फास्ट बिन बिन्स बनाने की अनुमति देने के लिए (और एक अनसॉर्टेड बिन हमले से एक तेज बिन हमले में पास करने के लिए)।
{% hint style="success" %}
[https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) में प्रदान किए गए उदाहरण को देखने और 0x400 और 0x500 की बजाय 0x4000 और 0x5000 का उपयोग करने से (tcaches को टालने के लिए) आप देख सकते हैं कि **आजकल** त्रुटि **`malloc(): unsorted double linked list corrupted`** ट्रिगर होती है।
इसलिए, इस अनसॉर्टेड बिन हमले को अब (अन्य जांचों के बीच) डबल लिंक्ड सूची को ठीक करने की क्षमता भी होनी चाहिए ताकि यह बाईपास हो `victim->bck->fd == victim` या नहीं `victim->fd == av (arena)`। जिसका मतलब है कि हमें जहां पता लिखना चाहते हैं, उसके `fd` स्थान में नकली चंक का पता होना चाहिए और नकली चंक `fd` एरियना को पॉइंट करना चाहिए।
{% endhint %}
{% hint style="danger" %}
ध्यान दें कि यह हमला अनसॉर्टेड बिन को क्षति पहुंचाता है (इसलिए छोटे और बड़े भी)। इसलिए अब हम सिर्फ **फास्ट बिन से आवंटन का उपयोग कर सकते हैं** (एक अधिक जटिल कार्यक्रम अन्य आवंटन कर सकता है और क्रैश हो सकता है), और इसे ट्रिगर करने के लिए हमें **एक ही आकार का आवंटन करना होगा या कार्यक्रम क्रैश हो जाएगा।**
ध्यान दें कि इस मामले में **`global_max_fast`** बनाना इस मामले में मददगार हो सकता है, जिसमें भरोसा करना है कि फास्ट बिन सभी अन्य आवंटन का ध्यान रखेगा जब तक उत्पादन पूरा नहीं हो जाता है।
{% endhint %}
[**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) के कोड से यह बहुत अच्छे से समझाता है, हालांकि यदि आप मैलोकों को इतना बड़ा आवंटन करने के लिए संशोधित करते हैं ताकि एक टीकैच में समाप्त न हों, तो आप देख सकते हैं कि पहले उल्लिखित त्रुटि आती है जो इस तकनीक को रोकती है: **`malloc(): unsorted double linked list corrupted`**
## अनसॉर्टेड बिन इनफोलीक हमला
यह वास्तव में एक बहुत मौलिक अवधारणा है। अनसॉर्टेड बिन में चंक्स के पास बिन बनाने के लिए डबल पॉइंटर होते हैं। अनसॉर्टेड बिन में पहला चंक वास्तव में **FD** और **BK** लिंक्स **मुख्य एरियना (libc)** के एक हिस्से को पॉइंट करेगा।\
इसलिए, यदि आप **एक चंक को अनसॉर्टेड बिन में डाल सकते हैं और इसे पढ़ सकते हैं** (उपयोग के बाद मुक्त करें) या **इसे फिर से आवंटित कर सकते हैं बिना कम से कम 1 पॉइंटर को ओवरराइट किए** तो फिर आपके पास एक **libc इन्फो लीक** हो सकता है।
इस लेख में [**उपयोग किया गया हमला**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), एक 4 चंक्स संरचना (A, B, C और D - D केवल शीर्ष चंक के साथ समेलन को रोकने के लिए) का दुरुपयोग किया गया था, ताकि B में एक नल बाइट ओवरफ्लो किया गया था ताकि C को इसका इंडिकेट करने के लिए कि B अप्रयुक्त था। साथ ही, B में `prev_size` डेटा संशोधित किया गया था ताकि आकार B का न होकर A+B हो।\
फिर C को मुक्त किया गया, और A+B के साथ समेलिट किया गया (लेकिन B अभी भी उपयोग में था)। A के आकार का एक नया चंक आवंटित किया गया और फिर लीक होने वाले libc पतों को B में लिखा गया जहां से वे लीक हो गए।
## संदर्भ और अन्य उदाहरण
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* लक्ष्य एक ग्लोबल चर को 4869 से अधिक मान के साथ ओवरराइट करना है ताकि झंडा मिल सके और PIE सक्षम नहीं है।
* विचारणीय आकारों के चंक उत्पन्न किए जा सकते हैं और एक इच्छित आकार के हीप ओवरफ्लो है।
* हमला शुरू होता है 3 चंक्स बनाकर: चंक0 ओवरफ्लो का दुरुपयोग करने के लिए, चंक1 ओवरफ्लो किया जाने के लिए और चंक2 ताकि शीर्ष चंक पिछले वालों को समेलन न करें।
* फिर, चंक1 को मुक्त किया गया और चंक0 को ओवरफ्लो किया गया ताकि चंक1 का `bk` पॉइंट
</strong>0x7ff1e9e6075f: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6076f &#x3C;list_all_lock+15>: 0x0000000000000000 0x0000000000000000
0x7ff1e9e6077f &#x3C;_IO_stdfile_2_lock+15>: 0x0000000000000000 0x0000000000000000
</code></pre>
* यदि हम इस स्थान पर आकार 0x200 का एक तेज चंक प्राप्त कर लेते हैं, तो एक फ़ंक्शन पॉइंटर को ओवरराइट करना संभव होगा जो कार्यान्वित होगा
* इसके लिए, आकार `0xfc` का एक नया चंक बनाया जाता है और मर्ज़ कार्य को उस पॉइंटर के साथ दो बार बुलाया जाता है, इस तरह हम तेज बिन में आकार `0xfc*2 = 0x1f8` के एक फ्री चंक का पॉइंटर प्राप्त करते हैं।
* फिर, इस चंक में संपादन कार्य को बुलाया जाता है ताकि इस तेज बिन का **`fd`** पता पिछले **`__free_hook`** फ़ंक्शन की ओर इशारा करे।
* फिर, आकार `0x1f8` के एक चंक बनाया जाता है ताकि तेज बिन से पिछला अफ़ाल चंक प्राप्त किया जा सके ताकि एक और चंक आकार `0x1f8` बनाया जा सके जिससे **`__free_hook`** में एक तेज बिन चंक प्राप्त किया जा सके जिसे **`system`** फ़ंक्शन का पता ओवरराइट किया जाता है।
* और अंत में `/bin/sh\x00` स्ट्रिंग को समेटने वाला एक चंक मुक्त किया जाता है, हटाने कार्य को बुलाया जाता है, जो **`__free_hook`** फ़ंक्शन को ट्रिगर करता है जो सिस्टम के साथ `/bin/sh\x00` के पैरामीटर के साथ इशारा करता है।
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* एक और उदाहरण जो अनसॉर्टेड बिन में चंक को समेटने और एक libc इन्फोलीक प्राप्त करने और फिर एक फ़ास्ट बिन हमला करने के लिए 1B ओवरफ़्लो का दुरुपयोग करता है ताकि मैलोक हुक को एक वन गैजेट पता के साथ ओवरराइट किया जा सके
<details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Other ways to support HackTricks:
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share your hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>