
Savant Web Server 3.1 में क्लासिक स्टैक-आधारित बफर ओवरफ्लो जो एक तैयार किए गए HTTP अनुरोध के माध्यम से 2000 के दशक की शुरुआत में रिमोट मेमोरी क्षति का प्रदर्शित करता है।
Savant वेब सर्वर 3.1 में क्लासिक स्टैक-आधारित बफर ओवरफ्लो, जो एक क्राफ्टेड HTTP अनुरोध के माध्यम से 2000 के दशक की शुरुआत की रिमोट मेमोरी भ्रष्टाचार का प्रदर्शन करता है (2002 की एक ऐसी कमजोरी जो एक शुरुआती से अधिक मांग करती है, अधिकांश 2025 के बफर ओवरफ्लो CVE से)।
यह रिपॉजिटरी उस सामग्री का हिस्सा है जिसका उपयोग मैं मेमोरी भ्रष्टाचार शोषण सिखाते समय करता हूं (अपने नियमित कार्य के अलावा, मैं विभिन्न साइबर सुरक्षा पाठ्यक्रमों में भी पढ़ाता हूं जहां मैं रिवर्स इंजीनियरों की अगली पीढ़ी को प्रशिक्षित करने में मदद करता हूं)। जब मैं कक्षा में स्टैक-आधारित बफर ओवरफ्लो को कवर करता हूं, तो मैं खिलौना उदाहरणों के बजाय वास्तविक मामलों पर काम करता हूं, और यह CVE विशेष रूप से वह है जिस पर मैं तब लौटता हूं जब मैं उन छात्रों को चुनौती देना चाहता हूं जिनके पास पहले से ही बुनियादी EIP ओवरराइट का कुछ अनुभव है।
कारण यह है कि CVE पहचानकर्ता में वर्ष आपको यह नहीं बताता कि शोषण कितना कठिन है। अधिकांश छात्र मान लेते हैं कि पुराने CVE सरल होने चाहिए, एक सीधा ओवरफ्लो, एक JMP ESP, हो गया। यह अन्यथा साबित करता है। कुछ CVE जो मैं 2025 से पढ़ाता हूं, वे मौलिक रूप से इससे अधिक बुनियादी हैं, क्योंकि कमजोरी वर्ग सरल है या बाधाएं कम हैं। CVE-2002-1120 को उन चीजों को समझने की आवश्यकता है जो कुछ आधुनिक एक्सप्लॉइट मांग नहीं करते: कुछ ऑपकोड का अनुरोध के कुछ भागों में उपयोग क्यों नहीं किया जा सकता, जब अनकंडीशनल जंप अवरुद्ध हो तो हमेशा फायर होने वाली कंडीशनल जंप कैसे तैयार करें, शेलकोड कैसे डिलीवर करें जब वह उस स्थान पर फिट नहीं होता जहां आप सामान्यतः रखते हैं, और कैसे एक एगहंटर उस स्थान समस्या को हल करता है जो अन्यथा शोषण को असंभव बना देता।
यह वह CVE है जिसे मैं तब देता हूं जब मैं देखना चाहता हूं कि क्या कोई वास्तव में समझता है कि वे क्या कर रहे हैं।
यह कमजोरी Savant 3.1 को प्रभावित करती है, जो 2002 का एक फ्रीवेयर विंडोज HTTP सर्वर है। 2025 में इसका अध्ययन करने लायक क्या है, वह उम्र नहीं बल्कि इसके द्वारा प्रस्तुत बाधाओं का संयोजन और उनके आसपास काम करने के लिए आवश्यक तकनीकें हैं:
इनमें से प्रत्येक बाधा अपने आप में एक सबक है।
Savant एक फ्रीवेयर ओपन-सोर्स विंडोज HTTP सर्वर है जो मूल रूप से किसी भी डेस्कटॉप कंप्यूटर को वेब सर्वर में बदलने के लिए डिज़ाइन किया गया था। यह TCP पोर्ट 80 पर सुनता है और मानक HTTP GET अनुरोधों को प्रोसेस करता है। ओवरफ्लो उस हैंडलर में होता है जो URI पथ को एक निश्चित आकार के स्टैक बफर में कॉपी करता है, उसकी लंबाई मान्य किए बिना।
मुख्य तकनीकी विवरण:
Savant आने वाले HTTP GET अनुरोधों को प्रोसेस करता है और URI पथ को एक निश्चित आकार के स्टैक बफर में कॉपी करता है, उसकी लंबाई जांचे बिना। कमजोर तर्क का एक सरलीकृत संस्करण इस प्रकार है:
char uri_buffer[270];
strcpy(uri_buffer, uri_path);
लगभग 271 बाइट्स के URI के साथ GET अनुरोध भेजने से स्टैक पर सहेजा गया रिटर्न एड्रेस ओवरराइट हो जाता है। ओवरफ्लो सीमित है, इससे काफी अधिक भेजने से क्रैश इस तरह से होता है कि EIP अब नियंत्रित नहीं रहता, इसलिए उपयोग करने योग्य विंडो संकीर्ण है।
शोषण एक मानक EIP ओवरराइट की तुलना में अधिक जटिल है, सर्वर के दो अतिरिक्त गुणों के कारण: HTTP विधि फ़ील्ड भी मेमोरी में कॉपी की जाती है और निष्पादित की जाती है, और HTTP अनुरोध का बॉडी स्टैक के बजाय एक अलग हीप क्षेत्र में संग्रहीत किया जाता है (ये दोनों गुण शोषण श्रृंखला के आवश्यक भाग बन जाते हैं)।
क्रैश को पर्याप्त लंबे URI के साथ GET अनुरोध भेजकर पुन: उत्पन्न किया जा सकता है। किसी प्रमाणीकरण की आवश्यकता नहीं है। Python का उपयोग करते हुए उदाहरण:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 271
request = (
b"GET /" + payload + b" HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Connection: close\r\n"
b"\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
जब डिबगर के तहत निष्पादित किया जाता है, तो क्रैश EIP को उपयोगकर्ता-नियंत्रित डेटा से ओवरराइट दिखाता है:
EIP = 41414141
जो पुष्टि करता है कि सहेजा गया रिटर्न एड्रेस ओवरफ्लो द्वारा दूषित हो गया है।
इस रिपॉजिटरी का लक्ष्य केवल क्रैश का प्रदर्शन करना नहीं है, बल्कि पूरी शोषण प्रक्रिया को चरण दर चरण समझाना है, जिसमें हर वह बाधा शामिल है जो इस मामले को एक मानक EIP ओवरराइट से कठिन बनाती है और उनके आसपास काम करने के लिए लिए गए हर निर्णय को शामिल करना है।
मुख्य README को साफ रखने के लिए, विस्तृत शोषण नोट्स, स्क्रिप्ट और डिबगर चरण इस रिपॉजिटरी के Vulnerability 📂 फ़ोल्डर में रखे गए हैं।
वहां आपको इस CVE का शोषण करने के लिए उपयोग किए गए पूर्ण वर्कफ़्लो मिलेंगे, जिनमें शामिल हैं: