什么是JWT?
JSON Web Token (JWT) 是一种开放标准 (RFC 7519),它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。此信息可以验证和信任,因为它是经过数字签名的。JWT 可以使用密钥(使用 HMAC算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。
JWT的优点
1.JWT可以进行跨语言支持的,如JAVA,JavaScript,NodeJS,PHP等很多语言都可以使用。
2.JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
3.JWT结构简单,字节占用很小,便于传输。
4.JWT不需要在服务端保存会话信息,易于应用的扩展。
5.可扩展性好, 应用程序分布式部署的情况下,session需要做多机数据共享,jwt不需要。
6.无状态的jwt不在服务端存储任何状态。
JWT的缺点
1.JWT包含认证信息,因此一旦信息泄露
,任何人都可以获得令牌的所有权限。
2.JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。
3.安全性低, 由于jwt的payload是使用base64url编码的,可以直接解码,因此jwt中不能存储敏感数据。而session的信息是存在服务端的,相对来说更安全。
4.性能比较差, jwt太长。由于是无状态使用JWT,所有的数据都被放到JWT里,如果还要进行一些数据交换,那载荷会更大,经过编码之后导致JWT非常长。
JWT的基本结构
一般是分为三个字符串的,分别为头部、载荷、签名,中间用.隔开:
(1)Header:加密算法与Token类型;
(2)Payload:用户信息和附加信息的声明,一般是Json类型的键值对;
(3)Signature:对前两个部分的签名,其中包含了base64加密后的Header、base64加密后的Payload、签名加密算法私钥。
JWT漏洞利用工具
https://jwt.io/ JWT专用的解码网站
https://tooltt.com/jwt-decode/ JWT Token解析解码工具
https://github.com/brendan-rius/c-jwt-cracker jwt爆破工具
https://github.com/ticarpi/jwt_tool jwt综合工具
python的pyjwt库
实例
靶场地址:https://authlab.digi.ninja/
敏感信息泄露(Leaky JWT)

上边提供的是加密的JWT的token,利用解密的网站进行解密
https://tooltt.com/jwt-decode/

发现账号和密码,密码是经过MD5加密的,拿去MD5解密

拿到用户名和密码
joe/Password1

空加密算法破解JWT(JWT None Algorithm)

JWT一般是几种加密算法进行签名,但是有的服务端也可以接受none(空加密算法)进行加密,在burp里边有一个Json web Token Attacker插件,可以使用空加密算法,下载安装

看一下token抓包,可以看到使用user登陆成功了

可以看到用户名和等级为robin,user

修改了用户发现是不允许的认证方式

可以在插件里边设置算法为None发现admin权限登陆成功
