क्लासिक स्टैक-आधारित बफर ओवरफ्लो SLMail 5.1 में, यह दर्शाता है कि कैसे प्रारंभिक मेल सर्वर अत्यधिक बड़े SMTP और POP3 कमांड के माध्यम से समझौता किए जा सकते थे।
SLMail 5.5 में क्लासिक स्टैक-आधारित बफर ओवरफ्लो जो दर्शाता है कि कैसे प्रारंभिक मेल सर्वरों को अत्यधिक बड़े SMTP और POP3 कमांड के माध्यम से समझौता किया जा सकता है।
यह रिपॉजिटरी उस सामग्री का हिस्सा है जिसका उपयोग मैं मेमोरी करप्शन शोषण सिखाते समय करता हूं (अपने नियमित काम के अलावा, मैं विभिन्न साइबर सुरक्षा पाठ्यक्रमों में भी पढ़ाता हूं जहां मैं रिवर्स इंजीनियरों की अगली पीढ़ी को प्रशिक्षित करने में मदद करता हूं)।
CVE-2003-0264 उन पहले मामलों में से एक है जिसे मैं नेटवर्क प्रोटोकॉल पर वैनिला स्टैक-आधारित बफर ओवरफ्लो सिखाते समय पेश करता हूं। यह साफ, अच्छी तरह से प्रलेखित है, और शोषण पथ सीधा है, कोई SEH नहीं, कोई egghunter नहीं, कोई स्थान बाधा नहीं। छात्र एक पेलोड भेजता है, EIP को अधिलेखित करता है, JMP ESP गैजेट पर पहुंचता है, और एक शेल प्राप्त करता है। यह स्पष्टता ही इसे एक प्रारंभिक बिंदु के रूप में उपयोगी बनाती है।
SLMail 5.5 एक लीगेसी विंडोज मेल सर्वर है। भेद्यता POP3 सेवा में है, विशेष रूप से PASS कमांड हैंडलर में, जो उपयोगकर्ता इनपुट को बिना किसी लंबाई सत्यापन के सीधे एक निश्चित आकार के स्टैक बफर में कॉपी करता है। इस मामले को शिक्षण के लिए विशेष रूप से उपयोगी बनाती है कि इसमें कितने कम चलने वाले हिस्से हैं:
यह संयोजन, नेटवर्क-उन्मुख, अप्रमाणित, सीधा EIP अधिलेखन, कोई आधुनिक शमन नहीं, CVE-2003-0264 को वैनिला स्टैक ओवरफ्लो के सबसे साफ वास्तविक-विश्व उदाहरणों में से एक बनाता है जो अभी भी आधुनिक विंडोज संस्करणों पर चलता है।
SLMail एक विंडोज मेल सर्वर है जो SMTP, POP3 और प्रशासन सेवाएं प्रदान करता है। POP3 सेवा TCP पोर्ट 110 पर सुनती है और मानक मेल पुनर्प्राप्ति कमांड को संभालती है। भेद्यता PASS कमांड हैंडलर में है, जो कनेक्ट करने वाले क्लाइंट द्वारा भेजे गए पासवर्ड तर्क को संसाधित करता है।
मुख्य तकनीकी विवरण:
SLMail की POP3 सेवा PASS कमांड को प्रसंस्कृत करती है, जिसमें आपूर्ति किए गए पासवर्ड तर्क को बिना किसी लंबाई जांच के एक असुरक्षित फ़ंक्शन का उपयोग करके एक निश्चित आकार के स्टैक बफर में कॉपी किया जाता है। भेद्य तर्क का एक सरलीकृत संस्करण इस प्रकार दिखता है:
char password_buffer[256];
strcpy(password_buffer, pass_argument);
PASS तर्क के रूप में पर्याप्त लंबी स्ट्रिंग भेजने से कॉपी बफर के अंत से परे लिखती है, स्टैक को दूषित करती है जब तक कि सहेजा गया रिटर्न पता अधिलेखित न हो जाए। जब फ़ंक्शन लौटता है, CPU स्टैक से हमलावर-नियंत्रित मान को EIP में लोड करता है और उस पर कूदता है।
क्रैश को POP3 पर एक अत्यधिक बड़े PASS तर्क भेजकर दोहराया जा सकता है। कोई मान्य क्रेडेंशियल आवश्यक नहीं हैं। Python का उपयोग करके उदाहरण:
import socket
HOST = '127.0.0.1'
PORT = 110
payload = b"A" * 3000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER username\r\n")
s.recv(1024)
s.send(b"PASS " + payload + b"\r\n")
s.close()
जब डीबगर के अंतर्गत निष्पादित किया जाता है, तो क्रैश EIP को उपयोगकर्ता-नियंत्रित डेटा से अधिलेखित दिखाता है:
EIP = 41414141
जो पुष्टि करता है कि सहेजा गया रिटर्न पता ओवरफ्लो द्वारा दूषित हो गया है।
इस रिपॉजिटरी का लक्ष्य केवल क्रैश प्रदर्शित करना नहीं है, बल्कि फज़िंग से लेकर एक कार्यशील रिवर्स शेल तक पूरी शोषण प्रक्रिया को चरण दर चरण समझाना है।
मुख्य README को साफ रखने के लिए, विस्तृत शोषण नोट्स, स्क्रिप्ट और डीबगर चरण इस रिपॉजिटरी के Vulnerability 📂 फ़ोल्डर के अंदर रखे गए हैं।
वहां आपको इस CVE का शोषण करने के लिए उपयोग किए जाने वाले पूरे कार्यप्रवाह मिलेंगे, जिनमें शामिल हैं: