
Apache Solr Poc CVE-2017-3164 CVE-2017-12629
इस फ़ोल्डर में Apache Solr CVE-2017-3164 CVE-2017-12629 के लिए उदाहरण एक्सप्लॉइट शामिल हैं।
इसका उपयोग केवल शैक्षिक उद्देश्यों के लिए और Apache Solr सर्वर स्वामी की पूर्ण अनुमति के साथ करें।
आपको Apache Solr सर्वर का IP या DNS नाम और एक Collection का नाम जानना होगा।
Apache Solr में सर्वर साइड रिक्वेस्ट फॉरजरी, संस्करण 1.3 से 7.6 (समावेशी) तक। चूँकि "shards" पैरामीटर के पास कोई संगत व्हाइटलिस्ट तंत्र नहीं है, सर्वर तक पहुँच रखने वाला एक दूरस्थ हमलावर Solr से किसी भी सुलभ URL पर HTTP GET अनुरोध करवा सकता है।
यह SSRF अत्यंत शक्तिशाली है क्योंकि आपको बस इस पर GET अनुरोध भेजना होता है और यह लक्ष्य पर POST अनुरोध कर देगा। इसके अतिरिक्त, आप GET अनुरोध के साथ POST अनुरोध का body URL पैरामीटर के रूप में भी प्रदान कर सकते हैं।
Apache Solr 7.1 से पहले और Apache Lucene 7.1 से पहले, Config API add-listener कमांड के उपयोग के साथ XXE का शोषण करके RunExecutableListener क्लास तक पहुँचने से दूरस्थ कोड निष्पादन होता है। Elasticsearch, हालाँकि यह Lucene का उपयोग करता है, इसके लिए संवेदनशील नहीं है। ध्यान दें कि XML बाहरी एंटिटी विस्तार भेद्यता XML Query Parser में होती है, जो डिफ़ॉल्ट रूप से deftype=xmlparser पैरामीटर वाले किसी भी क्वेरी अनुरोध के लिए उपलब्ध है, और इसका शोषण /upload अनुरोध हैंडलर पर दुर्भावनापूर्ण डेटा अपलोड करने के लिए या Solr सर्वर से मनमानी स्थानीय फ़ाइलों को पढ़ने के लिए ftp रैपर का उपयोग करके Blind XXE के रूप में किया जा सकता है। यह भी ध्यान दें कि दूसरी भेद्यता Solr के सभी प्रभावित संस्करणों पर उपलब्ध RunExecutableListener का उपयोग करके दूरस्थ कोड निष्पादन से संबंधित है।
मैंने शोषण के लिए केवल इस RCE को चुना, लेकिन Apache Solr में बहुत सारी RCE भेद्यताएँ हैं जिनका शोषण आप SSRF के साथ कर सकते हैं। आप उसी आसानी से किसी अन्य सर्वर का भी शोषण कर सकते हैं जिस तक Solr सर्वर की पहुँच है, उदाहरण के लिए Redis कमांड भेजकर Redis सर्वर पर रिवर्स शेल प्राप्त कर सकते हैं।
आप इस फ़ाइल को एक सार्वजनिक वेब सर्वर पर होस्ट कर सकते हैं और फिर इसे लक्षित उपयोगकर्ता को ईमेल कर सकते हैं। यदि लक्ष्य वेबपेज लोड करता है, तो JavaScript स्वचालित रूप से Apache Solr सर्वर का शोषण करेगा।
पोर्ट नंबर को ?n= URL पैरामीटर में प्रदान करना होगा। इस तरह आप कई लक्ष्यों को ईमेल भेज सकते हैं और प्रत्येक के लिए एक अद्वितीय listener रख सकते हैं।