Ret2plt
मौलिक जानकारी
इस तकनीक का उद्देश्य होगा किसी PLT से फ़ंक्शन का पता लीक करना ताकि ASLR को बाईपास किया जा सके। यह इसलिए है क्योंकि यदि आप, उदाहरण के लिए, puts
फ़ंक्शन का पता libc से लीक करते हैं, तो फिर आप libc
का बेस कहाँ है और अन्य फ़ंक्शनों जैसे system
तक पहुँचने के लिए ऑफसेट की गणना कर सकते हैं।
यह pwntools
पेलोड के साथ किया जा सकता है जैसे (यहाँ से):
Note करें कि puts
(PLT से पते का उपयोग करके) puts
का पता GOT में स्थित puts
के पते के साथ किया जाता है। यह इसलिए है क्योंकि puts
जब puts
का GOT एंट्री प्रिंट करता है, तो यह एंट्री मेमोरी में puts
का सटीक पता रखेगी।
इसके अलावा, ध्यान दें कि एक्सप्लॉइट में main
का पता उपयोग किया जाता है, इसलिए जब puts
अपना कार्य समाप्त करता है, बाइनरी main
को फिर से बुलाता है बजाय बाहर निकलने (ताकि लीक हुआ पता वैध रहे)।
ध्यान दें कि इसे काम करने के लिए बाइनरी को PIE के साथ कंपाइल नहीं किया जा सकता या आपको PIE को बाइपास करने के लिए एक लीक पाना होगा ताकि PLT, GOT और main का पता पता चले। अन्यथा, आपको पहले PIE को बाइपास करना होगा।
आप यहाँ इस बाइपास का पूरा उदाहरण देख सकते हैं। यह उस उदाहरण का अंतिम एक्सप्लॉइट था।
अन्य उदाहरण और संदर्भ
64 बिट, ASLR सक्षम है लेकिन PIE नहीं है, पहला कदम है कैनेरी के 0x00 बाइट तक एक ओवरफ्लो भरना और फिर puts को कॉल करके इसे लीक करना। कैनेरी के साथ एक ROP गैजेट बनाया जाता है जो puts को कॉल करने के लिए GOT से puts का पता लगाने और फिर
system('/bin/sh')
को कॉल करने के लिए है।64 बिट, ASLR सक्षम, कोई कैनेरी नहीं, मुख्य स्टैक ओवरफ्लो में एक चाइल्ड फ़ंक्शन से। puts को कॉल करने के लिए ROP गैजेट जिससे GOT से puts का पता लगाने और फिर एक वन गैजेट को कॉल करने के लिए है।
Last updated