JSON Web Token

JSON Web Token

0x01  JSON Web Token介绍

Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。

本节课中详细介绍了JSON Web Token(JWT)中的漏洞的利用。在这个程序中,JWT用于认证,登录成功后,用户将获得一个Cookie的JWT。

JSON Web Token是一种数据的存储机制,主要有加密和签名的安全机制。

JWT的格式如下:

Base64(header).Base64(payload).Base64(signature)

例如:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXUyJ9.eyJsb2dpbiI6ImFhYWEiLCJpYXQiOiIxNTI1MzQyMDM3In0

表示

{"alg":"HS256","typ":"JWS"}. {"login":"aaaa","iat":"1525342037"}.网站对数据设计签名机制

第三部分是一个签名,网上说的很详细了,此处不进行说明。

0x02  JSON Web Token漏洞利用

首先设置好代理,使用BurpSuite进行抓包,然后注册一个用户,点击下方的登录,如果已经注册过了,也可以直接登录

JSON Web Token

JSON Web Token

将抓到的包转发,直到出现包含cookie的这个包

JSON Web Token

鼠标右键,点击Send to Repeater

JSON Web Token

点击go,可以在右边返回的数据包中发现正常的登录的用户aaaa

JSON Web Token

将auth的值右键发送到Decoder进行解码

JSON Web Token

分别对每一段进行Base64解码

JSON Web Token

得到如下结果

JSON Web Token

然后将编码格式HS256改为None,将用户名改为admin,然后分别进行Base64编码,并把第三部分去掉(注意不要去掉.)

JSON Web Token

得到如下结果(注意后边有个.)

JSON Web Token

把这个结果复制到Repeater中,并点击Go

JSON Web Token

可以发现右侧返回的数据包中登陆的账号已经变成了admin

JSON Web Token