Print Stack Canary
मुद्रित स्टैक को बढ़ावा दें
एक प्रोग्राम जो स्टैक ओवरफ्लो के लिए वंशित है, ऐसी स्थिति की कल्पना करें जो स्टैक ओवरफ्लो के हिस्से को दर्शाने वाले puts फ़ंक्शन को निष्पादित कर सकता है। हमलावर जानता है कि कैनरी का पहला बाइट एक शून्य बाइट है (\x00
) और कैनरी के बाकी भाग रैंडम बाइट्स हैं। फिर, हमलावर एक ओवरफ्लो बना सकता है जो केवल कैनरी के पहले बाइट तक स्टैक को अधिक करता है।
फिर, हमलावर पेलोड के बीच puts फ़ंक्शन को कॉल करता है जो सभी कैनरी को (पहले शून्य बाइट को छोड़कर) प्रिंट करेगा।
इस जानकारी के साथ हमलावर एक नया हमला तैयार कर सकता है और भेज सकता है कैनरी को जानते हुए (एक ही प्रोग्राम सत्र में)।
स्पष्ट है कि यह तकनीक बहुत प्रतिबंधित है क्योंकि हमलावर को अपने पेलोड की सामग्री को प्रिंट करने की आवश्यकता है ताकि वह कैनरी को बाहरीकरण कर सके और फिर एक नया पेलोड (में समान प्रोग्राम सत्र) बना सके और वास्तविक बफर ओवरफ्लो को भेज सके।
CTF उदाहरण:
64 बिट, ASLR सक्षम है लेकिन PIE नहीं, पहला कदम है कैनरी के 0x00 बाइट तक एक ओवरफ्लो भरना और फिर puts को कॉल करके इसे लीक करना। कैनरी के साथ एक ROP गैजेट बनाया जाता है जो puts को कॉल करने के लिए GOT से पता लगाने और
system('/bin/sh')
को कॉल करने के लिए एक ROP गैजेट को कॉल करने के लिए।32 बिट, ARM, कोई relro नहीं, कैनरी, nx, कोई pie नहीं। कैनरी + ret2lib को लीक करने के लिए puts पर ओवरफ्लो करें और ROP श्रृंखला के साथ
system
को कॉल करने के लिए।
अर्बिट्रेरी पढ़ें
एक अर्बिट्रेरी पढ़ने के साथ जैसे कि फॉर्मेट स्ट्रिंग्स द्वारा प्रदान किया गया हो, कैनरी को लीक करना संभव हो सकता है। इस उदाहरण की जांच करें: https://ir0nstone.gitbook.io/notes/types/stack/canaries और आप यहां पढ़ सकते हैं कि कैसे फॉर्मेट स्ट्रिंग्स का दुरुपयोग करके अर्बिट्रेरी मेमोरी पते पढ़ने के बारे में:
pageFormat Stringsयह चैलेंज एक बहुत ही सरल तरीके से फॉर्मेट स्ट्रिंग का दुरुपयोग करता है ताकि स्टैक से कैनरी को पढ़ सके।
Last updated