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