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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2022-21445-for-12.2.1.3.0-Weblogic — Oracle WebLogic ADF Faces के लिए प्री-ऑथेंटिकेशन रिमोट कोड एक्ज़ीक्यूशन एक्सप्लॉइट (CVE-2022-21445, CVSS 9.8)। इसमें पेनिट्रेशन टेस्टिंग के लिए विस्तृत पर्यावरण सेटअप, पेलोड जनरेशन और रिमोट डीबगिंग निर्देश शामिल हैं। | Kitploit
उपकरण/GitHubGitHub/hienkiet/cve-2022-21445-for-12.2.1.3.0-weblogic
भेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगरिमोट एक्सेस टूलपेलोड डेवलपमेंट
GitHubhienkiet/cve-2022-21445-for-12.2.1.3.0-weblogic

CVE-2022-21445-for-12.2.1.3.0-Weblogic

Oracle WebLogic ADF Faces के लिए प्री-ऑथेंटिकेशन रिमोट कोड एक्ज़ीक्यूशन एक्सप्लॉइट (CVE-2022-21445, CVSS 9.8)। इसमें पेनिट्रेशन टेस्टिंग के लिए विस्तृत पर्यावरण सेटअप, पेलोड जनरेशन और रिमोट डीबगिंग निर्देश शामिल हैं।

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

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

सभी देखें →

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

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

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

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

सिंहावलोकन

CVE-2022-21445 (CVSS स्कोर 9.8), यह कमजोरी अविश्वसनीय डेटा का डिक्रिप्शन है, जो ADF Faces घटक में मौजूद है, और हैकर्स द्वारा बिना प्रमाणीकरण (pre-authentication) के दूर से RCE निष्पादित करने के लिए शोषित किया जा सकता है।

उपरोक्त कमजोरी को दो साइबर सुरक्षा विशेषज्ञों द्वारा खोजा गया था: VNG Corporation के PeterJson और VNPT के Nguyen Jang। Oracle को यह रिपोर्ट अक्टूबर 2021 में प्राप्त हुई और पैच जारी करने में 6 महीने लगे, अर्थात् अप्रैल 2022 तक।

इस लेख में, शोषण Oracle Business Intelligence संस्करण 12.2.1.4.0 पर केंद्रित है।

विश्लेषण - कमजोरी का पुनरुत्पादन

वातावरण की स्थापना

पीड़ित/लक्ष्य मशीन पक्ष

शर्तें: विंडोज 10+ प्रो या विंडोज होम (x64) सक्रिय लाइसेंस के साथ या विंडोज सर्वर (Oracle उत्पादों को प्राथमिकता दें) स्थापित करें।

चरण 1: जावा स्थापित करें, jdk 8u112 या उच्चतर संस्करण (8Ux), डाउनलोड लिंक: JDKv8U112

  • jdk निर्देशिका (jre नहीं) की ओर इशारा करते हुए JAVA_HOME जोड़ें चित्र 1.1: जावा स्थापित करें

चरण 2: Oracle Database 19c स्थापित करें, डाउनलोड लिंक: Oracle 19c

डेटाबेस स्थापित करने के लिए एक फ़ोल्डर तैयार करें, नीचे दिए गए पथ जैसा पथ बनाएं और डाउनलोड किए गए डेटाबेस ज़िप फ़ाइल को यहाँ अनज़िप करें C:\app\oracle\product\19c\db_home1

  • व्यवस्थापक अधिकारों के साथ setup.application फ़ाइल चलाएं चित्र 2.1: DB सेटअप चलाएं

  • DB स्थापना मार्गदर्शिका में दिए गए निर्देशों के अनुसार चरण दर चरण प्रक्रिया करें।

  • अत्यंत महत्वपूर्ण: चरण 8/17 पर, Create as Container database चुनना सुनिश्चित करें ताकि आगामी Fusion Middleware स्थापना प्रक्रिया के लिए एक प्लगेबल डेटाबेस खोला जा सके चित्र 2.2: प्लगेबल डेटाबेस बनाना

  • चरण 9/17 पर, अक्षर सेट को यूनिकोड (AL32UTF8) चुनें चित्र 2.3: यूनिकोड चुनें

    1. स्थापना पूर्ण होने के बाद, विंडोज की सेवाओं (Services) में ध्यानपूर्वक जाँच करें कि नीचे दिए गए चित्र के अनुसार मुख्य 4 सेवाओं की स्थिति RUNNING है। चित्र 2.4: सफल स्थापना

    चित्र 2.5: सेवा जांच

    1. निम्नलिखित चरणों के अनुसार एक नया Oracle डेटाबेस खाता बनाएं:
    • टर्मिनल प्रशासक -> sqlplus / as sysdba
    • सिस्टम उपयोगकर्ता बनाएं: alter user system identified by system_password account unlock;
    • सिस्टम उपयोगकर्ता की उपस्थिति जांचें: select username from dba_users;
    • वातावरण सेट करें: alter session set “_oracle_script”=true;
    • सामान्य उपयोगकर्ता hr बनाएं: create user hr identified by user_password;
    • अनुमतियाँ प्रदान करें: grant all privileges to hr;
    • खाता अनलॉक करें – पासवर्ड बदलें: alter user hr identified by hr_pass account unlock;
    • नया सिस्टम खाता बनाएं: alter user sys identified by sys_pass account unlock;

    चरण 3: SQL Developer स्थापित करें, no-jre संस्करण, डाउनलोड लिंक: SQLDev-NoJRE चित्र 3.1: SQL Developer डाउनलोड करें

    • व्यवस्थापक अधिकारों के साथ sqldeveloper.application फ़ाइल चलाएं चित्र 3.2: SQL Developer प्रारंभ करें

    • नीचे दिए गए चित्र के अनुसार एक नए कनेक्शन के लिए पैरामीटर सेट करें, उपयोगकर्ता नाम और पासवर्ड बदलना सुनिश्चित करें (जैसा कि ऊपर दिए गए उदाहरण में hr है), होस्टनाम (डिफ़ॉल्ट localhost), पोर्ट (डिफ़ॉल्ट 1521), SID (चरण 2 में स्थापित वैश्विक डेटाबेस नाम) चित्र 3.3: SQL Developer पैरामीटर सेट करें

    • यदि Test चुनने पर Success संदेश दिखाई देता है, तो कनेक्शन सफल है, Connect चुनें।

    चरण 4: Fusion Middleware Infrastructure (FMW) संस्करण 12.2.1.3.0 स्थापित करें, डाउनलोड लिंक FMW_ver_12.2.1.3.0 चित्र 4.1: FMW डाउनलोड करें

    • FMW स्थापना निर्देशिका के लिए C:\Oracle\Middleware\Oracle_Home प्रारूप में पथ बनाएं
    • निर्देशों के अनुसार क्रमिक रूप से चरणों का पालन करें: FMW स्थापना मार्गदर्शिका

    चरण 5: Oracle Business Intelligence (OBIEE) संस्करण 12.2.1.4.0 स्थापित करें, डाउनलोड लिंक: OBIEE_ver_12.2.1.4.0

    • व्यवस्थापक अधिकारों के साथ setup_bi_platform-12.2.1.4.0_win64.exe फ़ाइल चलाएं चित्र 5.1: OBIEE स्थापना फ़ाइल चलाएं

    • OBIEE स्थापना मार्गदर्शिका के अनुसार चरण दर चरण स्थापित करें।

    • ध्यान दें: BI का पथ FWM स्थापना पथ के समान होना चाहिए, जैसे कि यहाँ Oracle/Middleware/Oracle_Home है चित्र 5.2: BI का पथ FWM के समान होना चाहिए

    चरण 6: Repository Creation Utility (RCU) का उपयोग करके BI स्कीमा सेट करें।

    • पथ C:\Oracle\Middleware\Oracle_Home\oracle_common\bin पर, व्यवस्थापक अधिकारों के साथ rcu.bat फ़ाइल चलाएं

    • निम्नलिखित चरणों का पालन करें:

    चित्र 6.1: रिपॉजिटरी बनाएं

    चित्र 6.2: डेटाबेस कनेक्शन विवरण

    चित्र 6.3: घटक चुनें

    चित्र 6.4: स्कीमा पासवर्ड

    • अंत में, Create दबाएं ताकि सिस्टम BI स्कीमा बना सके।

    चरण 7: OBIEE के लिए वातावरण चर सेट करें।

    • कंट्रोल पैनल > सिस्टम > उन्नत सिस्टम सेटिंग्स > उन्नत > वातावरण चर > नया सिस्टम चर पर जाएं चित्र 7.1: वातावरण चर

    चरण 8: BI डोमेन बनाएं।

    1. पथ C:\Oracle\Middleware\Oracle_Home\bi\bin पर, व्यवस्थापक अधिकारों के साथ config.cmd फ़ाइल चलाएं।

    चित्र 8.1: कॉन्फ़िग फ़ाइल चलाएं

    1. चरण 1: सभी 3 घटकों का चयन करें, जिसमें Essbase OLAP सर्वर है, Business Intelligence Enterprise Edition BI Analytics है और Business Intelligence Publisher BI Publisher है।

    चित्र 8.2: घटक चुनें

    1. चरण 3: नीचे दिए गए चित्र के अनुसार नया डोमेन सेट करें। !! डोमेन का पासवर्ड याद रखें क्योंकि इसे पुनर्प्राप्त करना बहुत कठिन होगा। और डोमेन को bi रखें क्योंकि यह डिफ़ॉल्ट है।

    चित्र 8.3: डोमेन खाता

    1. चरण 4: डेटाबेस के लिए डोमेन जानकारी अपडेट करें।

    चित्र 8.4: जानकारी अपडेट करें

    1. चरण 8: यदि प्रक्रिया सफल होती है, तो नीचे दिए गए चित्र के अनुसार परिणाम होगा।

    चित्र 8.5: सफल कॉन्फ़िगरेशन

    1. यदि सब कुछ Done हो जाता है, तो OBIEE की जानकारी फ़ाइल को अगले चरण के लिए सहेजें, निम्नलिखित URL में लॉगिन करें:
    • http://localhost:9500/console*
    • http://localhost:9500/em*
    • http://localhost:9502/xmlpserver*
    • http://localhost:9502/analytics*
    1. कुछ संभावित त्रुटियाँ
    • चरण 4 में, यदि सिस्टम fail to logon दिखाता है, तो डोमेन पासवर्ड की जाँच करें कि क्या यह सही है।

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

    चित्र 8.6: लाइसेंस त्रुटि

    • BI_HOME_PRODUCT नहीं जोड़ा गया, चरण 7 पुनः देखें।
    • त्रुटि अपडेट करें ...

    चरण 9: सेटअप पूरा करने के बाद, अभी बनाए गए bi डोमेन पर पथ $Oracle_Home\user_projects\domains\bi\servers\AdminServer\tmp_WL_user\adf.oracle.domain.webapp\i83uao पर जाएं।

    • यहाँ से सभी jar फ़ाइलों को एक अलग फ़ोल्डर में कॉपी करें, और इसे हमलावर मशीन (लैब वातावरण में ऐसा करें, वास्तविक हमले के दौरान हमलावर मशीन पर भी लक्ष्य मशीन की तरह ही स्थापित करना होगा ताकि स्रोत कोड प्राप्त किया जा सके) पर साझा करें।

    • पथ $Oracle_Home\coherence\lib से coherence.jar लाइब्रेरी को भी इस फ़ोल्डर में जोड़ें।

    • यह एक महत्वपूर्ण फ़ोल्डर है जो पेलोड की सफलता निर्धारित करता है क्योंकि FMW या BI के प्रत्येक संस्करण या प्रत्येक मशीन का वातावरण अलग-अलग होता है, इसलिए पेलोड संचरण के दौरान जोखिम या अपवादों को कम करने के लिए सटीक संस्करण की आवश्यकता होती है।

    चरण 10 (केवल यदि रिमोट डीबगिंग आवश्यक हो तो करें; यदि वास्तविक वातावरण में परीक्षण कर रहे हैं, तो पीड़ित मशीन को स्वतंत्र रूप से सेट नहीं किया जा सकता, इसलिए हमलावर को अपनी मशीन पर लक्ष्य मशीन सेटअप भी करना होगा ताकि रिमोट डीबगिंग करके त्रुटियों की जांच की जा सके)।

    • मोज़िला स्थापित करें, पोर्ट 8181 के साथ बर्प प्रॉक्सी जोड़ें।

    • BI सर्वर पर रिमोट डीबग चालू करें।

      localhost:9500/console पर जाएं।

      डोमेन संरचना -> bi चुनें -> वातावरण -> सर्वर

    चित्र 10.1: डोमेन संरचना

    दो सर्वर दिखाई देंगे: weblogic का AdminServer और BI का bi_server1।

    चित्र 10.2: सर्वर सूची दिखाई देती है

    बाएँ कोने में Lock & Edit चुनें, कॉन्फ़िगरेशन संपादित करने के लिए bi_server1 चुनें। यहाँ, कॉन्फ़िगरेशन -> सर्वर प्रारंभ -> अंत तक स्क्रॉल करें, एडवांस्ड चुनें (यदि उपलब्ध हो) -> आर्गुमेंट्स में जोड़ने के लिए चुनें -> डीबग पैरामीटर दर्ज करें:

    -Xdebug -Xnoagent – Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n

    (यदि बाद में bi_server1 को पुनरारंभ करने में त्रुटि होती है, तो 0.0.0.0:5005 के साथ प्रयास करें)

    weblogic पासवर्ड दर्ज करें (जो पहले कॉन्फ़िग BI डोमेन में सेट किया गया था) -> Apply change & Restart

    टर्मिनल प्रशासक प्रारंभ करें -> पथ $Oracle_Home\user_projects\domains\bi\bitools\bin पर नेविगेट करें और ./stop.cmd और ./start.cmd चलाएं ताकि bi_server1 पुनरारंभ हो, पुनरारंभ प्रक्रिया के दौरान यदि कोई त्रुटि नहीं होती है, तो डीबग खुल गया है और उपरोक्त पोर्ट 5005 पर सुन रहा है। यदि त्रुटि होती है, तो ऊपर दिए गए डीबग पैरामीटर की जाँच करें कि कहीं अनावश्यक स्थान या पते में कोई त्रुटि तो नहीं है।

    हमलावर मशीन पक्ष

    चरण 1: IntelliJ IDEA Ultimate डाउनलोड करें, github पर कोड खोजकर सक्रिय करें।

    चरण 2 (यह चरण केवल तब करें यदि हमले की प्रक्रिया में 500 सर्वर त्रुटि, ... जैसी त्रुटि आती है, तो यह पेलोड में अपवाद के कारण होता है)

    1. प्रोजेक्ट के jdk – sdk संस्करण को लक्ष्य मशीन के समान संस्करण में बदलें (स्थापना विधि लक्ष्य मशीन - चरण 1 के अनुसार)।

    2. स्रोत कोड का विश्लेषण करने और रिमोट डीबगिंग के लिए एक खाली प्रोजेक्ट बनाएं।

    3. लक्ष्य मशीन से प्राप्त फ़ोल्डर की सभी jar फ़ाइलों को इस प्रोजेक्ट में जोड़ें।

      प्रोजेक्ट संरचना -> मॉड्यूल -> + चुनें -> 1 JARS या निर्देशिकाएँ -> पूरी jar निर्देशिका जोड़ें।

    चित्र 11.1: jar फ़ाइल जोड़ें

    चित्र 11.2: परिणाम

    1. रिमोट डीबग सेट करें।

      रन -> संपादन कॉन्फ़िगरेशन -> + -> रिमोट JVM डीबग

    चित्र 12.1: रिमोट डीबग सेट करें

    root@kitploit:~
     रिमोट डीबग चलाएं, यदि कंसोल में संदेश आता है: Connected … तो यह सफल है।
    

    चित्र 12.2: रिमोट डीबग चलाएं

    चरण 3:

    • इस रिपॉजिटरी से कोड को मशीन पर क्लोन करें, lib फ़ोल्डर से पुरानी coherence.jar फ़ाइल हटाएं और इसे पिछले चरण में लक्ष्य मशीन से प्राप्त फ़ाइल से बदलें।

    • इसके बाद, इसे IntelliJ का उपयोग करके चलाने वाले प्रोजेक्ट में जोड़ें, lib में सभी jar फ़ाइलों को लाइब्रेरी के रूप में जोड़ें विकल्प के साथ जोड़ें।

    • LambdaIdentity$.... का वर्ग नाम Weblogic संस्करण के अनुसार सही है या नहीं जाँचें, यदि कोई परिवर्तन है तो फ़ाइल को रीफैक्टर करें और उस फ़ाइल का नाम बदलें।

      Weblogic 12.2.1.3: LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A

      Weblogic 12.2.1.4: LambdaIdentity$423B02C050017B24DB10DFF759AA56BF

    • Main.java फ़ाइल में LambdaIdentity$....class फ़ाइल के पथ को संपादित करें। सटीक पथ प्राप्त करने के दो तरीके हैं: javac jar फ़ाइल चलाकर .class फ़ाइल उत्पन्न करें; दूसरा तरीका main फ़ंक्शन के कोड को कमेंट करें, फिर इस प्रोजेक्ट को सामान्य रूप से चलाएं, वर्ग फ़ाइल का पथ target फ़ोल्डर में पाया जा सकता है।

    • प्रोजेक्ट का jdk और sdk लक्ष्य मशीन के समान है या नहीं जाँचें।

    BI कोड और पेलोड उत्पन्न करने वाले कोड का विश्लेषण

    BI कोड का विश्लेषण

    1. पथ $Oracle\Middleware\Oracle_Home\user_projects\domains\bi\servers\AdminServer\tmp_WL_user\em\fw8wi5\war\WEB-INF पर

    हम web.xml फ़ाइल देखते हैं, यह फ़ाइल servlet-mapping से संबंधित मैपिंग संबंधों का वर्णन करती है। "resources" एक servlet है जो सिस्टम संसाधनों से संबंधित है, इसमें महत्वपूर्ण डेटा और जानकारी होती है, इसलिए यह वह स्थान है जहाँ हमलावर अक्सर निशाना लगाते हैं।

    चित्र 13.1: servlet-mapping संबंध

    1. ResourceServlet वर्ग में गहराई से जाएं, विशेष रूप से org.apache.myfaces.trinidad.webapp.ResourceServlet में हम doGet फ़ंक्शन देखेंगे जो सर्वर पर भेजे गए get अनुरोध को संसाधित करता है।

    चित्र 13.2: doGet फ़ंक्शन

    • यहाँ, _getResourceLoader() विधि के माध्यम से, इनपुट अनुरोध से एक नया लोडर बनाया जाता है। साथ ही, एक resourcePath भी प्रारंभ किया जाता है और getResourcePath विधि के माध्यम से servletPath और servletInfo प्राप्त करता है, जिसमें पैरामीटर request होता है। वह लोडर getResource(resourcePath) फ़ंक्शन को कॉल करता है, इनपुट अनुरोध से संसाधन को लोड करने का प्रयास करता है और org.apache.myfaces.trinidad.resource.ResourceLoader.getResource.findResource() फ़ंक्शन के माध्यम से इसे ढूंढता है, अंत में पाया गया मान URL.class वर्ग के एक url इंस्टेंस को दिया जाता है।

    चित्र 13.3: getResource फ़ंक्शन

    • _getResourceLoader एक ConcurrentMap बनाए रखता है जो servletPath और लोडर्स के बीच मैपिंग संबंध संग्रहीत करता है। यह संबंध oracle.adfinternal.view.resource.rich.RenderKitResourceLoader में स्पष्ट रूप से परिभाषित है।

    चित्र 13.3: RenderKitResourceLoader वर्ग

    • RenderKitResourceLoader() फ़ंक्शन में _register विधि को कॉल किया जाता है और संबंधित regex + लोडर पारित किए जाते हैं, फिर super.register लौटाया जाता है, जो इसका मूल फ़ंक्शन है। यह फ़ंक्शन concurrentmap_loaders में पैटर्न और संबंधित लोडर मान जोड़ता है। इसलिए, जब doGet() फ़ंक्शन पर लोडर प्रारंभ किया जाता है और इनपुट अनुरोध का पैरामीटर प्राप्त करता है, तो भेजे गए URL अनुरोध से servletPath मान लिया जाता है ताकि _loader.get() में पास किया जा सके और संबंधित सर्वलेट प्राप्त किया जा सके।

    चित्र 13.4: _register विधि

    चित्र 13.5: register विधि (मूल विधि)

    • कमजोरी के लेखक का मानना है कि उन वर्गों में जिनमें findResource() को ओवरराइड करने वाली विधि है, oracle.adfinternal.view.resource.rich.RemoteApplicationResourceLoader वह वर्ग है जिसमें डीसीरियलाइज़ेशन का जोखिम है। आइए इसका विश्लेषण करें ताकि कारण का पता लगाया जा सके।

    RemoteApplicationResourceLoader.class में findResource() फ़ंक्शन का विश्लेषण

    चित्र 13.6: findResource() फ़ंक्शन

    यह फ़ंक्शन एक विधि लौटाता है जिसमें कस्टम प्रोटोकॉल RAStreamHandler() शामिल है। RAStreamHandler() new RAURLConnection मान के साथ एक URLConnection ऑब्जेक्ट बनाएगा।

    चित्र 13.7: RAStreamHandler() विधि

    RAURLConnection फ़ंक्शन _getPathBean को कॉल करता है।

    चित्र 13.8: RAURLConnection () विधि

    _getPathBean फ़ंक्शन में एक बीन ऑब्जेक्ट होता है जो getInstanceFromString() फ़ंक्शन को कॉल करके बनाया जाता है, जो इनपुट स्ट्रिंग को संसाधित करके संबंधित कुंजियाँ (फ़िल्टर) प्राप्त करता है।

    चित्र 13.9: _getPathBean फ़ंक्शन

    इनपुट बीन स्ट्रिंग को SerializationUtils वर्ग के माध्यम से URL एन्कोडेड रूप से एक URLEncoderPathBean ऑब्जेक्ट में बदल दिया जाएगा। यदि सब कुछ ठीक रहता है, तो आगे का इनपुट fromURLEncodeString() फ़ंक्शन में पारित किया जाएगा।

    चित्र 13.10: getInstanceFromString() फ़ंक्शन

    चित्र 13.11: fromURLEncodedString() फ़ंक्शन

    यदि इनपुट स्ट्रिंग में त्रुटि होती है, तो एक अपवाद उत्पन्न होगा। अपवाद मुख्य रूप से पेलोड में उपयोग की जाने वाली लाइब्रेरी के कारण होता है, संस्करण बेमेल या Lambda फ़ाइल के पथ में त्रुटि के कारण।

    fromURLEncodedString() फ़ंक्शन में, एक fromString फ़ंक्शन url पैरामीटर के साथ लौटाया जाता है, और इसका कोड इस प्रकार है:

    चित्र 13.12: fromString() फ़ंक्शन

    fromString फ़ंक्शन में, डेटा readObject() द्वारा पढ़ा जाता है और वापस किया जाता है। यह देखा जा सकता है कि इनपुट किसी भी फ़िल्टरिंग के बिना है। यह कई फ़ंक्शनों से होकर बहता है और अंततः fromString() में डीसीरियलाइज़ होता है। यह शोषण के लिए सिंक है। सिंक मिल गया है, अब स्रोत खोजना बाकी है।

    1. स्रोत खोजें: जैसा कि ऊपर विश्लेषण किया गया है, स्रोत खोजने के लिए प्रारंभिक URL अनुरोध को निर्धारित करना आवश्यक है। हम देखते हैं कि findResource() फ़ंक्शन को कॉल करने के लिए, हमें RemoteApplicationResourceLoader वर्ग तक पहुँचने का अधिकार होना चाहिए। RenderKitResourceLoader वर्ग में इसे बहुत स्पष्ट रूप से परिभाषित किया गया है।```bash this._register("/./remote/(.)", new RemoteApplicationResourceLoader());
    root@kitploit:~
    इसलिए, उपरोक्त क्लास को कॉल करने के लिए हमें “/.*/remote/(.*)” जैसे regex की आवश्यकता है। इसलिए, जब राउटर या इनपुट पथ /em/afr/foo/remote/payload जैसा होता है, तो यह इस फ़ाइल में निर्दिष्ट संरचना को संतुष्ट करेगा, तब RemoteApplicationResourceLoader का उपयोग doGet पर लोडर के रूप में किया जाएगा, और संबंधित क्लास फ़ाइल oracle.adfinternal.view.resource.rich.RemoteApplicationResourceLoader इसमें ओवरराइड किए गए findResource() फ़ंक्शन को कॉल करेगा। इसलिए यदि पेलोड सही पते पर भेजा जाता है, तो डेटा आसानी से प्रसारित हो जाएगा और फ़िल्टर में नहीं फंसेगा।
    
    यह अंतिम URL है जिसका उपयोग शोषण के लिए किया जाता है:
    __hostname:port/contextApp/afr/foo/remote/payload/__
    
    जहाँ contextApp उन पथों में से एक है जो OBIEE स्थापित करने के बाद होते हैं जैसे /em; /bicomposer; ….
    
    Foo कोई भी स्ट्रिंग है
    
    Payload वह स्ट्रिंग है जो तैयार किए गए आक्रमण प्रोजेक्ट के Main फ़ंक्शन को चलाने पर उत्पन्न होती है।
    
    ### पेलोड बनाने के लिए कोड का विश्लेषण
    
    यह प्रोजेक्ट CVE-2020-14644 के गैजेट चेन का अनुसरण करता है
    
    ![file Lambda](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/payload2.png)
    
    Class LambdaIdentity$E12ECA49F06D0401A9D406B2DCC7463A AbstractRemotable से विरासत में मिला है और इसका उपयोग दूरस्थ प्रणाली के साथ इंटरैक्ट करने के लिए किया जाता है।
    
    Java Reflection API का उपयोग करके, हमलावर वर्तमान निष्पादन थ्रेड से WorkAdapter आसानी से प्राप्त कर सकता है।
    
    इसके बाद WorkAdapter का connectionHandler फ़ील्ड प्राप्त करेगा और connectionHandler से ServletRequest और ServletResponse प्राप्त करने के लिए क्वेरी करेगा।
    
    इसके बाद, अनुरोध (ServletRequest) से "cmd" हेडर का मान प्राप्त करें, फिर जाँचें कि क्या "cmd" खाली नहीं है, तो वर्तमान चल रहे ऑपरेटिंग सिस्टम (Windows या Linux/Unix) के अनुसार एक शेल कमांड निष्पादित करें।
    
    शेल कमांड से परिणाम पढ़ें और उस परिणाम को प्रतिक्रिया (ServletResponse) में भेजें।
    
    यदि निष्पादन के दौरान कोई त्रुटि होती है, तो उन्हें printStackTrace() विधि के माध्यम से कंसोल स्क्रीन पर मुद्रित किया जाएगा।
    
    LamdaIdentity वर्ग के नाम के पीछे का Id weblogic सर्वर के संस्करण पर निर्भर करता है, यह com.tangosol.internal.util.invoke.ClassIdentity वर्ग के MD5 हैश मान के अनुसार एन्कोडेड एक स्ट्रिंग है, और चूँकि प्रत्येक संस्करण में यह वर्ग अलग होता है, इसलिए जैसा कि कहा गया है, पेलोड में त्रुटि न हो इसके लिए इसकी सावधानीपूर्वक जाँच की जानी चाहिए।
    
    यहाँ, इनपुट अनुरोध के हेडर से एक cmd वेरिएबल लिया जाता है, फिर इसे नीचे दिए गए Runtime.getRumtime.exec() कमांड में जोड़ा जाता है, md5 हेक्स कोड के रूप में एन्कोड और डीकोड किया जाता है, और OBIEE सिस्टम पर भेजे जाने के बाद deserialization मान लौटाता है।
    
    अंत में, Main फ़ंक्शन में, एक RemoteConstructor ऑब्जेक्ट बनाया जाता है, जिसे SerializationUtils लाइब्रेरी के माध्यम से URL एन्कोडेड स्ट्रिंग में परिवर्तित किया जाता है। यह स्ट्रिंग सीधे स्रोत URL में डाली जाती है, जिससे हमलावरों को मनमाना __cmd__ कमांड डालने का अवसर मिलता है।
    
    ![हैडर Main](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/payload1.png)
    
    ## शोषण का पुनरुत्पादन
    
    ![/em का शोषण](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit1.png)
    
    ![/em का शोषण](https://raw.githubusercontent.com/hienkiet/CVE-2022-201145-12.2.1.3.0-Weblogic/main/image/exploit2.png)
    
    ## संदर्भ
    
    1. https://peterjson.medium.com/miracle-one-vulnerability-to-rule-them-all-c3aed9edeea2
    
    2. https://testbnull.medium.com/oracle-access-manager-pre-auth-rce-cve-2021-35587-analysis-1302a4542316
    
    ## भेद्यता के लेखक: Jang Nguyen और Duc PeterJson
    
    टूल डाउनलोड करें