一、前言

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内容就这么多

六、参考链接

json web token是用来做什么的? - 知乎
jwt是和oauth相互不同的两种验证方式么?
什么是 JWT -- JSON WEB TOKEN
什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安...