JWT学习

JWT 的定义

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用间安全地传递声明的紧凑且自包含的方式。它以 JSON 对象的形式传输信息,并通过数字签名或加密确保数据的完整性和可信性。

JWT 的结构

JWT 由三部分组成,用点号(.)分隔:

  • Header:包含令牌类型(如 JWT)和签名算法(如 HMAC SHA256 或 RSA)。
    {
      "alg": "HS256",
      "typ": "JWT"
    }
    

    Header是JWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、"RS256"等,以及其他可选参数,如"kid"、"jku"、"x5u"等

    alg字段通常用于表示加密采用的算法。如"HS256""RS256"

    typ字段通常用于表示类型

    还有一些其他可选参数,如"kid""jku""x5u"

  • Payload:存储声明(claims),包括用户身份、权限和其他元数据。声明分为三类:
    • Registered claims:预定义字段(如 iss 签发者、exp 过期时间)。
    • Public claims:自定义公开字段。
    • Private claims:双方约定的私有字段。
    {
      "sub": "1234567890",
      "name": "John Doe",
      "admin": true
    }
    

    Payload是JWT的第二个部分,这是一个JSON对象,主要承载了各种声明并传递明文数据,用于存储用户的信息,如id、用户名、角色、令牌生成时间和其他自定义声明。

    iss:该字段表示jwt的签发者。

    sub:该jwt面向的用户。

    aud:jwt的接收方。

    exp:jwt的过期时间,通常来说是一个时间戳。

    iat:jwt的签发时间,常来说是一个时间戳。

    jti:此jwt的唯一标识。通常用于解决请求中的重放攻击。该字段在大多数地方没有被提及或使用。因为使用此字段就意味着必须要在服务器维护一张jti表, 当客户端携带jwt访问的时候需要在jti表中查找这个唯一标识是否被使用过。使用这种方式防止重放攻击似乎让jwt有点怪怪的感觉, 毕竟jwt所宣称的优点就是无状态访问

  • Signature:对前两部分 Base64 编码后的字符串进行签名,防止篡改。
    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload),
      secret_key
    )
    

    Signature是对HeaderPayload进行签名,具体是用什么加密方式写在Header的alg 中。同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

    HeaderPayload进行签名,具体是用什么加密方式写在Header的alg中。

    同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

    第一部分:对 JSON 的头部做 base64 编码处理得到

    第二部分:对 JSON 类型的 payload 做 base64 编码处理得到

    第三部分:分别对头部和载荷做base64编码,并使用.拼接起来

    使用头部声明的加密方式,对base64编码前两部分合并的结果加盐加密处理,作为JWT

    在线解析:https://jwt.io/

    BURP插件:Hae 或 JSON Web Tokens

靶场测试

1.None无签名认证

进入靶场显示

尝试抓包获取信息

转发发现admin

将JWT放到官网解析

重新编码,将user改为admin

重发得到flag

2.None算法绕过签名

重复上述操作,无回显,将算法修改为none

重复得到flag

3.弱口令密钥获取

抓包显示JWT为三部分,存在签名

使用JWT_tool破解密码为123456

在官网将 user 改为admin后重新发包获得flag

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值