
War FTP Daemon 1.65 में क्लासिक स्टैक-आधारित बफर ओवरफ़्लो, जो दोषपूर्ण FTP कमांड के माध्यम से पुराने स्कूल के रिमोट कोड निष्पादन का प्रदर्शन करता है।
War FTP Daemon 1.65 में क्लासिक स्टैक-आधारित बफर अतिप्रवाह जो गलत FTP कमांड के माध्यम से पुराने स्कूल की दूरस्थ कोड निष्पादन का प्रदर्शन करता है।
यह रिपॉजिटरी उस सामग्री का हिस्सा है जिसका उपयोग मैं मेमोरी भ्रष्टाचार शोषण सिखाते समय करता हूं (अपने नियमित कार्य के अलावा, मैं विभिन्न साइबर सुरक्षा पाठ्यक्रमों में भी पढ़ाता हूं जहां मैं रिवर्स इंजीनियरों की अगली पीढ़ी को प्रशिक्षित करने में मदद करता हूं)।
CVE-2007-1567 एक ऐसा मामला है जिसका उपयोग मैं वैनिला EIP ओवरराइट की मूल बातें पेश करने के तुरंत बाद करता हूं। शोषण साफ और सीधा है, लेकिन इसमें एक विवरण है जो इसे एक सामान्य पहले अभ्यास की तुलना में थोड़ा अधिक दिलचस्प बनाता है, एक अतिरिक्त खराब वर्ण जो FTP प्रोटोकॉल पेश करता है और जिसे छात्रों को अपना शेलकोड बनाते समय पहचानना और ध्यान में रखना होता है। यह एक छोटी सी बाधा है, लेकिन छात्रों को सोचने पर मजबूर करने के लिए पर्याप्त है, न कि केवल उस तकनीक को कॉपी करने के लिए जिसका वे पहले ही उपयोग कर चुके हैं।
War FTP Daemon 1.65 1990 के दशक के अंत का एक पुराना Windows FTP सर्वर है। भेद्यता USER कमांड हैंडलर में है, जो उपयोगकर्ता-नियंत्रित इनपुट को उसकी लंबाई सत्यापित किए बिना एक निश्चित आकार के स्टैक बफर में कॉपी करने के लिए sprintf का उपयोग करता है। यह मामला शिक्षण के लिए उपयोगी क्यों है:
War FTP Daemon एक Windows FTP सर्वर है जो मूल रूप से 1990 के दशक के अंत में लिखा गया था। यह TCP पोर्ट 21 पर सुनता है और मानक FTP कमांड को संभालता है। भेद्यता USER कमांड हैंडलर में है, जो एक कनेक्टिंग क्लाइंट द्वारा भेजे गए उपयोगकर्ता नाम को लंबाई सत्यापन के बिना sprintf का उपयोग करके संसाधित करता है।
मुख्य तकनीकी विवरण:
War FTP Daemon USER कमांड को प्रदान किए गए उपयोगकर्ता नाम को sprintf में पास करके संसाधित करता है, जो इसे लंबाई की जांच किए बिना एक निश्चित आकार के स्टैक बफर में कॉपी करता है। कमजोर तर्क का एक सरलीकृत संस्करण इस प्रकार है:
char buffer[256];
sprintf(buffer, "%sCRLF", username);
USER तर्क के रूप में पर्याप्त लंबी स्ट्रिंग भेजने से कॉपी बफर के अंत से आगे लिखती है, स्टैक को दूषित करती है जब तक कि सहेजा गया रिटर्न पता ओवरराइट न हो जाए। जब फ़ंक्शन वापस आता है, तो CPU स्टैक से हमलावर-नियंत्रित मान को EIP में लोड करता है और उस पर कूद जाता है।
क्रैश को FTP पर एक बड़े USER तर्क को भेजकर पुन: उत्पन्न किया जा सकता है। किसी प्रमाणीकरण की आवश्यकता नहीं है। Python का उपयोग करते हुए उदाहरण:
import socket
HOST = '127.0.0.1'
PORT = 21
payload = b"A" * 700
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.recv(1024)
s.send(b"USER " + payload + b"\r\n")
s.close()
जब डीबगर के तहत निष्पादित किया जाता है, तो क्रैश EIP को उपयोगकर्ता-नियंत्रित डेटा के साथ ओवरराइट दिखाता है:
EIP = 41414141
यह पुष्टि करता है कि सहेजा गया रिटर्न पता अतिप्रवाह द्वारा दूषित हो गया है।
इस रिपॉजिटरी का उद्देश्य केवल क्रैश का प्रदर्शन करना नहीं है, बल्कि फ़ज़िंग से लेकर एक कार्यशील रिवर्स शेल तक, पूरी शोषण प्रक्रिया को चरण दर चरण समझाना है।
मुख्य README को साफ रखने के लिए, विस्तृत शोषण नोट्स, स्क्रिप्ट और डीबगर चरण इस रिपॉजिटरी के Vulnerability 📂 फ़ोल्डर के अंदर रखे गए हैं।
वहां आपको इस CVE का शोषण करने के लिए उपयोग किया जाने वाला पूरा वर्कफ़्लो मिलेगा, जिसमें शामिल हैं: