
CVE 2021-44228 Proof-of-Concept. Log4Shell एक हमला है जो सर्वरों के विरुद्ध होता है जो Log4J के कमजोर संस्करणों का उपयोग करता है।
Apache Log4j2 2.0-beta9 से 2.15.0 तक (रिलीज 2.12.2, 2.12.3, और 2.3.1 को छोड़कर)
कॉन्फ़िगरेशन, लॉग संदेशों और पैरामीटर में उपयोग की जाने वाली JNDI सुविधाएँ हमलावर-नियंत्रित LDAP और अन्य JNDI-संबंधित एंडपॉइंट से सुरक्षा नहीं करती हैं। एक हमलावर जो लॉग संदेशों या लॉग संदेश पैरामीटर को नियंत्रित कर सकता है, वह संदेश लुकअप प्रतिस्थापन सक्षम होने पर LDAP सर्वर से लोड किए गए मनमाने कोड को निष्पादित कर सकता है। log4j 2.15.0 से, यह व्यवहार डिफ़ॉल्ट रूप से अक्षम कर दिया गया है। संस्करण 2.16.0 (2.12.2, 2.12.3, और 2.3.1 के साथ) से, इस कार्यक्षमता को पूरी तरह से हटा दिया गया है। ध्यान दें कि यह भेद्यता log4j-core के लिए विशिष्ट है और log4net, log4cxx, या अन्य Apache Logging Services परियोजनाओं को प्रभावित नहीं करती है।
परिणामस्वरूप, इसे CVSS v3 स्कोर 10.0 (अधिकतम स्कोर) पर रेट किया गया है।
सौभाग्य से यह एक 0-day हमला है। इसलिए डेवलपर्स ने इसे 0-day में ठीक कर दिया।
Apache Log4j परियोजना सबसे अधिक तैनात ओपन सोर्स सॉफ्टवेयर में से एक है, जो Java अनुप्रयोगों के लिए लॉगिंग क्षमताएं प्रदान करती है।
सबसे पहले इस PoC का उपयोग होता है:
http_server में आपको 2 फ़ाइलें मिलेंगी: MyExploit.java और इसकी संकलित .class फ़ाइल MyExploit.class
💡याद रखें: javac namefile.java एक Java क्लास को संकलित करने के लिए :)
आप कमांड का उपयोग करके तुरंत एक HTTP सर्वर चला सकते हैं: python -m http.server [PORT] इस स्थिति में
marshalsec का रिपॉजिटरी विवरण यहाँ
christophetd का रिपॉजिटरी विवरण यहाँ
आमतौर पर अनुरोध हेडर में लक्ष्य फ़ील्ड User-agent होता है, इस PoC में इसका उपयोग X-Api-Version के रूप में किया जाएगा
यह PoC असुरक्षित सर्वर पर कमांड-निष्पादन शुरू करता है ताकि tmp फ़ोल्डर में "pwned_by_pierpaolosestito_dev" नाम की एक फ़ाइल बनाई जा सके। MyExploit.java में एक दुर्भावनापूर्ण पेलोड भी है जो हमलावर को Reverse-Code-Execution करने और Reverse-Shell प्राप्त करने की अनुमति देता है।
💡कुछ सुझाव: यदि आप docker exec [container_id] ifconfig चलाते हैं तो आप देख सकते हैं कि यह एक रनर है जो आपके स्थानीय सबडोमेन में नहीं है। RCE करने के लिए आप MyExploit.java के अंदर IP बदल सकते हैं जिसमें RCE कमांड का स्ट्रिंग है। चूंकि Docker का रनर आपको निजी IP पर संपर्क नहीं कर सकता, इसलिए आपको एक सार्वजनिक IP की आवश्यकता है और आप इसे Port forwarding के साथ प्राप्त कर सकते हैं।