SEH-आधारित बफर ओवरफ्लो Easy File Sharing Web Server 7.2 में, यह प्रदर्शित करता है कि कैसे एक प्रमाणित HTTP POST पैरामीटर अपवाद हैंडलर श्रृंखला को दूषित कर सकता है।
Easy File Sharing वेब सर्वर 7.2 में SEH-आधारित बफर ओवरफ्लो यह दर्शाता है कि एक प्रमाणित HTTP POST पैरामीटर किस प्रकार अपवाद हैंडलर श्रृंखला को दूषित कर सकता है।
यह रिपॉजिटरी मेरे द्वारा मेमोरी भ्रष्टाचार शोषण (exploitation) पढ़ाने में उपयोग की जाने वाली सामग्री का हिस्सा है (अपने नियमित कार्य के अलावा, मैं विभिन्न साइबर सुरक्षा पाठ्यक्रमों में भी पढ़ाता हूँ जहाँ मैं रिवर्स इंजीनियरों की अगली पीढ़ी को प्रशिक्षित करने में मदद करता हूँ)।
CVE-2018-18912 वह मामला है जिसका उपयोग मैं सामान्य EIP अधिलेखन से SEH-आधारित शोषण में छलांग लगाने के लिए करता हूँ। एक बार जब छात्र समझ जाते हैं कि प्रत्यक्ष रिटर्न एड्रेस अधिलेखन कैसे काम करता है, तो अगला कदम यह समझना है कि जब स्टैक इतना दूषित हो जाता है कि प्रोग्राम लौटने से पहले एक अपवाद ट्रिगर करता है तो क्या होता है, और वह अपवाद हैंडलर श्रृंखला इसके बजाय हमले की सतह कैसे बन जाती है। यह CVE उस संक्रमण को स्पष्ट रूप से प्रदर्शित करता है: ओवरफ्लो SEH श्रृंखला तक पहुँचने के लिए पर्याप्त गहरा है, और शोषण पथ क्लासिक POP POP RETN तकनीक का अनुसरण करता है जिसे हर शोषण डेवलपर को समझने की आवश्यकता है। ROP के माध्यम से वैकल्पिक DEP बाईपास को उन छात्रों के लिए एक विस्तार के रूप में छोड़ दिया गया है जो आगे जाना चाहते हैं - वही ओवरफ्लो, एक अलग गैजेट रणनीति, एक बहुत कठिन समस्या।
यह भेद्यता Easy File Sharing वेब सर्वर 7.2 को प्रभावित करती है, जो एक हल्का विंडोज वेब सर्वर एप्लिकेशन है जिसका उपयोग सरल फ़ाइल साझाकरण के लिए व्यापक रूप से किया जाता था। यह सॉफ्टवेयर आधुनिक सुरक्षा शमन (mitigations) को ध्यान में रखकर नहीं लिखा गया था। शिक्षण के दृष्टिकोण से यह मामला विशेष रूप से दिलचस्प क्या बनाता है, वह है इसमें शामिल कारकों का संयोजन:
यह संयोजन CVE-2018-18912 को बुनियादी स्तर से परे शोषण विकास तकनीकों को सिखाने के लिए एक उत्कृष्ट मामला बनाता है।
Easy File Sharing वेब सर्वर 7.2 एक विंडोज एप्लिकेशन है जो उपयोगकर्ताओं को HTTP पर फ़ाइलें साझा करने की अनुमति देता है। इसमें फ़ाइल ब्राउज़िंग, उपयोगकर्ता प्रमाणीकरण और एक अंतर्निहित फ़ोरम सिस्टम जैसी कार्यक्षमताएँ शामिल हैं।
फ़ोरम कार्यक्षमता नए विषय बनाने के लिए POST अनुरोध स्वीकार करती है। इस एंडपॉइंट द्वारा संभाले जाने वाले फॉर्म फ़ील्ड में से एक author पैरामीटर है। आंतरिक रूप से, एप्लिकेशन इस उपयोगकर्ता-नियंत्रित मान को लंबाई सत्यापित किए बिना एक निश्चित आकार के स्टैक बफर में कॉपी करता है।
यह भेद्यता 2018 में खोजी और रिपोर्ट की गई थी। मूल PoC शीघ्र ही प्रकाशित किया गया था, जो क्रैश और एक कार्यशील शोषण श्रृंखला दोनों का प्रदर्शन करता था, जिसमें बंडल ImageLoad.dll मॉड्यूल से ROP गैजेट्स शामिल थे।
मुख्य तकनीकी विवरण:
Easy File Sharing वेब सर्वर /forum.ghp पर निर्देशित HTTP POST अनुरोधों को संसाधित करता है जब कोई उपयोगकर्ता एक नया फ़ोरम विषय बनाता है। स्वीकृत पैरामीटरों में से एक author है, जिसे बिना किसी लंबाई जाँच के स्थानीय स्टैक बफर में कॉपी किया जाता है।
बाइनरी को रिवर्स करते समय, यह देखा जा सकता है कि इस फॉर्म फ़ील्ड का हैंडलर एक निश्चित आकार के बफर और एक असुरक्षित कॉपी ऑपरेशन का उपयोग करता है। कमजोर तर्क का एक सरलीकृत संस्करण इस प्रकार दिखता है:
char author_buffer[64];
strcpy(author_buffer, user_input);
चूँकि गंतव्य बफर का आकार निश्चित है और इनपुट लंबाई सत्यापित नहीं है, author फ़ील्ड में पर्याप्त लंबा स्ट्रिंग भेजने से कॉपी बफर के अंत से आगे लिखती है।
जैसे-जैसे अधिक डेटा लिखा जाता है, स्टैक लेआउट दूषित हो जाता है। एक साधारण रिटर्न एड्रेस अधिलेखन के विपरीत, ओवरफ्लो स्टैक पर संग्रहीत Structured Exception Handler (SEH) श्रृंखला तक पहुँचता है। जब दूषित स्टैक के परिणामस्वरूप कोई अपवाद ट्रिगर होता है, तो OS SEH श्रृंखला पर चलता है और हमलावर-नियंत्रित हैंडलर एड्रेस पर नियंत्रण स्थानांतरित करता है।
इसलिए शोषण प्रवाह SEH अधिलेखन तकनीक का अनुसरण करता है:
यह भेद्यता को मूल EIP अधिलेखन की तुलना में शोषण करने के लिए अधिक जटिल बनाता है, लेकिन यह वास्तविक दुनिया के परिदृश्यों का अधिक प्रतिनिधि भी है।
क्रैश को वैध क्रेडेंशियल्स के साथ प्रमाणीकरण के बाद /forum.ghp पर POST अनुरोध के author पैरामीटर में एक लंबा स्ट्रिंग भेजकर पुन: प्रस्तुत किया जा सकता है। Python का उपयोग कर उदाहरण:
import socket
HOST = '127.0.0.1'
PORT = 80
payload = b"A" * 500
request = (
b"POST /forum.ghp?forumid=1 HTTP/1.1\r\n"
b"Host: 127.0.0.1\r\n"
b"Content-Type: application/x-www-form-urlencoded\r\n"
b"Cookie: UserID=test; PassWD=test; SESSIONID=1234\r\n"
b"Connection: close\r\n"
b"\r\n"
b"author=" + payload + b"&passwd=test&title=test&content=test&Submit=Submit\r\n"
)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.send(request)
s.close()
जब डीबगर के अंतर्गत निष्पादित किया जाता है, तो क्रैश एक दूषित SEH श्रृंखला और एक एक्सेस उल्लंघन दिखाता है, यह पुष्टि करता है कि उपयोगकर्ता-नियंत्रित डेटा ने अपवाद हैंडलर पॉइंटर को अधिलेखित कर दिया है।
इस रिपॉजिटरी का उद्देश्य केवल क्रैश प्रदर्शित करना नहीं है, बल्कि वास्तविक SEH-आधारित शोषण विकसित करते समय उपयोग की जाने वाली पद्धति का पालन करते हुए पूर्ण शोषण प्रक्रिया को चरण-दर-चरण समझाना भी है।
मुख्य README को साफ रखने के लिए, विस्तृत शोषण नोट्स, स्क्रिप्ट्स और डीबगर चरण इस रिपॉजिटरी के Vulnerability 📂 फ़ोल्डर के अंदर रखे गए हैं।
वहाँ आपको इस CVE का शोषण करने के लिए उपयोग किए जाने वाले पूर्ण कार्यप्रवाह मिलेंगे, जिनमें शामिल हैं: