House of Force
सीखें और प्रैक्टिस करें AWS हैकिंग: HackTricks प्रशिक्षण AWS रेड टीम एक्सपर्ट (ARTE) सीखें और प्रैक्टिस करें GCP हैकिंग: HackTricks प्रशिक्षण GCP रेड टीम एक्सपर्ट (GRTE)
मूलभूत जानकारी
कोड
यह तकनीक पैच की गई थी (यहाँ) और यह त्रुटि उत्पन्न करती है:
malloc(): corrupted top size
आप इसे टेस्ट करने के लिए यहाँ से कोड का प्रयास कर सकते हैं।
लक्ष्य
इस हमले का लक्ष्य एक विशिष्ट पते पर एक चंक को आवंटित करने की क्षमता होती है।
आवश्यकताएँ
एक ओवरफ्लो जो शीर्ष चंक हेडर का आकार अधिलेखित करने की अनुमति देता है (उदा। -1)।
हीप आवंटन का आकार नियंत्रित करने की क्षमता होना
हमला
यदि एक हमलावर किसी पते P पर एक चंक आवंटित करना चाहता है ताकि यहाँ का कोई मान अधिलेखित किया जा सके। वह -1
के साथ शीर्ष चंक का आकार अधिलेखित करके शुरू करता है (शायद एक ओवरफ्लो के साथ)। इससे यह सुनिश्चित होता है कि malloc किसी भी आवंटन के लिए mmap का उपयोग नहीं करेगा क्योंकि शीर्ष चंक में हमेशा पर्याप्त स्थान होगा।
फिर, शीर्ष चंक के पते और लक्ष्य स्थान के बीच की दूरी की गणना करें ताकि आवंटन के लिए उस आकार के साथ malloc किया जाए जिससे शीर्ष चंक को उस स्थिति में ले जाने के लिए। यह अंतर/आकार आसानी से गणित किया जा सकता है:
इसलिए, target - old_top - 4*sizeof(long)
का आकार आवंटित करना (4 longs क्योंकि शीर्ष चंक और नए चंक के मेटाडेटा के कारण) शीर्ष चंक को हमें ओवरराइट करना चाहिए।
फिर, लक्ष्य पते पर एक चंक प्राप्त करने के लिए एक और मैलोक करें।
संदर्भ और अन्य उदाहरण
इस स्थिति का लक्ष्य एक ret2win है जहां हमें एक फ़ंक्शन का पता मॉडिफ़ाय करना है जिसे रिट2विन फ़ंक्शन द्वारा बुलाया जाएगा
बाइनरी में एक ओवरफ्लो है जिसे बदला जा सकता है शीर्ष चंक का आकार, जो -1 या p64(0xffffffffffffffff) में बदल दिया जाता है
फिर, ओवरराइट करने के लिए पॉइंटर का पता जहां ओवरराइट होना है, और वर्तमान स्थान से वहां शीर्ष चंक की अंतरिक्ष की गणना की जाती है, और
malloc
के साथ आवंटित की जाती हैअंत में एक नया चंक आवंटित किया जाता है जिसमें इस वांछित लक्ष्य को शामिल किया गया है जिसे रिट2विन फ़ंक्शन द्वारा ओवरराइट किया जाता है
अपना नाम दर्ज करें:
में एक प्रारंभिक कमजोरी है जो हीप से एक पता लीक करने की अनुमति देती हैफिर
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
के साथ इसे कॉल करने की संभावना थी।एक UAF है जो एक चंक को पुनः उपयोग करने की अनुमति देता है जो बिना पॉइंटर को साफ किए हुए मुक्त किया गया था। क्योंकि कुछ पठन विधियाँ हैं, इससे एक libc पता लीक करना संभव है जो गोट में मुफ्त कार्य के लिए एक पॉइंटर लिखने और फिर कॉल करने के लिए पठन विधि को कॉल करने की संभावना है।
फिर, फोर्स का घर उपयोग किया गया था (UAF का दुरुपयोग करके) बाएं अंतरिक्ष का आकार एक -1 के साथ ओवरराइट करने के लिए, एक चंक बड़ा पर्याप्त आवंटित करने के लिए मुक्त हुक तक पहुंचने के लिए, और फिर एक और चंक आवंटित किया जाता है जिसमें मुक्त हुक शामिल होगा। फिर, हुक में
system
का पता लिखें, एक चंक में"/bin/sh"
लिखें और अंत में उस तुकड़े को उस स्ट्रिंग सामग्री के साथ मुक्त करें।
Last updated