Ret2ret & Reo2pop
Ret2ret
इस तकनीक का मुख्य लक्ष्य ASLR को उल्लंघन करने का प्रयास करना है जिसमें स्टैक में मौजूद एक पॉइंटर का दुरुपयोग किया जाता है।
मूल रूप से, स्टैक ओवरफ्लो आम तौर पर स्ट्रिंग्स द्वारा होता है, और स्ट्रिंग्स के अंत में एक नल बाइट होता है। यह यह संभव बनाता है कि स्टैक में मौजूद एक पॉइंटर द्वारा दर्शित स्थान को कम करने का प्रयास किया जाए। इसलिए यदि स्टैक में 0xbfffffdd
था, तो यह ओवरफ्लो इसे 0xbfffff00
में बदल सकता है (अंतिम ज़ीरो बाइट का ध्यान दें)।
यदि वह पता हमारे शैलकोड को स्टैक में दर्शाता है, तो इसे ret
इंस्ट्रक्शन में पते जोड़कर इसे पहुंचाना संभव है जब तक यह पहुंच जाए।
इसलिए हमला इस प्रकार होगा:
NOP स्लेड
शैलकोड
EIP से स्टैक को ओवरराइट करें
ret
के पतों को जोड़ें (RET स्लेड)स्ट्रिंग द्वारा जोड़ा गया 0x00, स्टैक से एक पते को संशोधित करके इसे NOP स्लेड की ओर इशारा करना
इस लिंक पर एक वंलरेबल बाइनरी का उदाहरण देख सकते हैं और इसमें एक्सप्लॉइट देख सकते हैं।
Ret2pop
यदि आप स्टैक में एक उत्कृष्ट पॉइंटर खोज सकते हैं जिसे आप संशोधित नहीं करना चाहते (ret2ret
में हमने अंतिम सबसे कम बाइट को 0x00
में बदल दिया था), तो आप एक ही ret2ret
हमला कर सकते हैं, लेकिन RET स्लेड की लंबाई को 1 से कम करना होगा (ताकि अंतिम 0x00
उत्कृष्ट पॉइंटर से पहले के डेटा को ओवरराइट करे), और RET स्लेड का अंतिम पता pop <reg>; ret
की ओर इशारा करना होगा।
इस प्रकार, उत्कृष्ट पॉइंटर से पहले का डेटा स्टैक से हटा दिया जाएगा (यह डेटा 0x00
द्वारा प्रभावित होता है) और अंतिम ret
उत्कृष्ट पते की ओर इशारा करेगा बिना किसी बदलाव के।
इस लिंक पर एक वंलरेबल बाइनरी का उदाहरण देख सकते हैं और इसमें एक्सप्लॉइट देख सकते हैं।
संदर्भ
Last updated