Stack Shellcode
मूल जानकारी
स्टैक शेलकोड एक तकनीक है जो बाइनरी एक्सप्लोइटेशन में उपयोग की जाती है जहाँ हमलावता एक वंशावली कारक के स्टैक में शेलकोड लिखता है और फिर इंस्ट्रक्शन पॉइंटर (IP) या एक्सटेंडेड इंस्ट्रक्शन पॉइंटर (EIP) को इस शेलकोड के स्थान पर संशोधित करता है, जिससे यह निषेधात्मक पहुंच या लक्षित निर्देशों को निष्पादित करने के लिए कार्रवाई करता है। यह एक क्लासिक विधि है जो अनधिकृत पहुंच हासिल करने या लक्षित सिस्टम पर विचारशील आदेशों को निष्पादित करने के लिए उपयोग की जाती है। यहाँ प्रक्रिया का विवरण है, जिसमें एक सरल सी उदाहरण और आप कैसे pwntools का उपयोग करके पायथन का उपयुक्त शिकार को लिख सकते हैं।
सी उदाहरण: एक वंशावली कारक
चलो एक सरल उदाहरण के साथ शुरू करते हैं, एक वंशावली C कारक का:
यह प्रोग्राम gets()
फ़ंक्शन का उपयोग करने के कारण एक बफर ओवरफ़्लो के लिए वंर्नरबल है।
Compilation
इस प्रोग्राम को कंपाइल करने के लिए विभिन्न सुरक्षा प्रोटेक्शन को अक्षम करते हुए (एक वंर्नरबल वातावरण की अनुकरण के लिए), आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
-fno-stack-protector
: स्टैक सुरक्षा को अक्षम करता है।-z execstack
: स्टैक को क्रियाशील बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है।-no-pie
: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को अक्षम करता है, जिससे हमारे शेलकोड का स्थान जिसमें होगा उसे पूर्वानुमान लगाना आसान हो जाता है।-m32
: प्रोग्राम को 32-बिट एक्सीक्यूटेबल के रूप में कंपाइल करता है, अक्स्प्लॉइट डेवलपमेंट में सरलता के लिए अक्सर उपयोग किया जाता है।
Pwntools का उपयोग करके Python Exploit
यहाँ एक उदाहरण है कि आप pwntools का उपयोग करके Python में एक एक्सप्लॉइट लिख सकते हैं जो एक ret2shellcode हमला करने के लिए है:
यह स्क्रिप्ट एक NOP स्लाइड, शेलकोड, और फिर EIP को NOP स्लाइड पर पहुंचाने वाले पते के साथ ओवरराइट करके पेलोड बनाता है, जिससे शेलकोड को निष्पादित किया जाए।
NOP स्लाइड (asm('nop')
) का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" होगा चाहे वास्तविक पते कुछ भी हो। p32()
तार्किक को अपने बफर के प्रारंभ पते पर एक ऑफसेट जोड़कर समायोजित करें ताकि NOP स्लाइड में लैंड हो सके।
सुरक्षा
ASLR को अक्षम कर देना चाहिए ताकि पता विश्वसनीय हो जाए क्योंकि फ़ंक्शन स्थान हमेशा समान नहीं रहेगा और आपको जानने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन को कहाँ लोड किया गया है।
स्टैक कैनेरीज़ भी अक्षम होना चाहिए अन्यथा कंप्रोमाइज़ हुआ EIP वापसी पता कभी भी अनुसरण नहीं करेगा।
NX स्टैक सुरक्षा शेलकोड के निष्पादन को रोकेगी क्योंकि उस क्षेत्र को क्रियाशील नहीं किया जाएगा।
अन्य उदाहरण और संदर्भ
64बिट, ASLR के साथ स्टैक पता लीक, शेलकोड लिखें और उस पर जाएं
32 बिट, ASLR के साथ स्टैक लीक, शेलकोड लिखें और उस पर जाएं
32 बिट, ASLR के साथ स्टैक लीक, बाहर निकलने को रोकने के लिए तुलना, मान के साथ चर ओवरराइट करें, शेलकोड लिखें और उस पर जाएं
arm64, कोई ASLR नहीं, स्टैक को क्रियाशील बनाने के लिए ROP गैजेट और स्टैक में शेलकोड पर जाएं
Last updated