关于JSON Web Token的攻击
详细个人博客内容见https://zzh.pub
Json Web Token
Json Web Token简称JWT,是基于JSON开发标准与token鉴权机制将验证信息存放在客户端,通过请求附加验证信息向服务器请求验证并返回数据的认证方法。其对分布式站点的单点登陆有较高的效率。
JWT的构成
JWT通常由header,payload,signature三部分构成,三部分通过拼接构成token。
- HEADER部分承载着jwt与加密算法两部分,type代表类型通常为jwt,alg代表声明的算法通常使用HS256等。
{
'typ':'JWT',
'alg':'HS256'
}
如上为通常的头部信息,将上述信息经过base64加密便是token的头部分也是第一部分
2. Payload部分通常包含标准中注册的声明,公共的声明,私有的声明 。其中标注中的注册声明有iss:jwt签发者;sub:jwt所面向的用户;aud:接收jwt的一方;exp:jwt的过期时间,这个过期时间必须大于签发时间;nbf:定义在什么时间之前,该jwt都是不可用的;iat:jwt的签发时间;jti:jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击 。公共声明一般是相关业务等声明信息。私有声明即根据功能的相关自定义。上述内容经过base64加密构成token中的payload部分
3. Signature部分通常是该token的检验部分即签证信息部分,利用HEADER中的加密方式结合相关SECRET(存储在服务器端的私钥文件)进行加密构成。
对JWT的相关攻击记录
常用工具
加解密验证:https://jwt.io/
暴力破解:https://github.com/brendan-rius/c-jwt-cracker,https://github.com/jmaxxz/jwtbrute
原理
利用JWT进行身份验证的缺陷性,进行利用密钥伪造身份构造token或利用算法签名缺陷伪造进行JWT攻击。
CTF记录
通过对secret的获取是token伪造的一个关键点,一般secret在题目中常隐藏较深,通常作为判断JWT之后的首个突破点,如果对加密算法爆破失败通常需要利用题目其他信息进行发现,常见的有文件泄露,文件包含漏洞,利用其他页面信息获取等。其次多对JWT的利用多从其加密算法入手,通过对加密算法的修改,进而突破。
案例记录
Juice Shop JWT issue 1:修改alg为none
网鼎杯i_am_admin:通过低权用户登陆取得SECRET后伪造admin突破身份验证
网鼎杯mmmmy:爆破secret
b00t2root:修改私有声明
CTF论剑场:文件泄露+修改标准中注册的声明
推荐参考文章
http://www.freebuf.com/articles/web/180874.html
https://www.freebuf.com/articles/web/181261.html
https://xz.aliyun.com/t/2338
http://ctfdog.com/ctf/训练学习/ctf比赛中jwtjson-web-tokens相关学习/