12 KiB
House of Force
{% hint style="success" %}
सीखें और प्रैक्टिस करें AWS हैकिंग: HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE)
सीखें और प्रैक्टिस करें GCP हैकिंग: HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)
हैकट्रिक्स का समर्थन करें
- सब्सक्रिप्शन प्लान की जाँच करें!
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।
मूलभूत जानकारी
कोड
- यह तकनीक पैच की गई थी (यहाँ) और यह त्रुटि उत्पन्न करती है:
malloc(): corrupted top size
- आप इसे टेस्ट करने के लिए यहाँ से कोड का प्रयास कर सकते हैं।
लक्ष्य
- इस हमले का लक्ष्य एक विशिष्ट पते पर एक चंक को आवंटित करने की क्षमता होती है।
आवश्यकताएँ
- एक ओवरफ्लो जो शीर्ष चंक हेडर का आकार अधिलेखित करने की अनुमति देता है (उदा। -1)।
- हीप आवंटन का आकार नियंत्रित करने की क्षमता होना
हमला
यदि एक हमलावर किसी पते P पर एक चंक आवंटित करना चाहता है ताकि यहाँ का कोई मान अधिलेखित किया जा सके। वह -1
के साथ शीर्ष चंक का आकार अधिलेखित करके शुरू करता है (शायद एक ओवरफ्लो के साथ)। इससे यह सुनिश्चित होता है कि malloc किसी भी आवंटन के लिए mmap का उपयोग नहीं करेगा क्योंकि शीर्ष चंक में हमेशा पर्याप्त स्थान होगा।
फिर, शीर्ष चंक के पते और लक्ष्य स्थान के बीच की दूरी की गणना करें ताकि आवंटन के लिए उस आकार के साथ malloc किया जाए जिससे शीर्ष चंक को उस स्थिति में ले जाने के लिए। यह अंतर/आकार आसानी से गणित किया जा सकता है:
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/
इसलिए, target - old_top - 4*sizeof(long)
का आकार आवंटित करना (4 longs क्योंकि शीर्ष चंक और नए चंक के मेटाडेटा के कारण) शीर्ष चंक को हमें ओवरराइट करना चाहिए।
फिर, लक्ष्य पते पर एक चंक प्राप्त करने के लिए एक और मैलोक करें।
संदर्भ और अन्य उदाहरण
- https://github.com/shellphish/how2heap/tree/master
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/
- https://heap-exploitation.dhavalkapil.com/attacks/house_of_force
- https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c
- https://guyinatuxedo.github.io/41-house_of_force/house_force_exp/index.html
- https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_force/#hitcon-training-lab-11
- इस स्थिति का लक्ष्य एक ret2win है जहां हमें एक फ़ंक्शन का पता मॉडिफ़ाय करना है जिसे रिट2विन फ़ंक्शन द्वारा बुलाया जाएगा
- बाइनरी में एक ओवरफ्लो है जिसे बदला जा सकता है शीर्ष चंक का आकार, जो -1 या p64(0xffffffffffffffff) में बदल दिया जाता है
- फिर, ओवरराइट करने के लिए पॉइंटर का पता जहां ओवरराइट होना है, और वर्तमान स्थान से वहां शीर्ष चंक की अंतरिक्ष की गणना की जाती है, और
malloc
के साथ आवंटित की जाती है - अंत में एक नया चंक आवंटित किया जाता है जिसमें इस वांछित लक्ष्य को शामिल किया गया है जिसे रिट2विन फ़ंक्शन द्वारा ओवरराइट किया जाता है
- https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=en&_x_tr_pto=wapp
अपना नाम दर्ज करें:
में एक प्रारंभिक कमजोरी है जो हीप से एक पता लीक करने की अनुमति देती है- फिर
Org:
औरHost:
कार्यक्षमता में org name के लिए पूछा जाता है, जिसमें 64B कीs
पॉइंटर भरने की संभावना है, जो स्टैक में v2 के पते के बाद है, जिसके बाद निर्दिष्ट host name का पालन किया जाता है। फिर, strcpy का उस सामग्री की प्रतिलिपि एक 64B के आकार के टुकड़े में कॉपी करने जा रहा है, इससे शीर्ष चंक का आकार ओवरराइट किया जा सकता है जिसमें host name के भीतर डेटा डाला गया है। - अब जब विचारात्मक लेखन संभव है, तो
atoi
's GOT को printf के पते पर ओवरराइट किया गया था। इससेIO_2_1_stderr
का पता लीक करना संभव था%24$p
के साथ। और इस libc लीक के साथatoi
's GOT को फिर सेsystem
के पते से ओवरराइट करने और/bin/sh
के रूप में पैरामीटर के रूप में इसे कॉल करने की संभावना थी - एक वैकल्पिक विधि इस अन्य लेख में प्रस्तावित की गई,
free
कोputs
के साथ ओवरराइट करने और फिरatoi@got
का पता जोड़ने की अनुमति देने के लिए है, जिसे बाद में मुक्त किया जाएगा ताकि यह लीक हो और इस लीक के साथ फिर सेatoi@got
कोsystem
के साथ ओवरराइट करने और/bin/sh
के साथ इसे कॉल करने की संभावना थी। - https://guyinatuxedo.github.io/41-house_of_force/bkp16_cookbook/index.html
- एक UAF है जो एक चंक को पुनः उपयोग करने की अनुमति देता है जो बिना पॉइंटर को साफ किए हुए मुक्त किया गया था। क्योंकि कुछ पठन विधियाँ हैं, इससे एक libc पता लीक करना संभव है जो गोट में मुफ्त कार्य के लिए एक पॉइंटर लिखने और फिर कॉल करने के लिए पठन विधि को कॉल करने की संभावना है।
- फिर, फोर्स का घर उपयोग किया गया था (UAF का दुरुपयोग करके) बाएं अंतरिक्ष का आकार एक -1 के साथ ओवरराइट करने के लिए, एक चंक बड़ा पर्याप्त आवंटित करने के लिए मुक्त हुक तक पहुंचने के लिए, और फिर एक और चंक आवंटित किया जाता है जिसमें मुक्त हुक शामिल होगा। फिर, हुक में
system
का पता लिखें, एक चंक में"/bin/sh"
लिखें और अंत में उस तुकड़े को उस स्ट्रिंग सामग्री के साथ मुक्त करें।