
أداة اختراق JWT بالقوة العمياء مكتوبة بلغة C
أداة كسر القوة الغاشمة متعددة الخيوط لـ JWT مكتوبة بلغة C. إذا كنت محظوظًا جدًا أو لديك قوة حاسوبية هائلة، فسيجد هذا البرنامج المفتاح السري لرمز JWT، مما يسمح لك بتزوير رموز صالحة. هذا لأغراض الاختبار فقط، لا تضع نفسك في مشكلة :)
استخدمت تنفيذ Apple Base64 الذي قمت بتعديله قليلاً.
docker build . -t jwtcrack
docker run -it --rm jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE
تأكد من تثبيت رؤوس openssl.
على أوبونتو يمكنك تثبيتها باستخدام apt-get install libssl-dev
make
إذا كنت تستخدم Mac، يمكنك تثبيت OpenSSL باستخدام brew install openssl، لكن الرؤوس ستكون مخزنة في مكان مختلف:
make OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib
$ > ./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE
وظائف التجزئة التالية مدعومة لـ HMAC، أي لتوليد رموز مصادقة الرسائل باستخدام المفتاح: "sha256" لـ JSON HS256 (HMAC باستخدام SHA-256)، و"sha384" لـ HS384، و"sha512" لـ HS512، على التوالي. يمكنك تحديد اسم أي وظيفة تجزئة أخرى تمامًا كما هو مسمى في OpenSSL. إذا سمح OpenSSL باستخدام وظيفة التجزئة هذه لـ HMAC، فسيحاول jwtcrack فك تشفير السر. ومع ذلك، نظرًا لأن jwtcrack هو مجرد مفكك تشفير، فلا يوجد ضمان بأن هذه الخوارزمية قد استخدمت بالفعل للتشفير، ناهيك عن كونها من بين قائمة الخوارزميات المسموح بها في RFC "JSON Web Algorithms". راجع القسم 3.1 من RFC 7518 لمزيد من التفاصيل.
في المثال التالي، نستخدم وظيفة تجزئة sha256 التي تتوافق مع JSON HS256 (HMAC-SHA256)، انظر "sha256" كآخر معلمة لسطر الأوامر. أيضًا، في هذا المثال نحدد أقصى طول للسر هو 5 أحرف، ونحدد الأبجدية إلى الأحرف التالية: ABCSNFabcsnf1234
$ > ./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE ABCSNFabcsnf1234 5 sha256
في المثال أعلاه، المفتاح هو Sn1f، ويستغرق أقل من ثانية على جهاز كمبيوتر محمول متوسط تم تصنيعه حوالي عام 2019 (مثل معالج Intel المبني على بنية Ice Lake). تم استخدام GCC الإصدار 9.3.0 مع "-O3" لتجميع برنامج jwtcrack. تم ربطه بمكتبة OpenSSL الإصدار 1.1.1f تحت Linux Ubuntu 20.04.1 LTS.
هنا، في المثال التالي، نستخدم "sha512" كآخر معلمة لسطر الأوامر لتحديد HS512 (HMAC-SHA512)، ونحدد أيضًا أقصى طول للسر هو 9 أحرف، ونحدد الأبجدية إلى الأحرف اللاتينية الصغيرة السبعة التالية: "adimnps".
$ > ./jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlIjoiYWRtaW4ifQ.RnWtv7Rjggm8LdMU3yLnz4ejgGAkIxoZwsCMuJlHMwTh7CJODDZWR8sVuNvo2ws25cbH9HWcp2n5WxpIZ9_v0g adimnps 9 sha512
في المثال أعلاه، المفتاح هو adminpass، ويستغرق فك تشفيره حوالي 15 ثانية في المتوسط على كمبيوتر محمول بمعالج Intel Core i7 1065G7 على بنية Ice Lake (2019)، التردد الأساسي 1.30 جيجاهرتز، أقصى توربو 3.90 جيجاهرتز). يبلغ إجمالي عدد ثواني وحدة المعالجة المركزية المستهلكة من كل نواة في وضع المستخدم بسبب تعدد الخيوط حوالي 100 في المتوسط لفك تشفير هذا السر.
مثال على استخدام "sha384":
$ > ./jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzM4NCJ9.eyJyb2xlIjoiYWRtaW4ifQ.31xCH3k8VRqB8l5qBy7RyqI2htyCskBy_4cIWpk3o43UkIMW-IcjTUEL_NyFXUWJ 0123456789 6 sha384
/usr/bin/time -f "Total number of CPU-seconds consumed directly from each of the CPU cores: %U\nElapsed real wall clock time used by the process: %E" ./jwtcrack eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlIjoiYWRtaW4ifQ.RnWtv7Rjggm8LdMU3yLnz4ejgGAkIxoZwsCMuJlHMwTh7CJODDZWR8sVuNvo2ws25cbH9HWcp2n5WxpIZ9_v0g adimnps 9 sha512
تنفيذ Base64 الذي أستخدمه (من Apple) به أحيانًا أخطاء لأن جميع تطبيقات Base64 ليست متطابقة. لذا في بعض الأحيان، سيعمل فك تشفير رمز Base64 الخاص بك جزئيًا فقط، وبالتالي ستتمكن من العثور على سر لرمزك ليس هو الصحيح.
إذا كان هناك شخص يرغب في تنفيذ تطبيق Base64 أكثر متانة، فسيكون ذلك رائعًا :)