一、前言
jwt编码的题已经是第二次碰见了,在12月份的比赛里面忘了个干净,心想着总结一下。
二、什么是jwt以及他的作用是什么
根据官网的定义,JSON Web Token(以下简称 JWT)是一套开放的标准(RFC 7519),它定义了一套简洁(compact)且 URL 安全(URL-safe)的方案,以安全地在客户端和服务器之间传输 JSON 格式的信息。
jwt的作用是:在网络通信双方之间传递,是一套简洁的URL安全方案。
它的特点比较多:体积小,传输速度快,支持跨域验证等等。
三、jwt的格式是什么
jwt由三部分组成,第一部分是头部(head),第二部分是载荷(payload),第三部分是签名(signature)。
1、头部(head)
头部承载了两个信息,一个是声明类型(typ),一个是声明的算法(alg)。两个信息都会经过base64编码。头部的作用是表明加密算法。
2、载荷(payload)
载荷是存放有效信息的地方。有效性息包含三个部分:标准中注册的声明;公共的声明;私有的声明。同样是三个部分都会经过base64编码(这也就是说,在这个部分只能有三行有效信息)
标准中的注册的声明(jwt作者定义的,建议但不强制使用):
iss: jwt签发者
sub: jwt所面向的用户
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明:可以添加任何信息
私有的声明:可以添加任何信息
3、签名(signature)
这个部分由base64过后的head和base64过后的payload,通过head中声明的加密方式进行加盐secret,然后构成了第三部分。
secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。(也就是说secret才是保密的关键,一旦secret被破解,保密不再存在)


四、jwt的特征
jwt有着明显的三段式,用.符号间隔,开头一般都是ey开头
五、应用(2019 ciscn华北赛区web2部分实例)

使用burpsuite pro查看cookie

拿出来改改解密,把secret换成jwt的secret,使用c-jwt-cracker得到secret

jwt里面的aaaaa换成admin,secret是1Kun。最后变成这个

将得到的jwt替换成现在的jwt

变成了admin,这个题jwt内容就这么多
六、参考链接

