ctfshow-jwt


JWT简介:

JSON Web Token(JWT),用来作为JSON对象传输信息。此信息可以通过数字签名进行验证和信任。JWT可以使用秘密(搭配HMAC算法)或使用RSA或ECDSA的公钥/私钥对进行签名。多用于无状态的身份认证(无状态只服务端不会持久化token)

Jwt构造

  • token表现形式

    Xxxx.yyyyy.zzzzz

    分别为Header(头),Payload(有效载荷),Signature(签名)

构造详解

  • 第一部分为Header,包含了两个字段,一个表示为采用JWT加密的type字段,另一个为token中第三个参数加密的算法(HMAC SHA256,RSA),最终将两个字段构造为json格式经过BASE64Url加密成为密钥的一部分。
{
    "typ":"JWT",
    "alg":"HS256"
}
  • 第二部分为Payload,包含了实体(通常为用户信息),以及其他数据的声明。最终也会作为json格式通过BASE64Url方式加密形成token第二部分

Payload包含了三种声明:

  1. 已注册的声明(官方已经预定义),包括iss(发行人),exp(到期时间),sub(主题),aud(观众)等,声明的名称不超过三个字符。
  2. 公开声明,由使用JWT的人随意定义,公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息,但不建议添加名干信息,因为该部分在客户端可以解密。
  3. 私有声明,由提供这和消费者锁共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着这部分信息可以归类为明文信息。
  4. 例子:
{
  "iss": "Online JWT Builder",
  "iat": 1416797419,
  "exp": 1448333419,
  "aud": "www.gusibi.com",
  "sub": "uid",
  "nockname": "goodspeed",
  "username": "goodspeed",
  "scopes": ["admin","user"]
}
  1. 部分已注册声明:
iss: 该JWT的签发者,是否使用是可选的
sub: 该JWT所面向的用户,是否使用时可选的
aud: 接收该JWT的一方,是否使用时可选的
exp(expires): 过期时间,这是一个Unix时间戳是否使用是可选的;
iat(issued at): 在什么时候前发的(UNIX时间),是否使用是可选的;
nbf(Not before): 如果当前时间zainbf里的时间之前,则Token不接受;一般都会留一些余地。比如几分钟
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
  • 第三部分为Signature,创建Signaturre(签名)部分,必须采用编码Header(标头)编码的Payload(有效负载),secret(秘密,可以是随机生成的盐值或其他加密使用的字符串),Header(标头中)指定的算法,并对其进行签名,如用HMACSHA256加密
HMACSHA256(
    base64UrlEncode(header)+"."+
    base64UrlEncode(payload),
    secret)

web345

  • 查看源码
  • 访问/admin/
  • 查看cookie中得到的auth值,base64解码,改useradmin,在编码,放回cookie
eyJhbGciOiJOb25lIiwidHlwIjoiand0In0.W3siaXNzIjoiYWRtaW4iLCJpYXQiOjE2Mjc2OTE4NDEsImV4cCI6MTYyNzY5OTA0MSwibmJmIjoxNjI3NjkxODQxLCJzdWIiOiJ1c2VyIiwianRpIjoiMjBmN2ZjYWM5NDIxYjIwY2ZiYjNhMzRhMjNlMDc4ZTYifV0

文章作者: 尘落
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 尘落 !
评论
  目录