JWT弱密钥暴力破解
JWT密钥介绍
在 JWT 中密钥用于生成和验证签名,因此密钥的安全性对JWT的安全性至关重要,一般来说JWT有以下两种类型的密钥:
-
对称密钥:对称密钥是一种使用相同的密钥进行加密和解密的加密算法,在JWT中使用对称密钥来生成和验证签名,因此密钥必须保密,只有发送方和接收方知道,由于对称密钥的安全性取决于密钥的保密性,因此需要采取一些措施来保护它 -
非对称密钥:非对称密钥使用公钥和私钥来加密和解密数据,在JWT中使用私钥生成签名,而使用公钥验证签名,由于公钥可以公开,因此非对称密钥通常用于验证方的身份
在实现JWT应用程序时,开发人员有时会犯一些错误,比如:忘记更改默认密码或占位符密码,他们甚至可能复制并粘贴他们在网上找到的代码片段然后忘记更改作为示例提供的硬编码秘密,在这种情况下攻击者使用众所周知的秘密的单词列表来暴力破解服务器的秘密是很容易的。
在进行JWT弱密钥破解时,只需要来自目标服务器的有效签名 JWT 和已知密钥的单词列表。利用 hashcat 或者 jwt_tool 来进行暴力破解
公开已知密钥列表:
https://github.com/wallarm/jwt-secrets/blob/master/jwt.secrets.list
下面以 portswigger 靶场来演示两个工具的使用
方式一:hashcat
项目地址:https://github.com/hashcat/hashcat
1.使用wiener用户登录,查看数据包,其中session的值即为JWT, 将 JWT 数据保存 jwt.txt ,准备好密钥列表 jwt-secret.txt
hashcat -m 16500 jwt.txt -a 0 secrets.txt
3.生成伪造密钥
header(base64)+payload(base64)使用.连接组成的字符串,然后通过header中声明的加密方式进行加盐secret1组合加密,然后就构成了jwt的第三部分
到 https://jwt.io 中修改 wiener 为 administrator ,将破解出来的密钥 secret1 加进去
4.复制新的 JWT 到 session,访问 /admin 成功, 调用 /admin/delete?username=carlos 删除用户 carlos
方式二:jwt_tool
项目地址:https://github.com/ticarpi/jwt_tool
python3 jwt_tool.py JWT_HERE -C -d secret.txtpython3 jwt_tool.py eyJraWQiOiI4M2RhOGNjMi1hZmZiLTRmZGMtYWMwYS1iMWNmMTBkNjkyZGYiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwb3J0c3dpZ2dlciIsInN1YiI6IndpZW5lciIsImV4cCI6MTY4Nzc5NjQwMn0.IhZV-7RHTpEcQvkcZOA3knCYmQD0YUg-NFMj9fWSFjw -C -d jwt-secrets.txt
后续操作与方式一一致
原文始发于微信公众号(无尽藏攻防实验室):JWT弱密钥暴力破解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论