
🐍 مجموعة أدوات لاختبار وتعديل وكسر JSON Web Tokens
jwt_tool.py هي مجموعة أدوات للتحقق من JWTs وتزويرها وفحصها والتلاعب بها (JSON Web Tokens).

تشمل وظائفه:
أُعدّت هذه الأداة لـ مختبري الاختراق الذين يحتاجون إلى التحقق من قوة الرموز المستخدمة وقابليتها للهجمات المعروفة. تتوفر مجموعة من خيارات التلاعب والتوقيع والتحقق للمساعدة في التعمق في نقاط الضعف المحتملة الموجودة في بعض مكتبات JWT.
كما أنها ناجحة مع متحدّي CTF - إذ تبدو مسابقات CTF مهتمة بـ JWTs في الوقت الحالي.
وقد تكون مفيدة أيضًا لـ المطوّرين الذين يستخدمون JWTs في مشاريعهم، ويرغبون في اختبار الاستقرار والثغرات المعروفة عند استخدام رموز مزوّرة.
هذه الأداة مكتوبة بلغة Python 3 (الإصدار 3.6+) باستخدام المكتبات الشائعة، ومع ذلك تتطلب بعض الوظائف التشفيرية (وكذلك إضفاء المظهر والقراءة العامة) تثبيت عدد قليل من مكتبات Python الشائعة.
(يتوفر إصدار أقدم من هذه الأداة بلغة Python 2.x على الفرع القديم لمن يحتاج إليه، على الرغم من أنه لن يعد مدعومًا أو محدّثًا)
الاستخدام المفضّل لـ jwt_tool هو مع صورة jwt_tool الرسمية المستضافة على Dockerhub
الأمر الأساسي لتشغيل هذه الأداة هو كالتالي:
الأمر الأساسي لتشغيل jwt_tool:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
باستخدام الأمر أعلاه يمكنك إضافة أي وسائط أخرى كالمعتاد.
لاحظ أنه سيتم ربط الملفات المحلية في دليل العمل الحالي بمجلد /tmp داخل حاوية Docker، لذا يمكنك استخدامها عبر هذا المسار المطلق في وسائطك.
أي
/tmp/localfile.txt
التثبيت يتم ببساطة عبر تنزيل ملف jwt_tool.py (أو استنساخ المستودع باستخدام git clone).
(قم أيضًا بتطبيق chmod على الملف إذا أردت إضافته إلى $PATH واستدعاءه من أي مكان.)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
عند التشغيل الأول ستقوم الأداة بإنشاء ملف إعدادات، وبعض الملفات المساعدة، وملف سجل، ومجموعة من المفاتيح العامة والخاصة بصيغ متعددة.
jwtconf.ini كقيمة "jwkloc".لإصلاح الألوان المعطوبة في Windows cmd/Powershell: قم بإلغاء تعليق السطرين التاليين في jwt_tool.py (أزل "# " من بداية كل سطر)
ستحتاج أيضًا إلى تثبيت colorama: python3 -m pip install colorama
# import colorama
# colorama.init()
يجب أن تكون الوسيطة الأولى هي JWT نفسه (إلا إذا تم توفيره في ترويسة أو قيمة كوكيز). عدم توفير وسائط إضافية سيعرض لك قيم الرمز المفكوكة للمراجعة.
$ python3 jwt_tool.py <JWT>
أو الأمر الأساسي لـ Docker:
$ docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
ستتحقق الأداة من صحة الرمز وتعرض قيم الترويسة والحمولة.
الوسائط الإضافية العديدة ستنقلك مباشرة إلى الوظيفة المناسبة وتعيد لك رمزًا جاهزًا للاستخدام في اختباراتك.
على سبيل المثال، لتعديل الرمز الحالي شغّل الأمر التالي:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
تتطلب العديد من الخيارات قيمًا إضافية لضبط الإعدادات.
على سبيل المثال، لتشغيل نوع معيّن من الاستغلال تحتاج إلى اختيار خيار الاستغلال (eXploit) (-X) وتحديد الثغرة (هنا باستخدام "a" لثغرة alg:none):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
بعض الخيارات مثل التحقق من الرموز تتطلب توفير معاملات/ملفات إضافية (هنا توفير المفتاح العام بصيغة PEM):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -V -pk public.pem
تسمح جميع الأوضاع الآن بإرسال الرمز مباشرة إلى تطبيق.
تحتاج إلى تحديد:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -rh "Origin: null" -cv "Welcome" -M erيتم عرض استجابات مختلفة من الطلب:
فيما يلي استعراض سريع لتقييم أساسي لتنفيذ JWT. إذا لم تنجح هذه الخيارات فتعمّق في الأوضاع والخيارات الأخرى بحثًا عن ثغرات جديدة (أو zero-days!).
اقرأ قيمة الرمز لتكوّن فكرة عن المطالبات/القيم المتوقعة في التطبيق:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw
شغّل فحص Playbook باستخدام الرمز المقدم مباشرةً ضد التطبيق للبحث عن أخطاء الإعدادات الشائعة:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -M pb
إذا تم العثور على أي ثغرات ناجحة، غيّر أي مطالبات ذات صلة لمحاولة استغلالها (هنا باستخدام استغلال Inject JWKS وحقن اسم مستخدم جديد):
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin
تعمّق أكثر عبر اختبار قيم ومطالبات غير متوقعة لتحديد سلوكيات التطبيق غير المتوقعة، أو شغّل هجمات على منطق البرمجة أو معالجة الرموز:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -I -hc kid -hv custom_sqli_vectors.txt
راجع أي استغلال ناجح عبر الاستعلام من السجلات لقراءة مزيد من البيانات حول الطلب و:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -X i -I -pc name -pv admin
للحصول على قائمة الخيارات استدعِ دالة الاستخدام:
تتطلب بعض الخيارات مثل التحقق من الرموز توفير معاملات/ملفات إضافية:
$ python3 jwt_tool.py -h
يمكن العثور على دليل مستخدم أكثر تفصيلاً في صفحة الويكي.

توجّه إلى JWT Attack Playbook للحصول على شرح مفصّل عن ماهية JWTs ووظيفتها، وسير عمل كامل لكيفية اختبارها بدقة بحثًا عن الثغرات ونقاط الضعف الشائعة وأخطاء البرمجة غير المقصودة.
تعبير Regex للعثور على JWTs في بحث Burp
(تأكد من تحديد خياري 'Case sensitive' و'Regex')
[= ]eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]* - نسخة JWT الآمنة لعناوين URL
[= ]eyJ[A-Za-z0-9_\/+-]*\.[A-Za-z0-9._\/+-]* - جميع إصدارات JWT (احتمالية أعلى للنتائج الإيجابية الخاطئة)
JWT Attack Playbook (https://github.com/ticarpi/jwt_tool/wiki) - لمنهجية اختبار JWT شاملة
جاء الكثير من الإلهام الأولي لهذه الأداة من الثغرات التي اكتشفها Tim McLean.
اطلع على مدونته حول نقاط ضعف JWT هنا: https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/
مجموعة كبيرة من التمارين لاختبار ثغرات JWT مقدمة من Pentesterlab (https://www.pentesterlab.com). أنصح بشدة بالاشتراك في PRO إذا كنت مهتمًا باختبار اختراق تطبيقات الويب.
يرجى الملاحظة: ستحل هذه المجموعة معظم تمارين Pentesterlab JWT في بضع ثوانٍ عند استخدامها بشكل صحيح، ومع ذلك أشجعك بشدة على حل هذه التمارين بنفسك، لمعرفة البنية ونقاط الضعف. ففي النهاية، الأمر كله يتعلق بالتعلّم...